Agentic Visual Reporting
Winner of the IEEE VIS 2025 VISxGenAI Challenge. An agentic system for data analysis that pairs LLM agents with deterministic visualization modules. It produces interactive reports for readers and executable notebooks for analysts, so results can be inspected, rerun, and adapted.
Most data analysis workflows force a difficult trade-off between speed and reliability. Manual analysis produces trustworthy results but doesn’t scale, while automated tools are fast but often yield black-box outputs that are difficult to verify or adapt. This project explores a different approach to resolve this tension.
The system uses a pipeline of eleven specialized AI agents, but its core design principle is a hybrid architecture. It delegates creative and interpretive work—like planning insights and generating narratives—to AI, while assigning tasks that demand precision and consistency to deterministic components. This separation of concerns is fundamental to producing results that are both insightful and verifiable.
The result is a set of two complementary outputs that serve different needs. For readers, it generates interactive web reports for exploring data beyond the initial analysis. For analysts, it produces executable
The system is built with observability in mind. Every model call and data transformation is tracked using tools like
Invited for a live presentation at the IEEE VISxGenAI 2025 Workshop Challenge, the project prototypes a workflow where AI drafts and deterministic modules enforce constraints. The goal is to augment rather than replace human analysis by keeping outputs inspectable and rerunnable.
Stack
While the problem is more important than the tools, the tech stack tells a story about the project's architecture and trade-offs. Here's what this project is built on:
Platforms & Runtimes
Runs the 11-agent orchestration, data processing, report generation pipeline, and provenance notebooks.
Provides the browser-side Python runtime for dynamically generated Marimo notebooks.
Solves logic programs for selecting visualizations under formal design constraints.
Runs documentation tooling and build steps for report artifacts and site generation.
Implements the Observable Notebook builder service and the VitePress config for the docs site.
Implements the generated Observable notebooks and their interactive report UI.
Frontend & Visualization
Hosts interactive HTML reports that readers can explore and analysts can edit.
Enables coordinated views and cross-filtering in generated reports.
Synthesizes visualization specifications from constraints for chart generation.
Renders charts from Draco-derived specifications for the final report visuals.
Implements interactive components within the documentation site and gallery.
Builds the documentation site and gallery as a static site.
AI & Machine Learning
Orchestrates 11 specialized agents via modular prompts and tracing.
Provides models for dataset description, insight planning, and narrative generation.
Provides models for coding-heavy agent steps alongside other providers.
Provides models used for mapping codes to human-readable labels.
Provides an additional managed inference backend used selectively for agent runs.
Provides alternative models behind a uniform API for stage-specific routing.
Data Engineering
Runs SQL queries both on the server and in the browser (via WASM) for interactive exploration.
Applies transformations to the raw input dataset based on agent-generated metadata.
Computes dataset statistics used during insight discovery.
Stores dataset artifacts so they can be queried and processed outside the agent pipeline.
Reads remote datasets in Pyodide-backed notebooks when browser-side engines cannot fetch them directly.
Moves data between engines without copies (e.g., DuckDB ↔ Polars).
Backend & APIs
External Services
Cloud & DevOps
Stores report assets and artifacts via S3-compatible object storage.
Runs self-hosted Langfuse, Infisical, Umami, and the Observable Notebook Builder service.
Packages the Observable Notebook Builder service for deployment on Coolify.
Builds the VitePress documentation site and deploys it to GitHub Pages.
Development Tooling
Installs and resolves Python dependencies for local development and reproducible runs.
Lints and formats Python sources in the agent pipeline.
Notebook environment for running end-to-end pipelines during development and debugging.
Manages Node.js dependencies for docs and report build tooling.
Builds and previews the documentation site and related frontend assets.
Formats and lints JavaScript/TypeScript code for docs and build tooling.