Finance AI Copilot

A private, local-LLM FP&A assistant built on one rule: AI should reason over numbers it does not invent.

Personal project in active development. It runs on a fictional demo company and is not built for real financial data yet.

The Problem: Language models write fluent commentary about numbers they have no reliable way to compute. In finance, one invented figure in a variance explanation or an executive brief is enough to make the whole document untrustworthy. Asking a model to read a spreadsheet and "write the analysis" makes every number only as good as the model's arithmetic.

The Approach: Finance AI Copilot splits the work. Deterministic Python engines compute every figure. The model interprets the results and writes the narrative, but it never types a number: it writes evidence placeholders such as {{evidence_id}}, and Python validates each one against the computed results before rendering the real value.

Five Modules

  • Trial Balance & Variance: variance analysis from trial balance data, with the drivers explained in plain language.
  • Supply Chain KPI Analyzer: operational KPIs computed from supply chain data.
  • Competitor Intelligence: benchmarking against peers.
  • Scenario Planning: what-if scenarios and their financial impact.
  • Executive Decision Brief: pulls the modules together into a decision-ready brief, exportable as a PDF.

How It's Verified

  • 910 automated tests at 93% coverage (pytest, with ruff for linting).
  • A 50,643-case challenge set for the evidence validator, with zero misjudgments.
  • A live gate: three consecutive uncached runs of all five modules with zero validator defects.
  • An audit-driven rebuild: an independent full-application audit showed that the old approach, checking the model's numbers after the fact, could both accept wrong figures and reject correct ones. I deleted that verifier and rebuilt the reporting layer around evidence placeholders.
  • A human in the loop: model-written narrative still goes through review before anything is relied on.

Runs Locally

The model runs on my own hardware through LM Studio (Qwen3.6-35B-A3B, a mixture-of-experts model with a 262K-token context window), so no cloud AI provider sees the data. It's served from my self-hosted AI server.

Python Streamlit Plotly pandas & NumPy LM Studio (Local LLM) Qwen3.6-35B-A3B Jinja2 & WeasyPrint (PDF) pytest ruff