Spaces:
Sleeping
Sleeping
File size: 5,250 Bytes
a4f74f3 | 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 151 152 153 154 155 156 157 158 159 | #!/bin/bash
# ============================================================
# API Testing Environment — One-command setup
# ============================================================
# Usage: bash setup.sh
#
# This script:
# 1. Creates a virtual environment
# 2. Detects your GPU and installs the correct PyTorch+CUDA
# 3. Installs all project dependencies
# 4. Verifies everything works
# ============================================================
set -e
echo ""
echo "============================================"
echo " API Testing Environment — Setup"
echo "============================================"
echo ""
# --- Step 1: Create venv ---
echo "[1/5] Setting up virtual environment..."
if [ ! -d ".venv" ]; then
python3 -m venv .venv
echo " Created .venv"
else
echo " .venv already exists"
fi
source .venv/bin/activate
pip install --upgrade pip setuptools wheel -q
echo " Python: $(python3 --version)"
echo " pip: $(pip --version | awk '{print $2}')"
echo ""
# --- Step 2: Install PyTorch with correct CUDA ---
echo "[2/5] Detecting GPU and installing PyTorch..."
install_pytorch() {
if command -v nvidia-smi &> /dev/null; then
DRIVER_VERSION=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader 2>/dev/null | head -1)
DRIVER_MAJOR=$(echo "$DRIVER_VERSION" | cut -d. -f1)
GPU_NAME=$(nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null | head -1)
GPU_MEM=$(nvidia-smi --query-gpu=memory.total --format=csv,noheader 2>/dev/null | head -1)
echo " GPU: $GPU_NAME ($GPU_MEM)"
echo " NVIDIA driver: $DRIVER_VERSION"
if [ "$DRIVER_MAJOR" -ge 530 ]; then
echo " -> Installing PyTorch + CUDA 12.1"
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 -q
elif [ "$DRIVER_MAJOR" -ge 450 ]; then
echo " -> Installing PyTorch + CUDA 11.8 (older driver)"
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 -q
else
echo " WARNING: Driver too old ($DRIVER_VERSION). Install CPU PyTorch."
echo " Upgrade: https://www.nvidia.com/Download/index.aspx"
pip install torch torchvision -q
fi
else
echo " No NVIDIA GPU detected."
# Check for Apple Silicon
if python3 -c "import platform; exit(0 if platform.processor() == 'arm' else 1)" 2>/dev/null; then
echo " -> Apple Silicon detected, installing default PyTorch (MPS support)"
else
echo " -> Installing CPU-only PyTorch"
fi
pip install torch torchvision -q
fi
}
install_pytorch
echo ""
# --- Step 3: Install project dependencies ---
echo "[3/5] Installing project dependencies..."
pip install -r requirements.txt -q
echo " Done."
echo ""
# --- Step 4: Verify everything ---
echo "[4/5] Verifying installation..."
echo ""
python3 << 'PYEOF'
import sys
# Core
import fastapi, uvicorn, pydantic, httpx
print(f" fastapi: {fastapi.__version__}")
# ML
import torch
print(f" torch: {torch.__version__}")
cuda = torch.cuda.is_available()
mps = hasattr(torch.backends, 'mps') and torch.backends.mps.is_available()
if cuda:
print(f" CUDA: {torch.version.cuda}")
print(f" GPU: {torch.cuda.get_device_name(0)}")
print(f" GPU memory: {torch.cuda.get_device_properties(0).total_memory/1e9:.1f} GB")
elif mps:
print(f" Device: Apple MPS")
else:
print(f" Device: CPU only (training will be slow!)")
import transformers, trl, peft, datasets
print(f" transformers: {transformers.__version__}")
print(f" trl: {trl.__version__}")
print(f" peft: {peft.__version__}")
# Optional
try:
import wandb
print(f" wandb: {wandb.__version__}")
except ImportError:
print(f" wandb: not installed (optional)")
try:
import gradio
print(f" gradio: {gradio.__version__}")
except ImportError:
print(f" gradio: not installed (optional)")
# OpenEnv
try:
import openenv
print(f" openenv: OK")
except ImportError:
print(f" openenv: MISSING — run: pip install -r requirements.txt")
# Environment test
print("")
sys.path.insert(0, ".")
from server.environment import APITestEnvironment
from models import APITestAction, HTTPMethod
env = APITestEnvironment()
obs = env.reset(seed=42, task_id="basic_validation")
obs = env.step(APITestAction(method=HTTPMethod.GET, endpoint="/tasks/999999", expected_status=404))
assert obs.bugs_found_so_far == 1, "Bug detection failed!"
print(f" Environment: OK (bug detection verified)")
PYEOF
echo ""
# --- Step 5: Done ---
echo "============================================"
echo " Setup complete!"
echo "============================================"
echo ""
echo " Activate: source .venv/bin/activate"
echo ""
echo " Gradio UI: python gradio_app.py"
echo " Baselines: python -m training.evaluate --task all --agent all"
echo " Training: python -m training.grpo --model-id Qwen/Qwen3-1.7B"
echo " Test mode: python -m training.grpo --test-mode"
echo ""
echo " For HF Hub: huggingface-cli login"
echo " For W&B: wandb login"
echo ""
|