Building Agentic Document Intelligence Pipelines: Creating Scientific Figures with AutoFigure AutoFigure, a toolkit from ResearAI, generates publication-style scientific figures from text descriptions and paper-like content, as demonstrated in a tutorial that builds a pipeline diagram for an agentic long-document intelligence system. The tutorial sets up the environment, fixes dependency issues like Pillow compatibility, and uses AutoFigure to convert a detailed pipeline description into a clean 16:9 SVG figure, with support for API-backed generation and offline rendering. The toolkit aims to streamline the creation of scientific diagrams for finance and enterprise document intelligence audiences. In this tutorial, we explore AutoFigure https://github.com/ResearAI/AutoFigure as a practical toolkit for generating scientific figures directly from text descriptions, paper-like content, and structured methodological explanations. In this tutorial, we set up the complete AutoFigure environment, fix dependency issues such as Pillow compatibility, and prepare the required rendering tools for SVG and PNG outputs. We then build a custom reference figure, configure an API-backed generation workflow, and use AutoFigure to convert a detailed agentic document intelligence pipeline into a publication-style scientific diagram. Along the way, we also test offline SVG rendering, inspect the generated files, create a sample paper and PDF, and export the final outputs to a reusable gallery and a zip archive. python import os import sys import json import time import glob import shutil import textwrap import subprocess import importlib from pathlib import Path from getpass import getpass REPO URL = "https://github.com/ResearAI/AutoFigure.git" REPO DIR = Path "/content/AutoFigure" OUTPUT ROOT = Path "/content/autofigure colab outputs" PROVIDER = os.environ.get "AUTOFIGURE PROVIDER", "openrouter" DEFAULT MODELS = { "openrouter": "google/gemini-3.1-pro-preview", "gemini": "gemini-3.1-pro-preview", "bianxie": "gemini-3.1-pro-preview", } GENERATION MODEL = os.environ.get "AUTOFIGURE MODEL", DEFAULT MODELS.get PROVIDER, "google/gemini-3.1-pro-preview" MAX ITERATIONS = int os.environ.get "AUTOFIGURE MAX ITERATIONS", "1" QUALITY THRESHOLD = float os.environ.get "AUTOFIGURE QUALITY THRESHOLD", "8.5" RUN TEXT TO FIGURE = True RUN PAPER TO FIGURE = False RUN MXGRAPH DEMO = False RUN IMAGE ENHANCEMENT = False TEXT OUTPUT FORMAT = "svg" MXGRAPH OUTPUT FORMAT = "mxgraphxml" ART STYLE = "clean publication-ready scientific illustration, precise alignment, subtle shadows, " "clear academic typography, high contrast, minimal clutter" FIGURE DESCRIPTION = """ Create a publication-ready scientific method figure for an agentic long-document intelligence system. The figure should explain the following pipeline in a left-to-right architecture: 1. Long documents enter the system. They may be PDFs, scanned reports, markdown files, tables, or mixed-layout documents. 2. A document normalization layer extracts raw text, section hierarchy, tables, figures, and metadata. 3. A routing planner decides whether each section should go to summarization, field extraction, table reconstruction, visual analysis, or citation grounding. 4. Specialized expert modules process the routed chunks: - Summarizer expert creates hierarchical summaries. - Extraction expert returns JSON fields. - Table expert reconstructs exact tables. - Visual expert describes charts and diagrams. - Citation expert links claims to evidence spans. 5. A low-cost orchestration layer selects smaller or larger LLMs depending on complexity, confidence, and budget. 6. A verification layer checks schema validity, source grounding, table consistency, and confidence. 7. The final output is an analyst-ready workspace containing a summary, extracted fields, exact tables, cited answers, and audit logs. Design requirements: - Use a wide 16:9 layout. - Use clear module boxes, arrows, and labels. - Add small callouts for cost control, confidence scoring, and auditability. - Avoid decorative clutter. - Make the flow understandable for a finance or enterprise document intelligence audience. """ MINI PAPER MARKDOWN = """ Efficient Agentic Document Intelligence for Long Financial Reports Abstract We propose an agentic document intelligence architecture for extracting summaries, facts, tables, and grounded answers from long, heterogeneous financial documents. Method Our method first normalizes each incoming document into a structured document graph. The graph contains section nodes, paragraph nodes, table nodes, figure nodes, and metadata nodes. A routing planner assigns each node to a specialized expert according to modality, complexity, and required output schema. The system uses five experts. The summarization expert produces hierarchical summaries from section-level chunks. The extraction expert fills strict JSON schemas for entities, dates, risks, financial metrics, and obligations. The table expert reconstructs exact tables and validates row-column alignment. The visual expert describes charts and diagrams. The citation expert maps every generated claim to source spans. A budget-aware orchestration layer selects model size dynamically. Simple chunks are processed by low-cost models, while complex chunks are escalated to stronger models. A verification layer then checks schema validity, citation support, numerical consistency, and table integrity. Failed checks are routed back for repair. Experiments We evaluate on financial filings and analyst reports using extraction accuracy, grounding precision, table reconstruction quality, and total inference cost. """ def run cmd, cwd=None, check=True, quiet=False : print f"\n$ {cmd}" process = subprocess.run cmd, shell=True, cwd=str cwd if cwd else None, text=True, stdout=subprocess.PIPE if quiet else None, stderr=subprocess.STDOUT if quiet else None, if quiet and process.stdout: print process.stdout -5000: if check and process.returncode = 0: raise RuntimeError f"Command failed with exit code {process.returncode}: {cmd}" return process def heading title : print "\n" + "=" 100 print title print "=" 100 def safe read path, max chars=2500 : path = Path path if not path.exists : return "" text = path.read text encoding="utf-8", errors="ignore" return text :max chars + "\n... truncated " if len text max chars else "" def clear loaded modules prefixes : for name in list sys.modules : if any name == prefix or name.startswith prefix + "." for prefix in prefixes : del sys.modules name def get colab secret names : try: from google.colab import userdata for name in names: try: value = userdata.get name if value: return value except Exception: pass except Exception: pass return None def collect api key provider : env candidates = "AUTOFIGURE API KEY", "OPENROUTER API KEY", "GOOGLE API KEY", "GEMINI API KEY", "BIANXIE API KEY", for key name in env candidates: value = os.environ.get key name if value: print f"Using API key from environment variable: {key name}" return value secret candidates = { "openrouter": "AUTOFIGURE API KEY", "OPENROUTER API KEY" , "gemini": "AUTOFIGURE API KEY", "GOOGLE API KEY", "GEMINI API KEY" , "bianxie": "AUTOFIGURE API KEY", "BIANXIE API KEY" , }.get provider, "AUTOFIGURE API KEY" value = get colab secret secret candidates if value: print "Using API key from Colab Secrets." return value value = getpass f"Paste your {provider} API key, or press Enter to skip cloud generation: " .strip return value We begin by importing and defining the main paths, provider settings, model configuration, and tutorial options. We also prepare the detailed figure description and sample paper content that we use later for AutoFigure generation. We then create helper functions to run commands, print section headings, read files safely, clear loaded modules, and securely collect API keys. python def display file if possible path, title=None : path = Path path if path else None if not path or not path.exists : print f"Missing file: {path}" return try: from IPython.display import display, Image as IPImage, SVG, Markdown if title: display Markdown f" {title}" suffix = path.suffix.lower if suffix == ".png": display IPImage filename=str path elif suffix == ".svg": display SVG filename=str path elif suffix in ".json", ".md", ".txt", ".drawio" : print safe read path, max chars=5000 else: print path except Exception as exc: print f"Could not display {path}: {exc}" def make output gallery output dir : output dir = Path output dir gallery path = output dir / "gallery.html" blocks = for p in sorted output dir.rglob " .png" : rel = p.relative to output dir blocks.append f"""