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.

Project description

FinanceBench RAG Agent

PyPI Python 3.12 LangGraph 0.6 Tests FinanceBench CI Docker image HuggingFace dataset 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.

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).

Demos

Role-based access control

An analyst is refused a confidential invoice; a c-level re-login unlocks the same query — access enforced at the retrieval layer.

RBAC role-switch demo

Human-in-the-loop approval

Finance is blocked at the $100K gate; an admin approves in a second terminal and the answer is released back — multi-party, across sessions.

HITL multi-party approval demo

Conversation memory

Follow-up questions resolve against thread history — "And Microsoft?" is rewritten using the prior turn.

Conversation memory demo

Try it

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

The full 360-PDF FinanceBench corpus is published as a pre-vectorized snapshot on the Hugging Face Hub — voyage-finance-2 embeddings plus chunked text and a manifest — so anyone can seed the entire benchmark in minutes and skip ~$5-15 of embedding cost and ~30 min of ingest:

financebench seed --from-hf cmpunkmannu/financebench-voyage-finance-2-embeddings

Architecture

Architecture: 18-node LangGraph pipeline with RBAC gate, guardrails cascade, simple vs research-agent routing, hallucination check, and HITL approval, backed by Qdrant, PostgreSQL, and Redis

A router classifies each query as a simple lookup or research-required. Simple lookups take the fast direct path (retrieval → BGE reranker → grader → Claude generator); 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 multi-party human approval, with state checkpointed to Postgres so the workflow survives container restarts.

Tech stack

  • Backend — FastAPI · LangGraph · Qdrant · PostgreSQL · Redis · PyJWT
  • Clientfinancebench CLI: typer · rich · prompt_toolkit · httpx-sse · token-streaming over SSE
  • LLMs — Claude Sonnet 4.6 · gpt-4o-mini · Llama 3.3 (via Groq, optional)
  • Retrieval — OpenAI text-embedding-3-small or voyage-finance-2 · BGE-reranker-v2-m3 cross-encoder
  • Observability — self-hosted LiteLLM proxy + Langfuse v3 + Redis semantic cache (full stack only)
  • Safety — Microsoft Presidio PII detection · LLM Guard · LLM classifier (3-layer cascade)
  • Evaluation — RAGAS · DeepEval · custom LLM correctness judge

Known limitations

  • Not deployed to production — runs locally via docker compose up -d. No public URL or live traffic.
  • CLI is the canonical client today. A Next.js web frontend is in progress in web/ but not wired into the deployment story.
  • 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 ".[backend,dev]" && cp .env.example .env   # backend extras + dev tools
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.3.5.tar.gz (2.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.3.5-py3-none-any.whl (228.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: financebench_rag_agent-0.3.5.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for financebench_rag_agent-0.3.5.tar.gz
Algorithm Hash digest
SHA256 fb761605439a881773b870ebe640ec8618675b8d968d91f6ad30bccf51ba2ee4
MD5 d3dde3c623591412637a5d948ef278c5
BLAKE2b-256 c7ce240ee6860f30583401bc90906030e79acb1f489ba73c32e7da7fafa44c67

See more details on using hashes here.

Provenance

The following attestation bundles were made for financebench_rag_agent-0.3.5.tar.gz:

Publisher: release-image.yml on Rishabhmannu/financebench-rag-agent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for financebench_rag_agent-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 b9c384ea140c889b67b7c91ffff672e9db30fb92fb9a2b325febc655754d0b8c
MD5 cdf5208ca38771fca067700478a368a0
BLAKE2b-256 5dc80b55992209ca1b56551e5f81a63696402493a36e9291903c0e493132b6aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for financebench_rag_agent-0.3.5-py3-none-any.whl:

Publisher: release-image.yml on Rishabhmannu/financebench-rag-agent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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