# SPARKNET Deployment Guide ## Architecture Overview SPARKNET supports a hybrid deployment architecture: ``` ┌─────────────────────────────┐ ┌─────────────────────────────┐ │ Streamlit Cloud │ │ GPU Server (Lytos) │ │ (Frontend/UI) │ HTTPS │ FastAPI Backend │ │ │ ◄─────► │ │ │ sparknet.streamlit.app │ API │ - PaddleOCR (GPU) │ │ │ │ - Document Processing │ │ - User Interface │ │ - RAG + Embeddings │ │ - Authentication │ │ - Ollama LLM │ │ - Cloud LLM fallback │ │ - ChromaDB Vector Store │ └─────────────────────────────┘ └─────────────────────────────┘ ``` ## Deployment Options ### Option 1: Full Stack on GPU Server (Recommended for Production) Run both frontend and backend on Lytos with GPU acceleration. ### Option 2: Hybrid (Streamlit Cloud + GPU Backend) - **Frontend**: Streamlit Cloud (free hosting, easy sharing) - **Backend**: Lytos GPU server (full processing power) ### Option 3: Streamlit Cloud Only (Demo Mode) - Uses cloud LLM providers (Groq, Gemini, etc.) - Limited functionality (no OCR, no RAG indexing) --- ## Option 2: Hybrid Deployment (Recommended) ### Step 1: Setup Backend on Lytos (GPU Server) #### 1.1 SSH into Lytos ```bash ssh user@lytos.server.address ``` #### 1.2 Clone the repository ```bash git clone https://github.com/your-repo/sparknet.git cd sparknet ``` #### 1.3 Create virtual environment ```bash python -m venv venv source venv/bin/activate ``` #### 1.4 Install backend dependencies ```bash pip install -r backend/requirements.txt ``` #### 1.5 Install Ollama (for LLM inference) ```bash curl -fsSL https://ollama.com/install.sh | sh # Pull required models ollama pull llama3.2:latest ollama pull nomic-embed-text ``` #### 1.6 Start the backend server ```bash # Development mode cd backend uvicorn api:app --host 0.0.0.0 --port 8000 --reload # Production mode (with multiple workers) uvicorn api:app --host 0.0.0.0 --port 8000 --workers 4 ``` #### 1.7 (Optional) Run with systemd for auto-restart ```bash sudo nano /etc/systemd/system/sparknet-backend.service ``` Add: ```ini [Unit] Description=SPARKNET Backend API After=network.target [Service] Type=simple User=your-user WorkingDirectory=/path/to/sparknet/backend Environment=PATH=/path/to/sparknet/venv/bin ExecStart=/path/to/sparknet/venv/bin/uvicorn api:app --host 0.0.0.0 --port 8000 --workers 4 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` Enable and start: ```bash sudo systemctl enable sparknet-backend sudo systemctl start sparknet-backend ``` #### 1.8 Configure firewall (allow port 8000) ```bash sudo ufw allow 8000/tcp ``` #### 1.9 (Optional) Setup HTTPS with nginx ```bash sudo apt install nginx certbot python3-certbot-nginx sudo nano /etc/nginx/sites-available/sparknet ``` Add: ```nginx server { listen 80; server_name api.sparknet.yourdomain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_bypass $http_upgrade; proxy_read_timeout 300s; proxy_connect_timeout 75s; } } ``` Enable and get SSL: ```bash sudo ln -s /etc/nginx/sites-available/sparknet /etc/nginx/sites-enabled/ sudo certbot --nginx -d api.sparknet.yourdomain.com sudo systemctl restart nginx ``` ### Step 2: Configure Streamlit Cloud #### 2.1 Update Streamlit secrets In Streamlit Cloud dashboard → Settings → Secrets, add: ```toml [auth] password = "SPARKNET@2026" # Backend URL (your Lytos server) BACKEND_URL = "https://api.sparknet.yourdomain.com" # Or without HTTPS: # BACKEND_URL = "http://lytos-ip-address:8000" # Fallback cloud providers (optional, used if backend unavailable) GROQ_API_KEY = "your-groq-key" GOOGLE_API_KEY = "your-google-key" ``` #### 2.2 Deploy to Streamlit Cloud Push your code and Streamlit Cloud will auto-deploy: ```bash git add . git commit -m "Add backend support" git push origin main ``` ### Step 3: Verify Deployment #### 3.1 Test backend directly ```bash # Health check curl https://api.sparknet.yourdomain.com/api/health # System status curl https://api.sparknet.yourdomain.com/api/status ``` #### 3.2 Test from Streamlit Visit your Streamlit app and check: - Status bar should show "Backend" instead of "Demo Mode" - GPU indicator should appear - Document processing should use full pipeline --- ## Backend API Endpoints | Endpoint | Method | Description | |----------|--------|-------------| | `/api/health` | GET | Health check | | `/api/status` | GET | System status (Ollama, GPU, RAG) | | `/api/process` | POST | Process document (OCR, layout) | | `/api/index` | POST | Index document to RAG | | `/api/query` | POST | Query RAG system | | `/api/search` | POST | Search similar chunks | | `/api/documents` | GET | List indexed documents | | `/api/documents/{id}` | DELETE | Delete document | ### API Documentation Once backend is running, visit: - Swagger UI: `http://lytos:8000/docs` - ReDoc: `http://lytos:8000/redoc` --- ## Environment Variables ### Backend (Lytos) ```bash # Optional: Configure Ollama host if not localhost export OLLAMA_HOST=http://localhost:11434 # Optional: GPU device selection export CUDA_VISIBLE_DEVICES=0 ``` ### Frontend (Streamlit) Set in `secrets.toml` or Streamlit Cloud secrets: ```toml # Required for hybrid mode BACKEND_URL = "https://your-backend-url" # Authentication [auth] password = "your-password" # Fallback cloud providers GROQ_API_KEY = "..." GOOGLE_API_KEY = "..." ``` --- ## Troubleshooting ### Backend not reachable 1. Check if backend is running: ```bash curl http://localhost:8000/api/health ``` 2. Check firewall: ```bash sudo ufw status ``` 3. Check nginx logs: ```bash sudo tail -f /var/log/nginx/error.log ``` ### GPU not detected 1. Check CUDA: ```bash nvidia-smi python -c "import torch; print(torch.cuda.is_available())" ``` 2. Check PaddlePaddle GPU: ```bash python -c "import paddle; print(paddle.device.is_compiled_with_cuda())" ``` ### Ollama not working 1. Check Ollama status: ```bash ollama list curl http://localhost:11434/api/tags ``` 2. Restart Ollama: ```bash sudo systemctl restart ollama ``` ### Document processing fails 1. Check backend logs: ```bash journalctl -u sparknet-backend -f ``` 2. Test processing directly: ```bash curl -X POST http://localhost:8000/api/process \ -F "file=@test.pdf" \ -F "ocr_engine=paddleocr" ``` --- ## Security Considerations ### Production Checklist - [ ] Enable HTTPS for backend API - [ ] Configure CORS properly (restrict origins) - [ ] Use strong authentication password - [ ] Enable rate limiting - [ ] Set up monitoring and alerts - [ ] Configure backup for ChromaDB data - [ ] Review GDPR compliance for data handling ### CORS Configuration In `backend/api.py`, update for production: ```python app.add_middleware( CORSMiddleware, allow_origins=["https://sparknet.streamlit.app"], # Your Streamlit URL allow_credentials=True, allow_methods=["GET", "POST", "DELETE"], allow_headers=["*"], ) ``` --- ## Performance Tuning ### Backend Workers Adjust based on CPU cores: ```bash uvicorn api:app --workers $(nproc) ``` ### GPU Memory For large documents, monitor GPU memory: ```bash watch -n 1 nvidia-smi ``` ### ChromaDB Optimization For large document collections: ```python store_config = VectorStoreConfig( persist_directory="data/sparknet_unified_rag", collection_name="sparknet_documents", similarity_threshold=0.0, # Add indexing options for better performance ) ``` --- ## Contact & Support - **Project**: VISTA/Horizon EU - **Framework**: SPARKNET - Strategic Patent Acceleration & Research Kinetics NETwork - **Issues**: https://github.com/your-repo/sparknet/issues