Spaces:
Build error
Build error
| # | |
| # RunPod Initialization Script | |
| # Automatically downloads snapshot from HuggingFace, extracts to RAM disk, and starts Service Manager | |
| # | |
| # Usage: Used as --args in runpodctl create pod command | |
| # | |
| set -e # Exit on error | |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" | |
| echo "π Ultravox Pipeline - RunPod Initialization" | |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" | |
| echo "" | |
| # Configuration | |
| SNAPSHOT_URL="${SNAPSHOT_URL:-https://huggingface.co/marcosremar2/ultravox-snapshots/resolve/main/ultravox-snapshot-latest.tar.zst}" | |
| PROJECT_DIR="/root/ultravox-pipeline" | |
| RAMDISK_PATH="/dev/shm" | |
| ULTRAVOX_PROFILE="${ULTRAVOX_PROFILE:-gpu-prod}" | |
| # Detect compression format from URL | |
| if [[ "$SNAPSHOT_URL" == *.tar.zst ]]; then | |
| COMPRESS_FORMAT="zstd" | |
| FILE_EXT=".tar.zst" | |
| TAR_FLAGS="--zstd -xf" | |
| elif [[ "$SNAPSHOT_URL" == *.tar.gz ]] || [[ "$SNAPSHOT_URL" == *.tgz ]]; then | |
| COMPRESS_FORMAT="gzip" | |
| FILE_EXT=".tar.gz" | |
| TAR_FLAGS="-xzf" | |
| else | |
| COMPRESS_FORMAT="unknown" | |
| FILE_EXT=".tar.gz" | |
| TAR_FLAGS="-xzf" | |
| echo "β οΈ Warning: Unknown compression format, assuming gzip" | |
| fi | |
| TEMP_SNAPSHOT="$RAMDISK_PATH/snapshot$FILE_EXT" | |
| echo "π Configuration:" | |
| echo " Snapshot URL: $SNAPSHOT_URL" | |
| echo " Compression: $COMPRESS_FORMAT" | |
| echo " Project Dir: $PROJECT_DIR" | |
| echo " RAM Disk: $RAMDISK_PATH" | |
| echo " Profile: $ULTRAVOX_PROFILE" | |
| echo "" | |
| # Step 1: Check available RAM | |
| echo "π Step 1/5: Checking RAM disk space..." | |
| df -h $RAMDISK_PATH | |
| echo "" | |
| # Step 2: Download snapshot to RAM disk (ultra-fast) | |
| echo "π₯ Step 2/5: Downloading snapshot to RAM disk..." | |
| START_TIME=$(date +%s) | |
| wget -q --show-progress -O "$TEMP_SNAPSHOT" "$SNAPSHOT_URL" || { | |
| echo "β οΈ wget failed, trying curl..." | |
| curl -# -L -o "$TEMP_SNAPSHOT" "$SNAPSHOT_URL" | |
| } | |
| DOWNLOAD_TIME=$(($(date +%s) - START_TIME)) | |
| SNAPSHOT_SIZE=$(du -sh "$TEMP_SNAPSHOT" | cut -f1) | |
| echo "β Downloaded: $SNAPSHOT_SIZE in ${DOWNLOAD_TIME}s" | |
| echo "" | |
| # Step 3: Extract from RAM disk to project directory (ultra-fast) | |
| echo "π¦ Step 3/5: Extracting snapshot from RAM disk..." | |
| echo " Using tar flags: $TAR_FLAGS" | |
| START_TIME=$(date +%s) | |
| mkdir -p "$PROJECT_DIR" | |
| cd "$PROJECT_DIR" | |
| tar $TAR_FLAGS "$TEMP_SNAPSHOT" | |
| EXTRACT_TIME=$(($(date +%s) - START_TIME)) | |
| echo "β Extracted in ${EXTRACT_TIME}s" | |
| echo "" | |
| # Step 3.5: Validate extraction | |
| echo "π Step 3.5/6: Validating extraction..." | |
| VALIDATION_FAILED=0 | |
| if [ ! -d "$PROJECT_DIR/src" ]; then | |
| echo "β Missing: src/" | |
| VALIDATION_FAILED=1 | |
| fi | |
| if [ ! -d "$PROJECT_DIR/config" ]; then | |
| echo "β Missing: config/" | |
| VALIDATION_FAILED=1 | |
| fi | |
| if [ ! -f "$PROJECT_DIR/src/core/service_manager/main.py" ]; then | |
| echo "β Missing: src/core/service_manager/main.py" | |
| VALIDATION_FAILED=1 | |
| fi | |
| if [ $VALIDATION_FAILED -eq 1 ]; then | |
| echo "β Extraction validation failed!" | |
| echo "π Contents of $PROJECT_DIR:" | |
| ls -la "$PROJECT_DIR" | |
| exit 1 | |
| fi | |
| echo "β Validation passed - all required files present" | |
| echo "" | |
| # Step 4: Cleanup RAM disk | |
| echo "π§Ή Step 4/6: Cleaning up RAM disk..." | |
| rm -f "$TEMP_SNAPSHOT" | |
| echo "β RAM disk cleaned" | |
| echo "" | |
| # Step 5: Start Service Manager | |
| echo "βοΈ Step 5/6: Starting Service Manager..." | |
| cd "$PROJECT_DIR" | |
| # Export profile and authorization | |
| export ULTRAVOX_PROFILE="$ULTRAVOX_PROFILE" | |
| export ULTRAVOX_SM_AUTHORIZED=1 | |
| # Check if Service Manager main.py exists | |
| if [ ! -f "src/core/service_manager/main.py" ]; then | |
| echo "β src/core/service_manager/main.py not found in $PROJECT_DIR" | |
| echo "π Contents:" | |
| ls -la | |
| exit 1 | |
| fi | |
| # Start Service Manager in background using Python directly | |
| nohup python3 src/core/service_manager/main.py > /var/log/service_manager.log 2>&1 & | |
| SERVICE_MANAGER_PID=$! | |
| echo "β Service Manager started (PID: $SERVICE_MANAGER_PID)" | |
| echo " Logs: /var/log/service_manager.log" | |
| echo "" | |
| # Wait a few seconds for initialization | |
| sleep 5 | |
| # Check if Service Manager is running | |
| if kill -0 $SERVICE_MANAGER_PID 2>/dev/null; then | |
| echo "β Service Manager is running" | |
| else | |
| echo "β Service Manager failed to start" | |
| echo "π Last 20 lines of log:" | |
| tail -n 20 /var/log/service_manager.log | |
| exit 1 | |
| fi | |
| echo "" | |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" | |
| echo "β INITIALIZATION COMPLETE!" | |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" | |
| echo "" | |
| echo "π Timing Summary:" | |
| TOTAL_TIME=$((DOWNLOAD_TIME + EXTRACT_TIME)) | |
| echo " Download: ${DOWNLOAD_TIME}s" | |
| echo " Extract: ${EXTRACT_TIME}s" | |
| echo " Total: ${TOTAL_TIME}s" | |
| echo "" | |
| echo "π― Service Manager Status:" | |
| echo " PID: $SERVICE_MANAGER_PID" | |
| echo " Profile: $ULTRAVOX_PROFILE" | |
| echo " Logs: /var/log/service_manager.log" | |
| echo "" | |
| echo "π Check status:" | |
| echo " curl http://localhost:8888/health" | |
| echo "" | |
| echo "π View logs:" | |
| echo " tail -f /var/log/service_manager.log" | |
| echo "" | |
| # Keep container running | |
| exec tail -f /var/log/service_manager.log | |