Skip to content

Add V75 canonical student-state trajectories #9

Add V75 canonical student-state trajectories

Add V75 canonical student-state trajectories #9

name: Trace the Ace mastery experiment
on:
workflow_dispatch:
inputs:
run_full:
description: "Run full experiment if TRACE_ACE_DATA_URL secret is configured"
required: false
default: false
type: boolean
limit:
description: "Optional row limit (0 = all rows)"
required: false
default: "0"
type: string
push:
branches:
- agent/trace-ace-mastery-events
paths:
- "competitions/trace_the_ace/**"
- ".github/workflows/trace-ace-mastery.yml"
jobs:
self-test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
- name: Install experiment dependencies
run: python -m pip install --disable-pip-version-check numpy pandas scipy scikit-learn
- name: Run mastery extractor self-test
run: python competitions/trace_the_ace/v71_mastery_events.py --self-test
- name: Run supervision audit self-test
run: python competitions/trace_the_ace/v72_supervision_audit.py --self-test
- name: Run contrastive mastery self-test
run: python competitions/trace_the_ace/v73_contrastive_mastery.py --self-test
- name: Run semantic objective prior self-test
run: python competitions/trace_the_ace/v74_semantic_objective_prior.py --self-test
full-experiment:
if: ${{ github.event_name == 'workflow_dispatch' && inputs.run_full }}
needs: self-test
runs-on: ubuntu-latest
timeout-minutes: 360
env:
TRACE_ACE_DATA_URL: ${{ secrets.TRACE_ACE_DATA_URL }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
- name: Install experiment dependencies
run: python -m pip install --disable-pip-version-check numpy pandas scipy scikit-learn
- name: Require private dataset URL
shell: bash
run: |
if [ -z "$TRACE_ACE_DATA_URL" ]; then
echo "TRACE_ACE_DATA_URL is not configured; refusing to run without private data transport."
exit 1
fi
- name: Fetch dataset without logging URL or contents
shell: bash
run: |
set +x
mkdir -p /tmp/trace_ace
curl --fail --silent --show-error --location "$TRACE_ACE_DATA_URL" -o /tmp/trace_ace/data.tar.gz
tar -xzf /tmp/trace_ace/data.tar.gz -C /tmp/trace_ace
rm -f /tmp/trace_ace/data.tar.gz
- name: Locate inputs and run experiments
shell: bash
run: |
set -euo pipefail
FEATURES=$(find /tmp/trace_ace -type f -name 'train_features*.csv' | head -1)
LABELS=$(find /tmp/trace_ace -type f -name 'train_labels*.csv' | head -1)
TRANSCRIPTS=$(find /tmp/trace_ace -type d -name 'train_transcripts*' | head -1)
test -n "$FEATURES" && test -n "$LABELS" && test -n "$TRANSCRIPTS"
LIMIT="${{ inputs.limit }}"
EXTRA=()
if [ "$LIMIT" != "0" ]; then EXTRA+=(--limit "$LIMIT"); fi
python competitions/trace_the_ace/v71_mastery_events.py \
--features "$FEATURES" \
--labels "$LABELS" \
--transcripts "$TRANSCRIPTS" \
--out v71_mastery_results.json \
"${EXTRA[@]}"
python competitions/trace_the_ace/v72_supervision_audit.py \
--features "$FEATURES" \
--labels "$LABELS" \
--transcripts "$TRANSCRIPTS" \
--out v72_supervision_audit.json \
"${EXTRA[@]}"
python competitions/trace_the_ace/v73_contrastive_mastery.py \
--features "$FEATURES" \
--labels "$LABELS" \
--transcripts "$TRANSCRIPTS" \
--out v73_contrastive_mastery.json \
"${EXTRA[@]}"
python competitions/trace_the_ace/v74_semantic_objective_prior.py \
--features "$FEATURES" \
--labels "$LABELS" \
--out v74_semantic_objective_prior.json \
"${EXTRA[@]}"
- name: Upload aggregate results only
uses: actions/upload-artifact@v4
with:
name: trace-ace-aggregate-results
path: |
v71_mastery_results.json
v72_supervision_audit.json
v73_contrastive_mastery.json
v74_semantic_objective_prior.json
retention-days: 14