Spaces:
Sleeping
Sleeping
metadata
title: Smart Research Assistant
emoji: π
colorFrom: yellow
colorTo: red
sdk: docker
pinned: false
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
Smart Research Assistant
A document-aware AI assistant for research summarization, question-answering, and logic-based question generation, built with FastAPI (backend) and Streamlit (frontend), deployed as a single Docker container.
Huggingface spaces link: https://huggingface.co/spaces/umar-100/smart-research-assistant
Loom demo link: https://www.loom.com/share/0a5302faa01e422394cda7a760c172f6?sid=b60a82e0-796b-416d-bc28-bad526a60fc5
Features
- Document Upload: Upload PDF or TXT documents for processing.
- Auto Summary: Generate concise (β€150 words) summaries of uploaded documents.
- Ask Anything: Ask free-form questions and receive answers grounded in the uploaded document.
- Challenge Me: Generate three logic-based or comprehension-focused questions from the document.
- Evaluate Responses: Evaluate user answers to logic-based questions with feedback and justification.
- Session Management: Each user session is tracked for document and interaction history.
- Vector Database Integration: Uses Pinecone for semantic search and retrieval.
- Clean UI: Intuitive web interface for uploading, querying, and interacting with documents.
Architecture
- Backend: FastAPI (Python)
- Handles document upload, storage, and retrieval.
- Implements endpoints for Q&A, question generation, and answer evaluation.
- Uses SQLite for session/document management and Pinecone for vector search.
- Frontend: Streamlit (Python)
- Provides a web interface for users to upload documents, ask questions, and receive feedback.
- Communicates with the backend via HTTP requests.
- Vector Database: Pinecone
- Stores document embeddings for semantic search and retrieval.
- Deployment: Single Docker container with both backend and frontend services.
- FastAPI runs on port 8000 (internal).
- Streamlit runs on port 7860 (exposed to users).
- No Nginx or reverse proxy required for minimal setup.
Setup
Requirements
- Docker
- Pinecone API key (for vector search)
- OpenAI API key (for LLM inference)
1. Clone the Repository
git clone https://github.com/m-umar-j/smart-research-assistant.git
cd smart-research-assistant
2. Environment Variables
Create a .env
file in the project root with the following variables:
OPENAI_API_KEY=your_openai_key
PINECONE_API_KEY=your_pinecone_key
3. Build and Run with Docker
docker build -t smart-research-assistant . docker run -p 7860:7860 --env-file .env smart-research-assistant
- Port 7860 is exposed for Streamlit.
- Port 8000 is used internally for FastAPI.
4. Access the Application
Open your browser to:
Commands
- Start Streamlit and FastAPI (via
start.sh
):
cd /app && uvicorn backend.main:app --host 0.0.0.0 --port 8000 &
cd /app && streamlit run frontend/app.py --server.port=7860 --server.address=0.0.0.0 --browser.gatherUsageStats=false --server.enableXsrfProtection=false
Technical Details
Backend
- FastAPI endpoints:
/upload-doc
: Upload and index documents (PDF/TXT)./list-docs
: List documents by session./chat
: Answer questions based on uploaded documents./challenge-me
: Generate logic-based questions./evaluate-response
: Evaluate user answers to logic-based questions.- Database: SQLite (
research_assistant.db
) for session/document storage. - Vector Database: Pinecone for document embeddings and semantic retrieval.
Frontend
- Streamlit UI:
- Upload documents.
- Display summaries.
- Ask questions and view answers.
- Generate and answer logic-based questions.
- View feedback on answers.
Data Flow
- User uploads a document.
- Document is split, embedded, and indexed in Pinecone.
- User asks questions or requests logic-based questions.
- Backend retrieves relevant document chunks and generates answers/feedback.
- Frontend displays results to the user.
Known Issues & Workarounds
- File uploads on Hugging Face Spaces:
- Disable XSRF protection in Streamlit (
--server.enableXsrfProtection=false
). - File uploads may still be restricted by platform security policies.
- Database permissions:
- Ensure
/app
is writable in Docker (handled bychmod -R 777 /app
in Dockerfile). - Pinecone indexing:
- Ensure Pinecone index exists and API key is valid.
Folder Structure
smart-research-assistant/
βββ backend/ # FastAPI backend code
β βββ ...
βββ frontend/ # Streamlit frontend code
β βββ ...
βββ .env # Environment variables
βββ requirements.txt # Python dependencies
βββ Dockerfile # Docker build file
βββ start.sh # Startup script
βββ README.md # This file
Additional Notes
- Session management: Each user session is tracked with a unique ID.
- Vector search: Chunks of uploaded documents are embedded and indexed in Pinecone for semantic retrieval.
- LLM integration: Uses OpenAI's GPT-4 for question-answering and feedback generation.