Spaces:
Sleeping
Sleeping
| @echo off | |
| title PlacementPredictor+ Launcher | |
| color 0A | |
| echo ============================================================ | |
| echo PlacementPredictor+ - AI Career Router | |
| echo ============================================================ | |
| echo. | |
| :: Check if Python is installed | |
| python --version >nul 2>&1 | |
| if errorlevel 1 ( | |
| echo [ERROR] Python is not installed or not in PATH! | |
| echo Please install Python from https://python.org | |
| pause | |
| exit /b 1 | |
| ) | |
| echo [1/6] Installing/Updating dependencies... | |
| pip install pandas numpy scikit-learn xgboost shap fastapi uvicorn joblib imbalanced-learn pydantic agno sqlalchemy python-dotenv --quiet | |
| if errorlevel 1 ( | |
| echo [WARNING] Some packages may have failed to install. | |
| ) else ( | |
| echo Done! | |
| ) | |
| echo. | |
| :: Also clean legacy CardioSense artifacts if present | |
| if exist "cardiosense_artifacts.pkl" ( | |
| del /f /q "cardiosense_artifacts.pkl" | |
| echo Legacy CardioSense artifacts removed. | |
| ) | |
| :: Smart PKL Caching: check if --force-train was passed | |
| set FORCE_TRAIN=0 | |
| for %%a in (%*) do ( | |
| if "%%a"=="--force-train" set FORCE_TRAIN=1 | |
| ) | |
| if "%FORCE_TRAIN%"=="1" ( | |
| echo [2/6] Force-train requested. Deleting old artifacts... | |
| if exist "placement_artifacts.pkl" del /f /q "placement_artifacts.pkl" | |
| echo Old artifacts deleted! | |
| goto :DO_TRAIN | |
| ) | |
| :: If pkl exists, skip training | |
| if exist "placement_artifacts.pkl" ( | |
| echo [2/6] Found existing model artifacts. Skipping training... | |
| echo TIP: Use --force-train flag to retrain: start_placement_predictor.bat --force-train | |
| goto :SKIP_TRAIN | |
| ) | |
| echo [2/6] No model artifacts found. Training required... | |
| :DO_TRAIN | |
| :: Set Nvidia API Key first (needed before training) | |
| echo [3/6] Setting up AI Chat credentials... | |
| setx NVIDIA_API_KEY "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" >nul 2>&1 | |
| set NVIDIA_API_KEY=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 | |
| echo NVIDIA_API_KEY=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> .env | |
| echo NVIDIA_API_KEY configured! | |
| echo. | |
| echo [4/6] Training PlacementPredictor+ model... | |
| echo This trains the XGBoost Classifier for Placement. | |
| echo. | |
| python train_model.py | |
| if errorlevel 1 ( | |
| echo [ERROR] Model training failed! | |
| echo Please check if the placement CSV dataset files exist in this folder. | |
| pause | |
| exit /b 1 | |
| ) | |
| echo Model trained successfully! | |
| echo. | |
| goto :START_SERVERS | |
| :SKIP_TRAIN | |
| :: Set Nvidia API Key | |
| echo [3/6] Setting up AI Chat credentials... | |
| setx NVIDIA_API_KEY "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" >nul 2>&1 | |
| set NVIDIA_API_KEY=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 | |
| echo NVIDIA_API_KEY=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> .env | |
| echo NVIDIA_API_KEY configured! | |
| echo. | |
| echo [4/6] Skipped training (using cached model). | |
| echo. | |
| :START_SERVERS | |
| echo [5/6] Starting API Server on http://127.0.0.1:7860 ... | |
| :: Fixed: Host 0.0.0.0 and Port 7860 to match main.py and HF patterns | |
| start "PlacementPredictor+ API" cmd /k "title PlacementPredictor+ API Server && color 0B && set NVIDIA_API_KEY=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 && python main.py" | |
| echo Waiting for API to start... | |
| timeout /t 8 /nobreak >nul | |
| :: Validate the model loaded correctly by hitting /health | |
| echo Validating model artifacts... | |
| curl -s http://127.0.0.1:7860/health 2>nul | findstr /C:"model_loaded" | findstr /C:"true" >nul 2>&1 | |
| if errorlevel 1 ( | |
| echo [!] Model failed to load - version mismatch or corrupted pkl. | |
| echo Killing API server and retraining... | |
| taskkill /FI "WINDOWTITLE eq PlacementPredictor+ API Server" /F >nul 2>&1 | |
| timeout /t 2 /nobreak >nul | |
| if exist "placement_artifacts.pkl" del /f /q "placement_artifacts.pkl" | |
| echo. | |
| echo [4/6] Retraining model... | |
| python train_model.py | |
| if errorlevel 1 ( | |
| echo [ERROR] Retraining also failed! | |
| pause | |
| exit /b 1 | |
| ) | |
| echo Retrained successfully! | |
| echo. | |
| echo [5/6] Restarting API Server... | |
| start "PlacementPredictor+ API" cmd /k "title PlacementPredictor+ API Server && color 0B && set NVIDIA_API_KEY=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 && python main.py" | |
| timeout /t 8 /nobreak >nul | |
| ) | |
| echo API Server started! | |
| echo. | |
| echo ============================================================ | |
| echo SERVERS ARE RUNNING! | |
| echo ============================================================ | |
| echo. | |
| echo Application UI: http://127.0.0.1:7860 | |
| echo. | |
| echo TIP: Use the "Demo Data" button in the UI for quick testing | |
| echo TIP: Click the chat bubble after results for AI assistant | |
| echo TIP: Use --force-train flag to force model retraining | |
| echo. | |
| echo ============================================================ | |
| echo. | |
| :: Open the frontend in default browser | |
| echo Opening PlacementPredictor+ in your browser... | |
| timeout /t 2 /nobreak >nul | |
| start http://127.0.0.1:7860 | |
| echo. | |
| echo Press any key to close this launcher (servers will keep running)... | |
| pause >nul | |