Skip to content

Fenil412/Financial-ChatBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

28 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’° 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.


πŸ“‹ Table of Contents


🧠 Overview

FinChatBot is a full-stack AI application that lets users:

  1. Upload financial PDFs/documents
  2. Ask questions in English, Hindi, or Gujarati
  3. Get AI-powered answers with real rendered charts (bar, line, pie, area)
  4. Receive smart follow-up suggestions after every response
  5. Switch between 4 feature modes: General, Document Analysis, Smart Chart, Insights
  6. Export conversations to PDF, Excel (.xlsx), or Word (.doc)

Architecture Overview

╔══════════════════════════════════════════════════════════════╗
β•‘                        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      β”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”© Tech Stack

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     β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ—„οΈ ER Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               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           β”‚
                                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‘ API Reference

🟒 Node.js Backend (Port 8000)

Conversations

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? }

Documents

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 β€”

Query Request Schema

{
  "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"
}

Query Response Schema

{
  "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"
  ]
}

πŸ“ Project Structure

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

Prerequisites

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\Scripts\activate          # 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

  1. Create a new conversation
  2. Upload a financial PDF using the πŸ“Ž paperclip icon
  3. Wait for document processing (green indicator)
  4. Ask questions β€” e.g., "Give me a bar chart of revenue"
  5. Use the mode bar at top to switch modes
  6. Click Export to download as PDF/Excel/Word

✨ Features

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

πŸ› Troubleshooting

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)

πŸ“Š Performance

Operation Time
Document processing (per page) 5-15s
Query response 2-5s
Chart generation +1-2s
Vector search <100ms
Page load <1s

πŸ“„ License

ISC β€” See LICENSE


πŸ‘©β€πŸ’» Author

FinChatBot Team β€” Built with ❀️ using React, FastAPI, LangChain & Groq

About

A full-stack AI-powered Financial ChatBot that analyzes PDFs financial documents, enabling users to ask natural-language questions and receive accurate insights. Built with React, Node.js, MongoDB, and a Python RAG pipeline using FAISS and Google Gemini. Ensures 100% local processing, zero cloud cost, and privacy-focused document handling.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors