| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
|
|
| BUNDLE=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) |
| cd "$BUNDLE" |
|
|
| WITH_DEPS=false |
| SKIP_MODELS=false |
| EXT_MODELS="" |
| while [ $# -gt 0 ]; do |
| case "$1" in |
| --with-deps) WITH_DEPS=true; shift ;; |
| --skip-models) SKIP_MODELS=true; shift ;; |
| --models) EXT_MODELS=${2:-}; shift 2 ;; |
| *) echo "unknown option: $1" >&2; exit 2 ;; |
| esac |
| done |
|
|
| log() { printf '\n[setup] %s\n' "$*"; } |
| die() { printf '[setup] ERROR: %s\n' "$*" >&2; exit 1; } |
|
|
| log "bundle root: $BUNDLE" |
|
|
| |
| command -v python >/dev/null 2>&1 || die "no 'python' on PATH" |
| PYV=$(python -c 'import sys; print("%d.%d" % sys.version_info[:2])') |
| log "python $PYV" |
| [ "$PYV" = "3.10" ] || log "WARNING: the release targets python 3.10, found $PYV" |
|
|
| if command -v java >/dev/null 2>&1; then |
| log "java: $(java -version 2>&1 | head -1)" |
| else |
| log "WARNING: no 'java' on PATH -- ScienceWorld starts a JVM per episode and" |
| log " will fail at runtime. Needs Java 17+ (e.g. 'module load openjdk')." |
| fi |
|
|
| |
| [ -d tcod/trinity ] || die "tcod/ is missing or incomplete -- re-download the bundle" |
|
|
| if [ "$WITH_DEPS" = true ]; then |
| log "installing runtime dependencies (--with-deps)" |
| |
| |
| TMP_REQ=$(mktemp) |
| grep -v '^flash-attn' requirements.txt > "$TMP_REQ" |
| python -m pip install -r "$TMP_REQ" |
| rm -f "$TMP_REQ" |
| python -m pip install flash-attn==2.8.1 --no-build-isolation || \ |
| log "WARNING: flash-attn failed to build; training may still work without it" |
| fi |
|
|
| log "installing the vendored tcod package (editable, --no-deps)" |
| python -m pip install -e tcod --no-deps |
|
|
| python -c "import scienceworld" 2>/dev/null \ |
| || { log "installing scienceworld==1.2.2"; python -m pip install 'scienceworld==1.2.2'; } |
|
|
| |
| log "applying the FutureBridge workflow overlay onto tcod/" |
| cp -R overlay/trinity/. tcod/trinity/ |
|
|
| log "verifying the five ScienceWorld workflow classes import" |
| python - <<'EOF' |
| import importlib |
| mods = [ |
| ("trinity.common.workflows.envs.TCOD.scienceworld.OPD_workflow", |
| "OnPolicyDistillVerlAgentScienceworldWorkflow"), |
| ("trinity.common.workflows.envs.TCOD.scienceworld.guided_opd_workflow", |
| "GuidedOPDScienceworldWorkflow"), |
| ("trinity.common.workflows.envs.TCOD.scienceworld.TCOD_b2f_workflow", |
| "TCOD_b2f_scienceworld_workflow"), |
| ("trinity.common.workflows.envs.TCOD.scienceworld.TCOD_f2b_workflow", |
| "TCOD_f2b_scienceworld_workflow"), |
| ("trinity.common.workflows.envs.TCOD.scienceworld.futurebridge_workflow", |
| "FutureBridgeScienceWorldWorkflow"), |
| ] |
| for mod, cls in mods: |
| getattr(importlib.import_module(mod), cls) |
| print(f" OK {cls}") |
| EOF |
|
|
| |
| mkdir -p models |
| if [ "$SKIP_MODELS" = true ]; then |
| log "skipping models (--skip-models); wire ./models/Qwen3-1.7B and ./models/Qwen3-32B up yourself" |
| elif [ -n "$EXT_MODELS" ]; then |
| log "linking models from $EXT_MODELS" |
| for m in Qwen3-1.7B Qwen3-32B; do |
| [ -d "$EXT_MODELS/$m" ] || die "$EXT_MODELS/$m does not exist" |
| ln -sfn "$EXT_MODELS/$m" "models/$m" |
| echo " linked models/$m -> $EXT_MODELS/$m" |
| done |
| else |
| HF_CLI=$(command -v hf || command -v huggingface-cli || true) |
| [ -n "$HF_CLI" ] || die "neither 'hf' nor 'huggingface-cli' found (pip install huggingface_hub), \ |
| or re-run with --models DIR / --skip-models" |
| for pair in "Qwen/Qwen3-1.7B:Qwen3-1.7B" "Qwen/Qwen3-32B:Qwen3-32B"; do |
| repo=${pair%%:*}; name=${pair##*:} |
| if [ -f "models/$name/config.json" ]; then |
| log "models/$name already present, skipping" |
| else |
| log "downloading $repo -> models/$name" |
| "$HF_CLI" download "$repo" --local-dir "models/$name" |
| fi |
| done |
| fi |
|
|
| |
| log "preparing the ScienceWorld task split" |
| python scripts/prepare_data.py --out data/scienceworld |
|
|
| |
| mkdir -p outputs/tmp outputs/ray_tmp outputs/buffers outputs/checkpoints outputs/logs |
|
|
| log "setup complete." |
| log "next: bash scripts/run.sh ftb (or opd | guided_opd | tcod_b2f | tcod_f2b)" |
|
|