umar-100's picture
included loom link
6380c1d
---
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:
http://localhost:7860
---
## 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
1. **User uploads a document.**
2. **Document is split, embedded, and indexed in Pinecone.**
3. **User asks questions or requests logic-based questions.**
4. **Backend retrieves relevant document chunks and generates answers/feedback.**
5. **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 by `chmod -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.
---