curl -X POST "$HARDSIM_API_URL/v1/training-runs" \
-H "Authorization: Bearer $HARDSIM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"project_id": "proj_demo",
"name": "managed-loop-smoke",
"rollout_template": {
"rollout_parallelism": 2,
"episodes_per_iteration": 2,
"scene_id": "franka_cabinet_oige_v1",
"num_envs": 8,
"steps": 128,
"control": {"task_mode": "fr3_pick_lift_block_v1", "fix_base": true}
},
"trainer_spec": {
"image_uri": "ghcr.io/<org-or-user>/hardsim-trainer-smoke:0.1.1",
"entrypoint": "python /app/train_smoke.py",
"args_template": [
"--dataset-manifest-path", "{dataset_manifest_path}",
"--output-dir", "{output_dir}",
"--checkpoint-in-uri", "{checkpoint_in_uri}"
],
"env": {
"HARDSIM_RUN_ID": "{run_id}",
"HARDSIM_ITERATION_ID": "{iteration_id}"
},
"resources": {"gpu": 1, "cpu": 1, "memory_gb": 2}
},
"checkpoint_init_asset_id": "asset_checkpoint_init_v1",
"loop_policy": {
"max_iterations": 3,
"max_wallclock_hours": 2,
"stop_on_iteration_failure": true,
"rollout_retry_limit": 1,
"trainer_retry_limit": 1
},
"success_criteria": {"patience_iterations": 2},
"budget_policy": {"max_credits": 50}
}'