Inspiration

What it d## Inspiration

Most chatbots can talk about anything except the documents you actually care about. I wanted an assistant that could read my own files (PDFs, spreadsheets, slides, even photos of text) and answer questions grounded in that content instead of guessing. I also wanted it to feel like a real product, not a notebook demo, so I built Vini AI, a RAG chatbot with a clean web UI, document upload, OCR and a live knowledge base.

What it does

Vini AI is a Retrieval-Augmented Generation chatbot that:

  • Answers questions about uploaded documents and summarizes them
  • Supports PDF, DOCX, XLSX, PPTX, TXT, MD, CSV, JSON, HTML and images (PNG, JPG, WEBP, BMP, TIFF)
  • Extracts text from images with OCR (Tesseract), so scanned pages become searchable
  • Crawls and ingests a website into the knowledge base and refreshes it on demand with no restart (POST /api/syaa/refresh)
  • Gives real-time India date and time (Asia/Kolkata), generated dynamically rather than stored in the knowledge base
  • Keeps chat history in SQLite and exposes knowledge-base stats (/api/kb/count, /api/kb/stats)
  • Acts as a general-purpose AI assistant when a question isn't about the documents

How I built it

Pipeline: upload → text extraction → chunking → embeddings → vector storage → retrieval → generation

  1. Extraction: PyMuPDF (PDF), python-docx, OpenPyXL, python-pptx, and Tesseract OCR for images
  2. Chunking: large documents are split into smaller pieces for precise retrieval
  3. Embeddings: all-MiniLM-L6-v2 from Sentence Transformers
  4. Vector store: ChromaDB for similarity search
  5. Generation: the top chunks go to GPT-OSS 120B on the Groq API as context, which gives fast responses
  6. Backend: Flask with SQLite for history, served by Gunicorn
  7. Frontend: HTML, CSS and JavaScript, with a live frontend on Lovable
  8. Deployment: Dockerized and ready for Render, with API keys kept in environment variables

Stack: Python, Flask, Groq, GPT-OSS 120B, ChromaDB, Sentence Transformers, PyMuPDF, Tesseract, SQLite, Docker, Gunicorn

Challenges I ran into

  • Many file formats: every format needs its own parser and fails differently, so I normalized everything to clean text before chunking.
  • OCR setup: getting Tesseract working reliably (especially on Windows) meant adding a configurable TESSERACT_CMD path and writing a setup guide.
  • Time-sensitive answers: a vector store can't answer "what time is it?", so date and time are handled dynamically instead of being embedded.
  • Keeping knowledge fresh: I built a website ingestion and refresh endpoint so the knowledge base updates without restarting the app.
  • Secrets and deployment: keeping the Groq API key out of the repo and making the app run the same locally, in Docker and on Render.

Accomplishments that I'm proud of

  • A complete end-to-end RAG system covering ingestion, OCR, retrieval, generation, a UI and deployment, not just a notebook
  • One chatbot that handles 15+ file types, including images
  • A knowledge base you can refresh live, with its own stats endpoints
  • A Docker-ready, deployment-ready project with documentation

What I learned

  • How chunking and embedding choices affect answer quality in RAG
  • Why retrieval and live data (like the current time) need to be handled separately
  • How to structure a Flask app around a vector database, an LLM API and persistent chat history
  • Practical deployment skills: Docker, environment variables and secret management

What's next for Vini AI

  • User authentication and multiple knowledge bases per user
  • Streaming responses and better conversation memory
  • Voice input and text-to-speech
  • Multi-language support and a more mobile-friendly UI
  • A cloud-hosted vector database and an analytics dashboard

Links: GitHub · Live frontend · See the architecture diagram in the project gallery

Built With

Share this project:

Updates

posted an update —

Excited to share the first public version of Vini AI, a Retrieval-Augmented Generation chatbot that answers questions from your own documents.

What's in this release

  • Upload PDF, DOCX, XLSX, PPTX, TXT, CSV, JSON, HTML and images
  • OCR (Tesseract) turns images and scans into searchable text
  • Document Q&A and summaries, grounded in what you uploaded
  • Website ingestion: crawl a site into the knowledge base and refresh it live with no restart
  • Real-time India date and time handled outside the vector store
  • Chat history in SQLite and knowledge-base stats endpoints
  • Docker and Render ready

How it works

Upload → extract text (OCR for images) → chunk → embed with all-MiniLM-L6-v2 → store in ChromaDB → retrieve → answer with GPT-OSS 120B on Groq.

Try it

Next up: streaming responses, user accounts, voice input and multi-language support. Feedback and ideas are very welcome in the comments!

Log in or sign up for Devpost to join the conversation.

Submission history