π° FinChatBot β AI-Powered Financial Analysis Chatbot
An intelligent, multi-language financial chatbot that analyzes uploaded documents, generates real-time charts, answers questions in 3 languages, and exports reports to PDF, Excel, and Word.
FinChatBot is a full-stack AI application that lets users:
Upload financial PDFs/documents
Ask questions in English, Hindi, or Gujarati
Get AI-powered answers with real rendered charts (bar, line, pie, area)
Receive smart follow-up suggestions after every response
Switch between 4 feature modes : General, Document Analysis, Smart Chart, Insights
Export conversations to PDF, Excel (.xlsx), or Word (.doc)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (React) β
β Port 5173 β Vite + Tailwind + Recharts β
ββββββββββββββββββββ¦βββββββββββββββββββββββββββββββββββββββββββ
β HTTP / WebSocket
βββββββββββββΌββββββββββββ
β NODE.JS BACKEND β β REST API + Socket.IO
β Port 8000 β β Conversations, Documents, Auth
β Express + MongoDB β
βββββββββββββ¬βββββββββββββ
β HTTP (internal)
βββββββββββββΌββββββββββββ
β PYTHON AI SERVICE β β FastAPI + RAG
β Port 8001 β β LLM, Charts, Vector Search
β LangChain + FAISS β
βββββββββββββββββββββββββ
Layer
Technology
Frontend
React 18, Vite, Tailwind CSS, Recharts, jsPDF, xlsx, html2canvas
Node.js API
Express.js, MongoDB, Mongoose, Socket.IO, Multer, Axios
Python AI
FastAPI, LangChain, FAISS, Groq LLM, HuggingFace Embeddings
Database
MongoDB Atlas (cloud)
AI/LLM
Groq (llama-3.3-70b), OpenRouter (vision models)
Vector DB
FAISS (local, per document namespace)
ποΈ System Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER (Browser) β
ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
β HTTPS
ββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ
β FRONTEND :5173 β
β βββββββββββββββ ββββββββββββββ βββββββββββββ βββββββββββββββ β
β β ChatPageNew β β ChatWindow β β ChartCard β βExportReportsβ β
β β (state mgmt)β β(UI + modes)β β(Recharts) β β(PDF/Excel) β β
β ββββββββ¬βββββββ βββββββ¬βββββββ βββββββ¬ββββββ βββββββββββββββ β
β β β β β
β ββββββββΌβββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββ β
β β api.js (Axios client) β β
β β conversationAPI | documentAPI | aiAPI (Python direct) β β
β ββββββββββββββββ¬ββββββββββββββββββββββ¬ββββββββββββββββββββββββ β
βββββββββββββββββββΌββββββββββββββββββββββΌββββββββββββββββββββββββββ
β :8000 β :8001
βββββββββββββββββββΌβββββββββββββ βββββββΌβββββββββββββββββββββββββββ
β NODE.JS BACKEND β β PYTHON AI SERVICE β
β Express + Socket.IO β β FastAPI + LangChain + FAISS β
β β β β
β βββββββββββββββββββββββββββ β β ββββββββββββββββββββββββββββ β
β β /api/conversations β β β β EnhancedRAGService β β
β β /api/documents β β β β - query_with_agent() β β
β βββββββββββββββββββββββββββ β β β - _handle_chart_request()β β
β βββββββββββββββββββββββββββ β β β - _generate_suggestions()β β
β β MongoDB Models β β β βββββββββββ¬βββββββββββββββββ β
β β Conversation | Message β β β β β
β β Document β β β βββββββββββΌβββββββββββββββββ β
β ββββββββββββ¬ββββββββββββββββ β β β FAISS Vector Store β β
β β Socket.IO β β β (per-document namespace) β β
β ββββββββββββΌββββββββββββββββ β β ββββββββββββββββββββββββββββ β
β β Socket.IO Events β β β ββββββββββββββββββββββββββββ β
β β document:processing β β β β Groq LLM API β β
β β document:completed β β β β llama-3.3-70b-versatile β β
β βββββββββββββββββββββββββββ β β ββββββββββββββββββββββββββββ β
βββββββββββββββββββ¬βββββββββββββ ββββββββββββββββββββββββββββββββββ
β
ββββββββββΌβββββββββ
β MongoDB Atlas β
β Collections: β
β - conversations β
β - messages β
β - documents β
βββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββ
β CONVERSATION β
ββββββββββββββββββββββββββββββββββββββββββββ€
β _id ObjectId (PK) β
β title String β
β status String [active|archived] β
β createdAt Date β
β updatedAt Date β
βββββββββββββββββββββ¬βββββββββββββββββββββββ
β 1
β
βββββββββ΄βββββββββββββββββββββββββββββββ
β β
β * β *
βββββββββββββΌβββββββββββββββββββββββ βββββββββββββΌβββββββββββββββββββββββ
β MESSAGE β β DOCUMENT β
ββββββββββββββββββββββββββββββββββββ€ ββββββββββββββββββββββββββββββββββββ€
β _id ObjectId (PK) β β _id ObjectId (PK) β
β conversationId ObjectId (FK) β β conversationId ObjectId (FK) β
β role String β β fileName String β
β [user|assistant β β originalName String β
β |system] β β filePath String β
β content String β β fileType String β
β timestamp Date β β fileSize Number β
β feedback String (optional) β β vectorNamespace String β
β chart_data Object (optional) β β status String β
β citations Array (optional) β β [pending|processing β
β suggestions Array (optional) β β |processed|failed] β
ββββββββββββββββββββββββββββββββββββ β uploadedAt Date β
β processedAt Date β
β pageCount Number β
β chunkCount Number β
ββββββββββββββββββββββββββββββββββββ
π’ Node.js Backend (Port 8000)
Method
Endpoint
Description
Request Body
GET
/api/conversations
Get all conversations
β
POST
/api/conversations
Create new conversation
{ title }
GET
/api/conversations/:id
Get conversation + messages
β
PATCH
/api/conversations/:id
Update conversation title
{ title }
DELETE
/api/conversations/:id
Delete conversation + docs
β
POST
/api/conversations/:id/messages
Save a message
{ role, content, chart_data?, citations?, suggestions? }
Method
Endpoint
Description
Request Body
POST
/api/documents/upload
Upload 1-10 PDFs
multipart/form-data files + conversationId
GET
/api/documents/conversation/:id
List docs for conversation
β
DELETE
/api/documents/:documentId
Delete document + vectors
β
PATCH
/api/documents/:documentId/status
Webhook: update processing status
{ status, pageCount?, chunkCount? }
π£ Python AI Service (Port 8001)
Method
Endpoint
Description
Request Body
GET
/health
Health check
β
POST
/process-document
Trigger document ingestion into FAISS
{ documentId, filePath, fileName, vectorNamespace }
POST
/query
Ask question with RAG + chart generation
{ question, chatHistory, vectorNamespaces, featureUsed }
POST
/delete-document
Remove document vectors + file
{ filePath, vectorNamespace }
POST
/delete-documents
Batch delete documents
[{ filePath, vectorNamespace }]
POST
/test-tools
Test financial calculator tools
β
{
"question" : " Give me a bar chart of revenue" ,
"chatHistory" : [
{ "role" : " user" , "content" : " Hello" },
{ "role" : " assistant" , "content" : " Hi! How can I help?" }
],
"vectorNamespaces" : [" doc-uuid-1" , " doc-uuid-2" ],
"featureUsed" : " Smart_Chart"
}
{
"answer" : " Here is your Bar Chart based on the document." ,
"chart_data" : {
"type" : " bar" ,
"title" : " Revenue By Month" ,
"labels" : [" Jan" , " Feb" , " Mar" ],
"datasets" : [
{ "label" : " Revenue" , "data" : [85000 , 103000 , 92000 ], "color" : " #3b82f6" }
]
},
"citations" : [{ "page" : 2 , "snippet" : " ..." , "confidence" : 0.95 }],
"tool_calls" : [],
"suggestions" : [
" Show me a pie chart of expenses" ,
" What is the profit margin?" ,
" Compare revenue with last year"
]
}
Financial-ChatBot/
βββ Frontend/ # React App (Vite)
β βββ src/
β βββ components/
β β βββ chat/ # ChatWindow, MessageBubble, SuggestionChips...
β β βββ charts/ # ChartCard (Recharts)
β β βββ export/ # ExportReports (PDF/Excel/Word)
β β βββ layout/ # Navbar, Sidebar, CustomCursor
β β βββ panels/ # CitationPanel, ToolCallsPanel
β β βββ ui/ # FeatureModeBar, LanguageSelector...
β β βββ voice/ # VoiceInputButton
β βββ context/ # ThemeContext, SettingsContext
β βββ hooks/ # useAutoScroll
β βββ pages/ # ChatPageNew, AboutPage, LandingPage
β βββ utils/ # api.js (Axios client)
β
βββ Backend/ # Node.js (Express)
β βββ src/
β βββ controllers/ # conversation, document, analytics
β βββ models/ # Conversation, Message, Document
β βββ routes/ # conversation.routes, document.routes
β βββ middlewares/ # upload.middleware, error.middleware
β βββ config/ # db.js
β βββ utils/ # helpers
β
βββ Python-Backend/ # FastAPI AI Service
β βββ app/
β βββ api/ # routes.py
β βββ agent/ # calculator.py, orchestrator.py
β βββ config/ # settings.py, prompts.py
β βββ models/ # schemas.py (Pydantic)
β βββ services/
β βββ enhanced_rag_service.py # Main RAG + chart pipeline
β βββ document_processor.py # PDF parsing + embedding
β βββ vector_store.py # FAISS wrapper
β
βββ .gitignore
βββ README.md
π Setup & Installation
Tool
Version
Purpose
Node.js
18+
Backend + Frontend
Python
3.9+
AI Service
MongoDB
Atlas or Local
Database
Anaconda / pip
latest
Python env management
Step 1 β Clone the Repository
git clone https://github.com/Fenil412/Financial-ChatBot.git
cd Financial-ChatBot
Step 2 β Configure Environment Variables
Backend (Backend/.env):
PORT = 8000
MONGODB_URI = mongodb+srv://your-cluster/dbname
PYTHON_SERVICE_URL = http://localhost:8001
FRONTEND_URL = http://localhost:5173
Python AI Service (Python-Backend/.env):
GROQ_API_KEY = your_groq_api_key
OPENROUTER_API_KEY = your_openrouter_key
VISION_PROVIDER = openrouter
VISION_MODEL = qwen/qwen2.5-vl-72b-instruct:free
MODEL_NAME = llama-3.3-70b-versatile
EMBEDDING_MODEL = sentence-transformers/all-MiniLM-L6-v2
NODE_BACKEND_URL = http://localhost:8000
Frontend (Frontend/.env):
VITE_API_URL = http://localhost:8000
VITE_PYTHON_SERVICE_URL = http://localhost:8001
Step 3 β Start Node.js Backend
cd Backend
npm install
npm run dev
# β
Running at http://localhost:8000
Step 4 β Start Python AI Service
cd Python-Backend
# Using Anaconda (recommended)
conda activate your-env
pip install -r requirements.txt
python -m app.main
# OR using venv
python -m venv venv
venv\S cripts\a ctivate # Windows
source venv/bin/activate # Mac/Linux
pip install -r requirements.txt
python -m app.main
# β
Running at http://localhost:8001
Step 5 β Start Frontend
cd Frontend
npm install
npm run dev
# β
Running at http://localhost:5173
Step 6 β Open in Browser
Visit: http://localhost:5173
Create a new conversation
Upload a financial PDF using the π paperclip icon
Wait for document processing (green indicator)
Ask questions β e.g., "Give me a bar chart of revenue"
Use the mode bar at top to switch modes
Click Export to download as PDF/Excel/Word
Feature
Description
π Document Upload
Upload up to 10 PDFs per conversation
π€ RAG Q&A
Context-aware answers from your documents
π Real Charts
Bar, Line, Pie, Area charts via Recharts
π‘ Suggestions
3 AI-generated follow-up questions after each answer
ποΈ Feature Modes
General Β· Doc Analysis Β· Smart Chart Β· Insights
π Multi-language
English, Hindi (ΰ€Ήΰ€Ώΰ€¨ΰ₯ΰ€¦ΰ₯), Gujarati (ΰͺΰ«ΰͺΰͺ°ΰͺΎΰͺ€ΰ«)
π€ Voice Input
Dictate questions hands-free
π₯ Export
Download as PDF, Excel (.xlsx), or Word (.doc)
π Dark Mode
Full dark/light theme support
π±οΈ Custom Cursor
Premium custom cursor experience
π Environment Variables Summary
Variable
Service
Required
Description
MONGODB_URI
Node.js
β
MongoDB connection string
GROQ_API_KEY
Python
β
Groq LLM API key
OPENROUTER_API_KEY
Python
β
Vision model API key
PYTHON_SERVICE_URL
Node.js
β
Python service URL
NODE_BACKEND_URL
Python
β
Node.js backend URL
VITE_API_URL
Frontend
β
Node.js backend URL
VITE_PYTHON_SERVICE_URL
Frontend
β
Python AI URL
Problem
Solution
MongoDB connection failed
Check MONGODB_URI in Backend/.env
Python module not found
Run pip install -r requirements.txt in venv
Chart shows text not visual
Restart Python backend after code changes
Documents stuck "processing"
Check Python backend logs for errors
CORS errors
Verify FRONTEND_URL in Backend .env
Voice input not working
Use HTTPS or localhost (browser requirement)
Operation
Time
Document processing (per page)
5-15s
Query response
2-5s
Chart generation
+1-2s
Vector search
<100ms
Page load
<1s
ISC β See LICENSE
FinChatBot Team β Built with β€οΈ using React, FastAPI, LangChain & Groq