Skip to main content

Multi-agent RAG system for RBAC-secured financial document Q&A. 72.7% on FinanceBench. Ships a CLI client + self-hostable FastAPI backend.

Reason this release was yanked:

Install path broken on Apple Silicon — superseded by 0.1.5. See https://github.com/Rishabhmannu/financebench-rag-agent/releases/tag/v0.1.5

Project description

FinanceBench RAG Agent

PyPI Python 3.12 LangGraph 0.6 Tests FinanceBench License: MIT

A multi-agent RAG system for role-based access-controlled financial document Q&A. Achieves 72.7% correctness pass rate on the public FinanceBench benchmark using selective agentic retrieval, a BGE cross-encoder reranker, and a self-hosted LLM observability stack.

Try it

pip install financebench-rag-agent
financebench setup     # brings up the 4-service docker stack, seeds a sample corpus
financebench login -u analyst    # password analyst123
financebench chat

RBAC role-switch demo

Multi-party HITL approval workflow and conversation memory have their own walkthroughs in docs/cli.md. Self-hosting the backend (env vars, full vs minimal stack, production hardening) is in docs/deploy.md.

Architecture

flowchart TD
    Q([Query + JWT]) --> RBAC[rbac_gate<br/>JWT to Qdrant filter]
    RBAC --> Guard[guardrails<br/>regex to LLM Guard to LLM classifier]
    Guard -->|blocked| Block([blocked])
    Guard --> Route{router}
    Route -->|simple_lookup| Direct[retrieval → reranker → grader → generator]
    Route -->|research_required| Agent[[research_agent subgraph<br/>decompose → retrieve → grade → sufficiency → synthesize<br/>5-turn cap]]
    Direct --> Halu[hallucination_checker]
    Agent --> Halu
    Halu -->|ungrounded, retry up to 2| Direct
    Halu --> HITL{hitl_gate}
    HITL -->|amount above role threshold| Pause([pause for human approval])
    HITL --> Out([Answer + sources])

A router classifies each query as a simple lookup or research-required. Simple lookups take the fast direct path; research queries enter a multi-turn subgraph that decomposes the question, retrieves per sub-question, grades sufficiency, and synthesizes a final answer. RBAC is enforced at the Qdrant payload-filter level — agentic queries cannot bypass access control. High-stakes answers (above a per-role dollar threshold) pause via LangGraph's interrupt() for human approval, with state checkpointed to Postgres.

Tech stack

  • Backend — FastAPI · LangGraph · Qdrant · PostgreSQL · Redis · PyJWT
  • Clientfinancebench CLI: typer · rich · prompt_toolkit · httpx-sse · token-streaming over SSE
  • Frontend — Next.js 16 · React 19 · Tailwind · shadcn/ui (in progress; CLI is the canonical client)
  • LLMs — Claude Sonnet 4.6 · gpt-4o-mini · Llama 3.3 (via Groq)
  • Retrieval — voyage-finance-2 embeddings · BGE-reranker-v2-m3 cross-encoder
  • Observability — self-hosted LiteLLM proxy + Langfuse v3 + Redis semantic cache
  • Safety — Microsoft Presidio PII detection · LLM Guard · LLM classifier (3-layer cascade)
  • Evaluation — RAGAS · DeepEval · custom LLM correctness judge

Evaluation results

Evaluated on the FinanceBench benchmark (150 questions across 32 companies):

Metric Value
Correctness pass rate 72.7% (109/150)
Refusal rate 6.7% (10/150)
RAGAS faithfulness 0.747
DeepEval faithfulness 0.844
DeepEval contextual recall 0.768

Per-slice pass rate: lookup 68.6% (n=86), multi-hop 84.6% (n=13), calc 76.5% (n=51).

The correctness judge is a Claude Sonnet 4.6 + structured-prompt setup calibrated to Cohen's κ = 0.932 against an 89-question hand-labeled set with an adversarial leniency guard. Full methodology, per-judge scores, and reproduction commands in docs/evaluation.md.

Comparison with published systems on FinanceBench

System Approach Accuracy
Mafin 2.5 / PageIndex Vectorless reasoning over hierarchical document tree 98.7%
DANA Domain-aware neurosymbolic agent with deterministic operators 94.3%
GPT-4-Turbo · long context (128k) Whole-document prompting ~79%
Claude-2 · long context (100k) Whole-document prompting ~76%
This project Multi-agent RAG with selective research-agent subgraph + RBAC + HITL 72.7%
FinanceBench paper baselines Vector retrieval + GPT-4 / Llama-2 38–43%
GPT-4-Turbo · top-k vector RAG Standard retrieval, no agent ~19%

Long-context approaches score higher but are not enterprise-deployable — 10-K filings frequently exceed 128k tokens, and whole-document prompting is impractical at scale due to latency and cost. The 72.7% here is measured on a production-shaped pipeline (fixed institutional corpus, batched retrieval, RBAC at the storage layer, HITL on high-stakes outputs).

Known limitations

  • Not deployed to production — runs locally via docker compose up -d. No public URL or live traffic.
  • Frontend is a vertical slice — login + streaming chat work; sidebar, HITL UI, admin panel, citation PDF viewer are unbuilt.
  • Below the top-published systems (Mafin 2.5 at 98.7%, DANA at 94.3%) — see comparison table above for context.

Running from source

git clone https://github.com/Rishabhmannu/financebench-rag-agent.git
cd financebench-rag-agent
pip install -e ".[cli,dev]" && cp .env.example .env   # add your API keys
financebench setup                                     # docker compose + seed corpus

For self-hosting the full 11-service stack (LiteLLM + Langfuse), upgrade flows, and production hardening, see docs/deploy.md and docs/upgrade.md.

Documentation

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

financebench_rag_agent-0.1.0.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

financebench_rag_agent-0.1.0-py3-none-any.whl (197.3 kB view details)

Uploaded Python 3

File details

Details for the file financebench_rag_agent-0.1.0.tar.gz.

File metadata

  • Download URL: financebench_rag_agent-0.1.0.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for financebench_rag_agent-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1b4c41d8d4941a96e5aae70691d63b6f7f688b7d4f3301097e836e3ac5a487ec
MD5 3facd67c9270d6e46acc7cda3ebffadf
BLAKE2b-256 0f1d3a45247b5202af302501960e2355632c38b861a6543b5ac380c0f0f88577

See more details on using hashes here.

File details

Details for the file financebench_rag_agent-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for financebench_rag_agent-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2c7d40cdfe96ac675d719f06f452a09bd0dc1202db2ac696ba3198d8ed9557cf
MD5 b2e7e3d4c1ede1f2156f768b13d7b39a
BLAKE2b-256 26f3cff06f41a975a53f1537340f7f5aead22a540c7c9f653cc083051533bdae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page