Spaces:
Sleeping
Sleeping
File size: 4,759 Bytes
bf10662 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
#!/bin/bash
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Cleanup function
cleanup() {
if [ ! -z "$API_PID" ]; then
echo -e "\n${YELLOW}Shutting down FastAPI server (PID: $API_PID)...${NC}"
kill $API_PID 2>/dev/null
wait $API_PID 2>/dev/null
fi
echo -e "${GREEN}✅ Cleanup complete${NC}"
exit 0
}
# Set trap to cleanup on script exit
trap cleanup SIGINT SIGTERM EXIT
echo "🚀 RAG Pipeline Launcher"
echo "========================"
# Step 1: Check if Python exists
echo -e "\n${YELLOW}Step 1: Checking Python installation...${NC}"
if ! command -v python3 &> /dev/null && ! command -v python &> /dev/null; then
echo -e "${RED}❌ Python not found. Please install Python first.${NC}"
exit 1
fi
# Determine Python command
if command -v python3 &> /dev/null; then
PYTHON_CMD="python3"
else
PYTHON_CMD="python"
fi
PYTHON_VERSION=$($PYTHON_CMD --version 2>&1)
echo -e "${GREEN}✅ Found: $PYTHON_VERSION${NC}"
# Step 2: Check if requirements.txt exists
if [ ! -f "requirements.txt" ]; then
echo -e "${RED}❌ requirements.txt not found!${NC}"
exit 1
fi
# Step 3: Check if pip exists
echo -e "\n${YELLOW}Step 2: Checking pip installation...${NC}"
if ! $PYTHON_CMD -m pip --version &> /dev/null; then
echo -e "${RED}❌ pip not found. Installing pip...${NC}"
$PYTHON_CMD -m ensurepip --upgrade
fi
# Step 4: Install requirements
echo -e "\n${YELLOW}Step 3: Installing/updating dependencies from requirements.txt...${NC}"
$PYTHON_CMD -m pip install -q -r requirements.txt
if [ $? -ne 0 ]; then
echo -e "${RED}❌ Failed to install requirements${NC}"
exit 1
fi
echo -e "${GREEN}✅ Dependencies installed${NC}"
# Step 5: Check if key libraries are installed
echo -e "\n${YELLOW}Step 4: Verifying key libraries...${NC}"
$PYTHON_CMD -c "import streamlit, fastapi, uvicorn, langchain" 2>/dev/null
if [ $? -ne 0 ]; then
echo -e "${RED}❌ Key libraries not found. Please check your installation.${NC}"
exit 1
fi
echo -e "${GREEN}✅ Key libraries found${NC}"
# Step 6: Find API file
echo -e "\n${YELLOW}Step 5: Locating API file...${NC}"
if [ -f "api.py" ]; then
API_FILE="api.py"
elif [ -f "experimental_files/api.py" ]; then
API_FILE="experimental_files/api.py"
else
echo -e "${RED}❌ api.py not found in root or experimental_files directory${NC}"
exit 1
fi
echo -e "${GREEN}✅ Found API file: $API_FILE${NC}"
# Step 7: Start FastAPI server in background
echo -e "\n${YELLOW}Step 6: Starting FastAPI server...${NC}"
API_PID=""
if [ "$API_FILE" == "api.py" ]; then
uvicorn api:app --host 0.0.0.0 --port 8000 > /dev/null 2>&1 &
API_PID=$!
else
# If api.py is in experimental_files, add to PYTHONPATH and run from there
export PYTHONPATH="${PWD}/experimental_files:${PYTHONPATH}"
cd experimental_files
uvicorn api:app --host 0.0.0.0 --port 8000 > /dev/null 2>&1 &
API_PID=$!
cd - > /dev/null
fi
echo -e "${GREEN}✅ FastAPI server started (PID: $API_PID)${NC}"
# Step 8: Check if curl is available for health check
if ! command -v curl &> /dev/null; then
echo -e "${YELLOW}⚠️ curl not found. Skipping health check.${NC}"
echo -e "${YELLOW} Please verify the API is running manually at http://localhost:8000${NC}"
HEALTH_CHECK_PASSED=true
else
# Wait for server to be ready and check health
echo -e "\n${YELLOW}Step 7: Checking API health status...${NC}"
MAX_RETRIES=30
RETRY_COUNT=0
HEALTH_CHECK_PASSED=false
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
sleep 1
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/ 2>/dev/null || echo "000")
if [ "$HTTP_CODE" == "200" ]; then
HEALTH_CHECK_PASSED=true
break
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
echo -n "."
done
echo ""
if [ "$HEALTH_CHECK_PASSED" = true ]; then
echo -e "${GREEN}✅ API health check passed!${NC}"
echo -e "${GREEN} API is running at http://localhost:8000${NC}"
else
echo -e "${RED}❌ API health check failed after $MAX_RETRIES seconds${NC}"
echo -e "${YELLOW} Attempting to kill background process...${NC}"
kill $API_PID 2>/dev/null
exit 1
fi
fi
# Step 9: Launch Streamlit frontend
echo -e "\n${YELLOW}Step 8: Launching Streamlit frontend...${NC}"
echo -e "${GREEN}✅ Starting Streamlit app (app_api.py)${NC}"
echo -e "${GREEN} Frontend will be available at http://localhost:8501${NC}"
echo -e "\n${YELLOW}Press Ctrl+C to stop both servers${NC}\n"
# Launch Streamlit (this will block)
# When Streamlit exits, the trap will handle cleanup
streamlit run app_api.py
|