Spaces:
No application file
No application file
| set -e | |
| echo "==========================================" | |
| echo " ResearchOS MVP - Hugging Face Spaces" | |
| echo "==========================================" | |
| # Initialize SQLite database | |
| echo "[1/9] Initializing SQLite database..." | |
| python3 << 'PYEOF' | |
| import os | |
| from sqlalchemy import create_engine | |
| # Import all model bases | |
| import sys | |
| sys.path.insert(0, '/app') | |
| # Create engine | |
| engine = create_engine('sqlite:///app/researchos.db', echo=False) | |
| # Create tables by importing main modules | |
| from services.auth_service.src.main import Base as AuthBase | |
| from services.project_service.src.main import Base as ProjectBase | |
| from services.manuscript_service.src.main import Base as ManuscriptBase | |
| from services.verification_service.src.main import Base as VerificationBase | |
| AuthBase.metadata.create_all(engine) | |
| ProjectBase.metadata.create_all(engine) | |
| ManuscriptBase.metadata.create_all(engine) | |
| VerificationBase.metadata.create_all(engine) | |
| print("Database initialized successfully") | |
| PYEOF | |
| # Function to start a service | |
| start_service() { | |
| local name=$1 | |
| local port=$2 | |
| local cmd=$3 | |
| echo "[START] $name on port $port..." | |
| eval "$cmd > /tmp/$name.log 2>&1 &" | |
| echo $! > /tmp/$name.pid | |
| } | |
| # Start all backend services | |
| start_service "auth-service" "8005" "python3 services/auth-service/src/main.py" | |
| start_service "project-service" "8002" "python3 services/project-service/src/main.py" | |
| start_service "manuscript-service" "8007" "python3 services/manuscript-service/src/main.py" | |
| start_service "analysis-service" "8001" "python3 services/analysis-service/src/main.py" | |
| start_service "agent-service" "8004" "python3 services/agent-service/src/main.py" | |
| start_service "verification-service" "8006" "python3 services/verification-service/src/main.py" | |
| # Wait for services to be ready | |
| echo "[2/9] Waiting for services to boot..." | |
| sleep 5 | |
| # Start API Gateway | |
| start_service "api-gateway" "8000" "python3 services/api-gateway/src/main.py" | |
| sleep 3 | |
| # Start Next.js frontend on port 7860 (HF Spaces requirement) | |
| echo "[3/9] Starting Next.js frontend on port 7860..." | |
| cd /app/apps/web && PORT=7860 node server.js > /tmp/web.log 2>&1 & | |
| echo $! > /tmp/web.pid | |
| echo "" | |
| echo "==========================================" | |
| echo " ResearchOS is starting up!" | |
| echo "==========================================" | |
| echo "" | |
| echo "Services:" | |
| echo " - Auth: http://localhost:8005" | |
| echo " - Projects: http://localhost:8002" | |
| echo " - Manuscripts: http://localhost:8007" | |
| echo " - Analysis: http://localhost:8001" | |
| echo " - Agents: http://localhost:8004" | |
| echo " - Verification:http://localhost:8006" | |
| echo " - API Gateway: http://localhost:8000" | |
| echo " - Web App: http://localhost:7860" | |
| echo "" | |
| echo "Logs available in /tmp/*.log" | |
| echo "" | |
| # Health check loop | |
| for i in {1..30}; do | |
| if curl -s http://localhost:8000/health > /dev/null 2>&1; then | |
| echo "[✓] API Gateway is ready!" | |
| break | |
| fi | |
| echo "[...] Waiting for API Gateway ($i/30)..." | |
| sleep 2 | |
| done | |
| echo "" | |
| echo "==========================================" | |
| echo " ResearchOS is LIVE!" | |
| echo "==========================================" | |
| # Keep container alive and stream logs | |
| tail -f /tmp/web.log /tmp/api-gateway.log 2>/dev/null || wait | |