ultravox-runpod / runpod_init.sh
marcosremar2's picture
Add Dockerfile and initialization script for Docker build
32845e5
#!/bin/bash
#
# 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