Views
No views yet
CITATION.cff.| Path | Purpose |
|---|---|
approach/run_vlm.py | configurable screenshot-context and candidate generation |
approach/run_ape.py | configurable APE detection and optional reflection |
approach/reflection.py | paper-aligned PII.5, PII.6, and PII.7 loop |
approach/config.py | OpenRouter and paper model profiles |
approach/method*.py | legacy experiment entrypoints retained for provenance |
approach/ovod/ | vendored APE, Grounding DINO, and related detector code |
evaluation/tools/ | prediction conversion and validated shard merge |
evaluation/ | detection, semantic, context, and interaction evaluation |
dataset/ | dataset conversion and split-generation scripts |
tests/ | offline regression tests for release-critical logic |
1python -B -m venv .venv
2source .venv/bin/activate
3python -B -m pip install --upgrade pip
4python -B -m pip install -r requirements.txtrequirements.txt covers the release utilities and provider adapters. APE-L(_D) has a separate CUDA/PyTorch stack under approach/ovod/APE; the checkpoint is bundled at approach/ovod/APE/ape_d_model_final.pth and recorded in docs/MODEL_MANIFEST.md. The public tree intentionally excludes compiled APE extensions, build directories, and egg-info metadata, so build/install the APE extension inside the target CUDA environment before running Stage 2. See docs/ENVIRONMENT.md and environment.reference.yml for the tested historical environment, a public compatibility starting point, build commands, and verification boundary. The reference YAML is not a cross-platform lockfile or a security attestation. The historical combined dependency snapshot remains at approach/requirements.txt, but it is not a clean lockfile.openrouter-run so the key is injected by the local credential wrapper and never written to source files, logs, or shell history:openrouter-run python -B -m approach.run_vlm --helpOPENROUTER_API_KEY through the runner's secret manager or process environment. Do not commit .env, shell history, logs, or generated manifests containing credential values.openai/gpt-5.6-sol, the current flagship model configured for this release. Override it without editing code:export OPENROUTER_MODEL=openai/gpt-5.6-sol| Profile | Model |
|---|---|
paper_openai / gpt4v | openai/gpt-4o-2024-08-06 |
paper_claude / claude35sonnet | anthropic/claude-3.5-sonnet |
paper_gemini / gemini15pro | google/gemini-pro-1.5 |
approach/config.py. Library callers can override the catalog with a YAML or JSON profile file; CLI users select a named profile and may override the default model through OPENROUTER_MODEL. The paper profiles preserve the evaluated identifiers for GPT-4o-2024-08-06, Claude 3.5 Sonnet, and Gemini 1.5 Pro. Provider catalogs may retire historical routes; if one is unavailable, use a custom profile or direct vendor access and record the substitution instead of silently changing the paper profile. The client records only the credential variable name in run manifests; it never writes the credential value.1export ORIENTER_DATA_DIR=/absolute/path/to/orienter_data
2export ORIENTER_RUN_DIR=/absolute/path/to/orienter_run
3mkdir -p "$ORIENTER_RUN_DIR"1python -B scripts/generate_questions.py \
2 --images-dir "$ORIENTER_DATA_DIR/images" \
3 --output "$ORIENTER_RUN_DIR/questions.jsonl" \
4 --prompt "Identify interactable elements." \
5 --metadata-template "$ORIENTER_RUN_DIR/app_metadata.json"<numeric_app_id>_<numeric_frame>.<supported_ext>, for example 123_4.jpg; additional underscores are not supported. The frame must be in [0, 999] and is zero-padded to three digits when deriving image_id. Fill every generated app_name and app_description field in $ORIENTER_RUN_DIR/app_metadata.json before Stage 1; blank or missing records fail closed.1python -B scripts/verify_assets.py \
2 --repo-root . \
3 --questions "$ORIENTER_RUN_DIR/questions.jsonl" \
4 --images-dir "$ORIENTER_DATA_DIR/images" \
5 --app-metadata-cache "$ORIENTER_RUN_DIR/app_metadata.json"1openrouter-run python -B -m approach.run_vlm \
2 --questions "$ORIENTER_RUN_DIR/questions.jsonl" \
3 --images-dir "$ORIENTER_DATA_DIR/images" \
4 --output "$ORIENTER_RUN_DIR/candidates.jsonl" \
5 --profile default \
6 --app-metadata-cache "$ORIENTER_RUN_DIR/app_metadata.json"--app-metadata-cache accepts JSON or JSONL records keyed by app_id and avoids live Steam page drift. When supplied, missing app IDs fail closed. Omit it only for exploratory runs where live Steam lookup is acceptable.1python -B -m approach.run_ape \
2 --questions "$ORIENTER_RUN_DIR/questions.jsonl" \
3 --candidates "$ORIENTER_RUN_DIR/candidates.jsonl" \
4 --images-dir "$ORIENTER_DATA_DIR/images" \
5 --output "$ORIENTER_RUN_DIR/predictions.json" \
6 --visualization-dir "$ORIENTER_RUN_DIR/ape_visualizations" \
7 --ape-root approach/ovod/APE \
8 --ape-checkpoint ape_d_model_final.pth--trust-custom-checkpoint is supplied explicitly after independently verifying its source; PyTorch checkpoints are executable pickle-based artifacts and must not be loaded from an untrusted source.1openrouter-run python -B -m approach.run_ape \
2 --questions "$ORIENTER_RUN_DIR/questions.jsonl" \
3 --candidates "$ORIENTER_RUN_DIR/candidates.jsonl" \
4 --images-dir "$ORIENTER_DATA_DIR/images" \
5 --output "$ORIENTER_RUN_DIR/predictions.json" \
6 --visualization-dir "$ORIENTER_RUN_DIR/ape_visualizations" \
7 --ape-checkpoint ape_d_model_final.pth \
8 --enable-reflection \
9 --reflection-profile default \
10 --max-reflection-iterations 101python -B -m approach.run_ape ... --start-index 0 --end-index 100
2python -B -m approach.run_ape ... --num-shards 4 --shard-index 0
3python -B -m approach.run_ape ... --num-shards 4 --shard-index 1--resume to continue from an existing output. Progress sidecars record completed images even when a valid inference produces zero detections.1python -B -m evaluation.tools.merge_predictions \
2 --inputs "$ORIENTER_RUN_DIR/predictions.shard00-of-04.json" \
3 "$ORIENTER_RUN_DIR/predictions.shard01-of-04.json" \
4 "$ORIENTER_RUN_DIR/predictions.shard02-of-04.json" \
5 "$ORIENTER_RUN_DIR/predictions.shard03-of-04.json" \
6 --questions "$ORIENTER_RUN_DIR/questions.jsonl" \
7 --output "$ORIENTER_RUN_DIR/predictions.merged.json"1python -B -m evaluation.tools.to_pred \
2 --task semantics \
3 --input "$ORIENTER_RUN_DIR/predictions.merged.json" \
4 --output "$ORIENTER_RUN_DIR/predictions.semantics.json"--task accepts semantics, interactable, interaction, or all; all writes separate outputs and never overwrites one task with another. The remaining metric scripts and expected ground-truth layouts are documented in PIPELINE_README.md.1python -B scripts/smoke_control_path.py
2python scripts/run_tests.pyapproach/method.py, method_fastuse.py, method_claude.py, and method_gemini.py preserve historical branches and commented stage variants so experiment provenance is not lost. Their active APE paths now produce valid accumulated JSON and accept range/shard controls; method.py and method_fastuse.py also accept explicit data/checkpoint/output paths and reflection flags.run_vlm.py and run_ape.py. They make stage selection, paths, model profiles, app metadata caches, ranges, and shards configurable instead of requiring source edits.1@article{li2026look,
2 author = {Shuqing Li and Binchang Li and Yepang Liu and Cuiyun Gao and
3 Jianping Zhang and Shing-Chi Cheung and Michael R. Lyu},
4 title = {Look Before You Leap: Context-Sensitive GUI Grounding for
5 Boosting Automated Extended Reality (XR) Testing},
6 journal = {Proceedings of the ACM on Software Engineering},
7 year = {2026},
8 volume = {3},
9 number = {FSE},
10 pages = {2858--2881},
11 articleno = {FSE127},
12 doi = {10.1145/3808134}
13}CITATION.cff contains the same preferred paper citation. The top-level code license and final Hugging Face repository links remain publication decisions; licenses for the paper, data, model, and vendored source are separate and must not be inferred from one another.