diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/bank_provenance.json b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/bank_provenance.json new file mode 100644 index 0000000000000000000000000000000000000000..8484fd87f1cc4528dda540c35cfb7a02fa25d4e2 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/bank_provenance.json @@ -0,0 +1,28 @@ +{ + "source": "/demonstrations via /worker_api.py API.read_demo", + "demo_ids": [ + "demo_00", + "demo_01", + "demo_02", + "demo_03", + "demo_04", + "demo_05", + "demo_06", + "demo_07", + "demo_08", + "demo_09", + "demo_10", + "demo_11", + "demo_12", + "demo_13", + "demo_14", + "demo_15", + "demo_16", + "demo_17", + "demo_18", + "demo_19" + ], + "rows": 11038, + "automatic_rgb_frames": "All action-aligned frames 0 through length-1 in all four cameras; separate from human/assistant visual inspection log.", + "neural_training": false +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/controller.py b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/controller.py new file mode 100644 index 0000000000000000000000000000000000000000..cd5212d298dc1f5c05f3dc72e71fa238993c7829 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/controller.py @@ -0,0 +1,67 @@ +"""Task-local non-neural demo trajectory tracking with empirical joint feedback.""" +from pathlib import Path +import numpy as np +import cv2 +CAMERAS=('front_camera','left_camera','robot_camera','top_camera') +_BANK=None +_RESPONSE=None +_cursor=None +_demo=None +_last_step=None +_previous_phase=None +_cached_action=None +_cached_step=None + +def image_feature(rgb): + x=np.asarray(rgb).squeeze();h,w=x.shape[:2] + whole=cv2.resize(x,(24,18),interpolation=cv2.INTER_AREA).reshape(-1) + crop=x[int(.1*h):int(.9*h),int(.1*w):int(.9*w)] + detail=cv2.resize(cv2.cvtColor(crop,cv2.COLOR_RGB2GRAY),(24,24),interpolation=cv2.INTER_AREA).reshape(-1) + return np.concatenate((whole,detail)) +def reset_episode(): + global _cursor,_demo,_last_step,_previous_phase,_cached_action,_cached_step + _cursor=None;_demo=None;_last_step=None;_previous_phase=None;_cached_action=None;_cached_step=None + +def _decide(obs): + global _BANK,_RESPONSE,_cursor,_demo,_last_step,_previous_phase + step=int(obs['step_id']) + if step>=850:return None + if _BANK is None: + with np.load(Path(__file__).with_name('demo_bank.npz')) as z:_BANK={k:z[k] for k in z.files} + with np.load(Path(__file__).with_name('response_bank.npz')) as z:_RESPONSE={k:z[k] for k in z.files} + b=_BANK;q=np.asarray(obs['proprioception']['agent/qpos']).reshape(-1) + visual=np.stack([image_feature(obs['rgb'][c]) for c in CAMERAS]).astype(float) + if _cursor is None: + err=((b['visual'][b['offsets'][:-1]].astype(float)-visual)/255)**2 + scene_score=err.mean((1,2));scene_score[np.diff(b['offsets'])>650]=np.inf + _demo=int(np.argmin(scene_score));_cursor=float(b['offsets'][_demo]);_last_step=step + lo=int(b['offsets'][_demo]);hi=int(b['offsets'][_demo+1]) + # Re-localize within a short phase neighborhood while keeping forward progress. + center=int(_cursor);ids=np.arange(max(lo,center-8),min(hi,center+21)) + dq=((b['q'][ids]-q)/b['q_scale'])**2 + err=.7*dq[:,:7].mean(1)+.3*dq[:,7:].mean(1) + err+=12*(((b['visual'][ids].astype(float)-visual)/255)**2).mean((1,2)) + best=int(ids[np.argmin(err)]) + elapsed=max(1,step-_last_step) + _cursor=min(hi-1,max(_cursor+.65*elapsed, min(best+1,_cursor+2*elapsed))) + ref=min(hi-1,int(_cursor)+3);action=b['actions'][ref].copy() + # Empirical local differential response, fitted only from legal demo transitions. + rb=_RESPONSE;dist=((rb['q']-q[:7])**2).sum(1);nn=np.argpartition(dist,249)[:250] + x=rb['a'][nn];y=rb['dq'][nn];w=1/(.02+dist[nn]);w/=w.max() + mat=np.linalg.solve(x.T@(w[:,None]*x)+np.eye(4)*.002,x.T@(w[:,None]*y)) + delta=(b['q'][ref,:7]-q[:7])*.06 + correction=np.linalg.solve(mat@mat.T+np.eye(4)*.003,mat@delta) + action[[0,1,2,5]]+=np.clip(correction,-.04,.04) + action[6:]+=np.clip(.3*(b['q'][ref,7:]-q[7:]),-.08,.08) + _last_step=step;_previous_phase=float((_cursor-lo)/(hi-lo)) + return np.clip(action,-1,1).astype(np.float32) + + +def act(obs): + global _cached_action,_cached_step + step=int(obs['step_id']) + if step>=850:return None + if _cached_step is not None and step<_cached_step:reset_episode() + if _cached_action is None or step-_cached_step>=5: + _cached_action=_decide(obs);_cached_step=step + return _cached_action.copy() diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..7eb9288b041369038fd6d87cea0aaae78fc21865 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "DexOpenDoor-v1", + "status": "released", + "selection_rule": "prefer existing pinned D20, otherwise numeric trajectory ID sort before reading data", + "lineage_status": "pinned_comparator", + "episodes": [ + { + "demo_id": "demo_00", + "file": "demo_00.h5", + "length": 523, + "fields": [ + { + "path": "actions", + "shape": [ + 523, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 524, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 524, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 524, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "731befb6c138e7ee5fe8ae2f04b760795e0be3ef855e5239a6c7e675f86eb609", + "source_sha256": "2a061389ba5b4a25086eed6d3a4f7e8658f865c1213125dc963650a3caa9b600", + "view_sha256": "7edab06ee1a33bd59b0799f3f08beffc4aa2e593a99d4c6ebb14266afbdf67c5" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 559, + "fields": [ + { + "path": "actions", + "shape": [ + 559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "269741ed0a4db26d47c12503ce0d2463551b6946c85d65bd9dd77253d730acda", + "source_sha256": "fbca30f7b6da9d9e25bcfe3c4311a6d813491290cc0a4beb0a47d12bc29df8bd", + "view_sha256": "0c38d9aecdc8f3b5c98f2e133a8e5df62904d4b7992093493408698335fc0127" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 752, + "fields": [ + { + "path": "actions", + "shape": [ + 752, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 753, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 753, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 753, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 753, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 753, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 753, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6f243c7bd2c0f0d1b5ebe5695cafee689092554440c835bb775662c883785622", + "source_sha256": "ccd614a8c352293f6636348ecdf7cc0e9dbb4666f2b9ecfe57e811ea21ff4c9a", + "view_sha256": "97ddf520907299646899a10d67a558ddbcea59be98a16b730321d5543644a549" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 520, + "fields": [ + { + "path": "actions", + "shape": [ + 520, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 521, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 521, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 521, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 521, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 521, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 521, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2e874d3d960269fd388a0503fba8c5a081357dd414cb84d25e7731e2d6e049c2", + "source_sha256": "197f4ce951cc3eb46298045277d55ef96a107696c628348d46b9b3bd78e13826", + "view_sha256": "1a7955b2a98698c21a7d8846b63177b9a01e31fa86861f9c9aca71bce549411f" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 515, + "fields": [ + { + "path": "actions", + "shape": [ + 515, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 516, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 516, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 516, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 516, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 516, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 516, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "36c243fd71503f5c046d21ffc4184cdab0c593ad477868245c7052538a3703a6", + "source_sha256": "eb5b567700e6cdeddce441e612c26934143fae42826b1ae211ebe5093b406621", + "view_sha256": "3b360b5d8b7484751591614e01260aa90a39d17f8bfecc60f4dd733658197f6e" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 491, + "fields": [ + { + "path": "actions", + "shape": [ + 491, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 492, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 492, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 492, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 492, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 492, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 492, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "5caa1d4c56b940c2ae90fc92fc67561e2d112bd44210b4d5ae5cbad3a76b2361", + "source_sha256": "1cba68f654a167937909702a91b7efed93e5da8e6403105fbdf075da982b1489", + "view_sha256": "cc98d993ae03987b80b7993250c848843802cbf81a8d6725783061ed2f40d41b" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 567, + "fields": [ + { + "path": "actions", + "shape": [ + 567, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 568, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 568, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 568, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 568, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 568, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 568, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "13e121637efab71cd20182a542a5e46628f385335102f7900507154d4823749f", + "source_sha256": "43eabbea916e5668879515024b0d658b44fbdbf827d5e9479773ca46a3eb12d6", + "view_sha256": "30c3a56b8e0f3194bd459807591fefef9f33a02f03bea795ac97b335d35c1f24" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 483, + "fields": [ + { + "path": "actions", + "shape": [ + 483, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 484, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 484, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 484, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 484, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 484, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 484, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8ff206086b2cad99c552c434ba39ae5e7a45d6993cad88c35dd8f28f0bcb7c69", + "source_sha256": "30618266169e941b50bdabe700f1d6ecd1f2035bb238ffc8c82b372ce5a26d1b", + "view_sha256": "56dfb836e5c6164798382e836cc11a29aaebb8ffcc44aa9bfb2fc181fcf7206c" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 529, + "fields": [ + { + "path": "actions", + "shape": [ + 529, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 530, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 530, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 530, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 530, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 530, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 530, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "07490059ab573c430821ff9ea915b78abcea8b62670ee558ff745ec9d1dc1d3a", + "source_sha256": "508a68ad2be19d10274cecf604fac84d9413895178dab4db1486afa522134104", + "view_sha256": "4e13ff5539507471160e43835ff9dff55af83a07d35dbca0026ded46238f57c8" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 562, + "fields": [ + { + "path": "actions", + "shape": [ + 562, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 563, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 563, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 563, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 563, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 563, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 563, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ff67881accd95e549a9336fac8fcdaa4bac246a6d15996c0f1478332c347269e", + "source_sha256": "aa0e67f8cd34eb17b37711ef1984f0bb6d160925d2c661ddfcc7248ba378ba9c", + "view_sha256": "245ab0a7378f2680acf08402ddfc5cff23e3c28a0dabab7f3d83624c7de5db61" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 467, + "fields": [ + { + "path": "actions", + "shape": [ + 467, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 468, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 468, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 468, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 468, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 468, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 468, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "3849236e3db828e4e8ee7de1ad0c8483a5c725ba783af749bbde551b52af686f", + "source_sha256": "e92b7ec94145e282849c74cf59d2a74e5f3a819932e1422f956e57df410e2e6f", + "view_sha256": "e2d1e2828addc37ffacc03e8ced863b1f7e233be15cb82a640d00061cd2e7c65" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 616, + "fields": [ + { + "path": "actions", + "shape": [ + 616, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 617, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 617, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 617, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 617, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 617, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 617, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2190acadb69eb7cece24c181e45db2f81df03a305bb6727122fa369c74e55bfb", + "source_sha256": "c034e9c3b9053d81640ac37d74132445408661d92d1f7bc33bfb85a08766470e", + "view_sha256": "ee3ca2e208b884873a8d20505bae5149651fa159b7dbb57b078eb26f68c30524" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 503, + "fields": [ + { + "path": "actions", + "shape": [ + 503, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 504, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 504, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 504, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 504, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 504, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 504, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6eb03eb670dca01c12d1bed340cb6dbc5759fa35b03a6114e593b5a1a363684f", + "source_sha256": "cc068d0cae807b8794d2415ca6dcb33bb120a64110a1ded3162585a67d6d4542", + "view_sha256": "b02bfee14836b7ce35740628b37aa82180679dd241b8f4e1d4c27a33eb11c952" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 797, + "fields": [ + { + "path": "actions", + "shape": [ + 797, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 798, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 798, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 798, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 798, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 798, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 798, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "de58982a53304ee9d2634e36521c63b49bd94e695cae4e12576a62db73e7559f", + "source_sha256": "e1f73d54a63e3e1329d73a450805f560b8b33ed53516eac63248f9caa2a771a3", + "view_sha256": "3f2dc0ab9f7896d6ccb73693b647289631140d0d392951af328bf9a4d76882d4" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 468, + "fields": [ + { + "path": "actions", + "shape": [ + 468, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 469, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 469, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 469, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 469, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 469, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 469, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6b6a8c1dc700317c47c09b4c2cb964910813e43a0472aa33fb500f98323b4d84", + "source_sha256": "534c4586f76adc89478545de89e03c1aae490e0933aa270aa59b919fa2b07238", + "view_sha256": "74bd697ff20e2425aa47be4f9fb7a867a422ed5cdbb65faa6960c63e30ed65d8" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 512, + "fields": [ + { + "path": "actions", + "shape": [ + 512, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 513, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 513, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 513, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 513, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 513, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 513, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "f16585322e610da47a5b04c343b1dabc8409d47ed07ee0b86e5d95edc6d0c555", + "source_sha256": "fc1a2c37895076783cb827c62fe5160cd930d285aa89cd09648671702a0c7f27", + "view_sha256": "a0f11094a66993e8e8b05d7bc4dc06643e719f91b8f5f3c08ef495530fcbfff8" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 537, + "fields": [ + { + "path": "actions", + "shape": [ + 537, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 538, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 538, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 538, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 538, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 538, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 538, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "07e516f86775a9118adb7ff0c28682f88bcdf26b4c8c52c8315d439902ab8e5f", + "source_sha256": "92cfe03a37d2096575c34da46f287b4b0d70c578fee19288c5cef739a8aae6c0", + "view_sha256": "7b78c36b7cc3725a82b125ed38928a2c8bce06c2deae54ff1993487f9c65fbf7" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 552, + "fields": [ + { + "path": "actions", + "shape": [ + 552, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 553, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 553, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 553, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 553, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 553, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 553, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "75c7c380394ff639b82d8d853a45858cd6ccdde257785e1b173c236eb46b0f23", + "source_sha256": "f19edb0df2a44ad9c2a33913de1ae71580eeaa4510de6f5c10efbafb39af37bc", + "view_sha256": "d4b6da3746a9c938cd42db129107ff15531271eb3543a9147ce7ff90db250b8b" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 507, + "fields": [ + { + "path": "actions", + "shape": [ + 507, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 508, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 508, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 508, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 508, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 508, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 508, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e56ff6a16ccc1bd9b52dd279b2c5a12689cfb1506133e6506a50428af0242c09", + "source_sha256": "0074e834973cc73eb42aff4bbbc36dfc20cbf90d84f054afcf89303231e97f0a", + "view_sha256": "18691a89db690dddddc01f12b677a28d41cae4b857716c6f6a1d03b385e0499a" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 578, + "fields": [ + { + "path": "actions", + "shape": [ + 578, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 579, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 579, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 579, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 579, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 579, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 579, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "93254118160d0253f544853ccd0087414c4b6e75da6e1b990f480bbc651791b0", + "source_sha256": "15c0afe19710f77f81aa6871d20b942acafcaf60a0ea2a6edd4d17e4789b9111", + "view_sha256": "ef20d71ab91677a20d96cc1f23ee0dd1d2da0da9d40d90ce9747cb8b02477d83" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/environment.lock @@ -0,0 +1,249 @@ +absl-py==2.4.0 +accelerate==1.13.0 +addict==2.4.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.13.5 +aiosignal==1.4.0 +annotated-types==0.7.0 +anyio==4.13.0 +anytree==2.13.0 +asttokens==3.0.1 +async-timeout==5.0.1 +attrs==26.1.0 +av==15.1.0 +blinker==1.9.0 +casadi==3.7.2 +certifi==2026.4.22 +cffi==2.0.0 +charset-normalizer==3.4.7 +click==8.3.3 +cloudpickle==3.1.2 +cmake==4.1.3 +coacd==1.0.11 +colorama==0.4.6 +colorlog==6.10.1 +comm==0.2.3 +ConfigArgParse==1.7.5 +contourpy==1.3.2 +cuda-bindings==12.9.4 +cuda-pathfinder==1.5.4 +cycler==0.12.1 +dacite==1.9.2 +dash==4.1.0 +dataclasses-json==0.6.7 +datasets==4.8.5 +decorator==5.2.1 +deepdiff==8.6.2 +Deprecated==1.3.1 +diffusers==0.35.2 +dill==0.4.1 +docstring_parser==0.18.0 +draccus==0.10.0 +einops==0.8.2 +embreex==4.4.0 +etils==1.13.0 +evdev==1.9.3 +exceptiongroup==1.3.1 +executing==2.2.1 +Farama-Notifications==0.0.6 +fast_simplification==0.1.13 +fastjsonschema==2.21.2 +filelock==3.29.0 +Flask==3.1.3 +fonttools==4.63.0 +freetype-py==2.5.1 +frozenlist==1.8.0 +fsspec==2026.2.0 +genesis-world @ file:///data/gck/genesis-world +git-filter-repo==2.47.0 +gitdb==4.0.12 +GitPython==3.1.50 +glfw==2.10.0 +gs-madrona==0.0.5 +gstaichi==3.3.0 +gym==0.26.2 +gym-notices==0.1.0 +gymnasium==1.3.0 +h11==0.16.0 +h5py==3.16.0 +hf-xet==1.5.0 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface-hub==0.35.3 +idna==3.15 +ImageIO==2.37.3 +imageio-ffmpeg==0.6.0 +importlib_metadata==9.0.0 +importlib_resources==7.1.0 +inquirerpy==0.3.4 +ipython==8.39.0 +ipywidgets==8.1.8 +itsdangerous==2.2.0 +jedi==0.20.0 +Jinja2==3.1.6 +joblib==1.5.3 +jsonlines==4.0.0 +jsonschema==4.26.0 +jsonschema-specifications==2025.9.1 +jupyter_core==5.9.1 +jupyterlab_widgets==3.0.16 +kiwisolver==1.5.0 +lazy-loader==0.5 +lerobot==0.4.4 +libigl==2.6.2 +llvmlite==0.47.0 +loguru==0.7.3 +lxml==6.1.0 +manifold3d==3.4.1 +-e git+ssh://git@github.com/HeegerGao/maniladder.git@f6eed17496816bb41ce484f2d7580990a908d3e6#egg=maniladder +mapbox_earcut==2.0.0 +markdown-it-py==4.2.0 +MarkupSafe==3.0.3 +marshmallow==3.26.2 +matplotlib==3.10.9 +matplotlib-inline==0.2.2 +mdurl==0.1.2 +mergedeep==1.3.4 +moviepy==2.2.1 +mpmath==1.3.0 +msgspec==0.21.1 +mujoco==3.8.1 +multidict==6.7.1 +multiprocess==0.70.19 +mypy_extensions==1.1.0 +nbformat==5.10.4 +nest-asyncio==1.6.0 +networkx==3.4.2 +ninja==1.13.0 +nlopt==2.10.0 +numba==0.65.1 +numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1747544640217/work/dist/numpy-2.2.6-cp310-cp310-linux_x86_64.whl#sha256=d6d964caeef85d00073d27cd62b46883d275b3d8162f723f0fcabbd0b3cc3f9d +nvidia-cublas-cu12==12.8.4.1 +nvidia-cuda-cupti-cu12==12.8.90 +nvidia-cuda-nvrtc-cu12==12.8.93 +nvidia-cuda-runtime-cu12==12.8.90 +nvidia-cudnn-cu12==9.10.2.21 +nvidia-cufft-cu12==11.3.3.83 +nvidia-cufile-cu12==1.13.1.3 +nvidia-curand-cu12==10.3.9.90 +nvidia-cusolver-cu12==11.7.3.90 +nvidia-cusparse-cu12==12.5.8.93 +nvidia-cusparselt-cu12==0.7.1 +nvidia-nccl-cu12==2.27.5 +nvidia-nvjitlink-cu12==12.8.93 +nvidia-nvshmem-cu12==3.4.5 +nvidia-nvtx-cu12==12.8.90 +open3d==0.19.0 +opencv-python==4.13.0.92 +opencv-python-headless==4.12.0.88 +OpenEXR==3.4.11 +orderly-set==5.5.0 +packaging==25.0 +pandas==2.3.3 +parso==0.8.7 +pexpect==4.9.0 +pfzy==0.3.4 +pillow==11.3.0 +pin==4.0.0 +pip @ file:///home/task_177498883471825/croot/pip_1774988882575/work +platformdirs==4.9.6 +plotly==5.24.1 +polyscope==2.6.1 +proglog==0.1.12 +prompt_toolkit==3.0.52 +propcache==0.5.2 +protobuf==6.33.6 +psutil==7.2.2 +ptyprocess==0.7.0 +pure_eval==0.2.3 +py-cpuinfo==9.0.0 +py-spy==0.4.2 +pyarrow==24.0.0 +pycollada==0.9.3 +pycparser==3.0 +pydantic==2.13.4 +pydantic_core==2.46.4 +PyGEL3D==0.6.1 +pyglet==2.1.14 +pygltflib==1.16.0 +Pygments==2.20.0 +pymeshlab==2025.7.post1 +pynput==1.8.2 +PyOpenGL==3.1.10 +pyparsing==3.3.2 +pyperclip==1.11.0 +PyQt6==6.11.0 +PyQt6-Qt6==6.11.0 +PyQt6_sip==13.11.1 +pyquaternion==0.9.9 +pyserial==3.5 +pysplashsurf==0.12.0.2 +python-dateutil==2.9.0.post0 +python-dotenv==1.2.2 +python-xlib==0.33 +pytransform3d==3.15.0 +pytz==2026.2 +pyuipc @ file:///tmp/claude-1005/-mnt4-gck-maniladder/9f005e67-04f6-4368-bd0e-9f40896c7dbf/scratchpad/pyuipc_dl/pyuipc-0.0.25-cp310-cp310-manylinux_2_34_x86_64.whl#sha256=76ff13554e1971ea4401db2c875369cf32352ae3a5a4c398c45193231b5cbf00 +PyYAML==6.0.3 +pyyaml-include==1.4.1 +referencing==0.37.0 +regex==2026.5.9 +requests==2.34.2 +rerun-sdk==0.26.2 +retrying==1.4.2 +rich==14.3.4 +rpds-py==0.30.0 +rtree==1.4.1 +safetensors==0.7.0 +sapien==3.0.3 +scikit-image==0.25.2 +scikit-learn==1.7.2 +scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy-split_1739790642651/work/dist/scipy-1.15.2-cp310-cp310-linux_x86_64.whl#sha256=9e52bad6c3294d1a5b04a13632118ca2157130603c6c018c2d710162b223b27e +sentry-sdk==2.60.0 +setuptools==80.10.2 +shapely==2.1.2 +six==1.17.0 +smmap==5.0.3 +stack-data==0.6.3 +svg.path==7.0 +sympy==1.14.0 +tenacity==9.1.4 +termcolor==3.3.0 +tetgen==0.8.4 +threadpoolctl==3.6.0 +tifffile==2025.5.10 +timm==1.0.27 +toml==0.10.2 +torch==2.10.0 +torchaudio==2.11.0 +torchcodec==0.10.0 +torchvision==0.25.0 +tqdm==4.67.3 +traitlets==5.15.0 +transforms3d==0.4.2 +trimesh==4.12.2 +triton==3.6.0 +typeguard==4.5.2 +typing-inspect==0.9.0 +typing-inspection==0.4.2 +typing_extensions==4.15.0 +tyro==1.0.13 +tzdata==2026.2 +urllib3==2.7.0 +vhacdx==0.0.10 +viser==1.0.27 +vtk==9.6.1 +wandb==0.24.2 +wcwidth==0.7.0 +websockets==16.0 +Werkzeug==3.1.8 +wheel==0.46.3 +widgetsnbextension==4.0.15 +wrapt==2.1.2 +xxhash==3.7.0 +yarl==1.23.0 +yourdfpy==0.0.60 +z3-solver==4.16.0.0 +zipp==3.23.1 +zstandard==0.25.0 diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..95dd4f82e204a9dbe5732ed5986a93fdb2969f8c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/findings.md @@ -0,0 +1,48 @@ +# Task-local findings for the simpler candidate + +Current bundle: no added downward hold; five-step cached trajectory tracking with empirical joint feedback. The earlier sections below retain the development history. + +All data came from this task's 20 authorized D20 demonstrations and trusted API exploration. No other task artifacts, simulator source, direct resets, seeds, hidden scene state, network services, or neural weight updates were used. Original actual demonstration inspection is retained in ../demo_analysis.md and ../evidence/inspection_indices.json. The original preparation report is historical, not a claim about the final controller. + +| Slot | Controller/test | Final native step | Native success | +|---|---|---:|---| +| 1 | Original RGB/proprio action retrieval | 850 | None | +| 2 | Retrieval with bounded lookahead | 551 | False | +| 3 | Lookahead plus initial-scene preference | 550 | False | +| 4 | Empirical joint-feedback trajectory tracker | 492 | True | +| 5 | Unchanged tracker repeat | 434 | True | +| 6 | Independent per-step tracker rehearsal | 850 | False | +| 7 | Explicit five-step cadence; long reference | 461 | False | +| 8 | Soft preference for shorter references | 386 | False | +| 9 | Slower phase progression | 612 | True | +| 10 | Unchanged slower tracker | 850 | False | +| 11 | End-of-reference regrasp attempt | 850 | False | +| 12 | Short references and bounded regrasp | 850 | False | +| 13 | Removed empirical arm correction | 850 | False | +| 14 | Downward hold before side grasp | 417 | True | +| 15 | Unchanged final-controller repeat | 850 | False | +| 16 | Unchanged final-controller repeat | 850 | False | + +Slots 2, 3, 7 and 8 ended after observed stalls or loss of contact, before the horizon. Their unsuccessful endpoints do not prove that every possible continuation would fail. Each slot used a fresh placement; these are exploratory comparisons, not controlled ablations or an unbiased success-rate estimate. + +## Localization and pose +Initial qpos is identical across demonstrations, so scene selection uses the first legal post-hold RGB. Current RGB and qpos re-localize within a short reference window. Fine pose differences can still be lost by downsampling. Long references 02 and 13 produced major retreats in exploration; the final policy selects among the other 18 references. All 20 still supply local empirical response samples. This does not label the source demonstrations as unsuccessful. + +## Timing, grasp, and recovery +Direct action retrieval stalled on nearly static handle frames. Bounded phase progression escaped those traps but could outrun contact. A slower variant succeeded in slot9, yet failed on other placements. The added-hold candidate tested in slots14-16 retains the faster tracker that succeeded in slots4/5, makes its five-step decision cadence explicit, and adds a 25-native-step downward hold before a demonstration-derived hand-closing transition. Slot14 succeeded with this configuration. Finger posture feedback is retained. There is no calibrated contact, latch-release, handle-release, or completion detector. + +Partial opening and hand/handle separation were common failures. A one-time late regrasp was explored in slots11-13 without native success and is not retained. Removing empirical arm correction also failed in slot13 and is not retained. The added-hold candidate tested in slots14-16 cannot guarantee recovery after a missed grasp; it may continue reference commands after contact is lost. + +## Program and audit limitations +An initial API-wrapper KeyError after the first action in slot1 was corrected while resuming the same slot. Its first submitted action was deterministically reconstructed from the retained observation and baseline source; later actions were recorded. Two transient diagnostic views in slot1 (steps214/307) were displayed but their temporary files were later overwritten; nearby milestone observations at200/300 are retained. Do not claim those exact transient files remain on disk. + +For interactive slots1-8, actions.npy records submitted vectors and can include unexecuted trailing commands in the final chunk after early native termination. From slot9 onward, actions.npy uses the API executed count, and submitted_actions.npy records requests separately. Native step counts include the runner-owned hold. Milestone RGB/proprio observations and final views are saved in ../evidence/epNN. Independent rehearsal action traces are not returned by this API; returned hashes/results and final legal camera observations are retained instead. + +Slot6 completed independently and was valid/runnable, but native success was false. Its hash was 623de3f0735c6530e0e8990484319b74517848570e632b7aaddd8d990a43b04e. A separate visible-false submission was rejected because native scores cannot be overwritten; the native result was preserved. No other score is inferred from images when native feedback is present. + +## Final rehearsal scoring +Slots17-20 are reserved for independent rehearsals. Each API call snapshots the exact submitted bundle; materially different candidates may be separately rehearsed and selected by the runner. Their results are not known at snapshot time and must be taken from runner receipts / the workspace audit, not invented here. Use native sparse feedback when returned. If absent, the preregistered visible rule requires images to unambiguously show the upper latch moved toward the post, handle undone, and door swung open; ambiguous evidence is false. A narrow gap alone was treated conservatively as incomplete/ambiguous. + + +## Alternative submitted after slot17 +The added-hold bundle completed slot17 independently but native success was false. This subsequent bundle removes the extra downward hold and retains the simpler trajectory tracker, empirical joint correction, and explicit five-step cadence. Reference selection still excludes paths longer than650steps. The related tracker succeeded in interactive slots4/5, but those were not independent tests of this exact packaged version. The historical table above describes the tested variants at those slots, including the added-hold variant at14-16. Independent results for this alternative must come from its own runner receipts. diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..a47f761cd8995e5f5aa34233fe5c37e186334468 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/freeze_manifest.json @@ -0,0 +1,90 @@ +{ + "files": { + "bank_provenance.json": "a866ca20da074039b0ca778517f239529b74e2f36b339aea73dd24b9e2f15268", + "controller.py": "f432c2697ce304265a2ac3c87bccdd5a1e3907085d8d6121c3c7734c89327ad8", + "demo_bank.npz": "7722f878093806e09f4dee9a3bde09c2f7c10041289996430be4e9f6223a2655", + "demo_manifest.json": "3e10c585d25c80b066ba7de46202e9faacc893f56b5dede50ad1f230a8ece337", + "demonstrations_readonly/demo_00.h5": "7edab06ee1a33bd59b0799f3f08beffc4aa2e593a99d4c6ebb14266afbdf67c5", + "demonstrations_readonly/demo_01.h5": "0c38d9aecdc8f3b5c98f2e133a8e5df62904d4b7992093493408698335fc0127", + "demonstrations_readonly/demo_02.h5": "97ddf520907299646899a10d67a558ddbcea59be98a16b730321d5543644a549", + "demonstrations_readonly/demo_03.h5": "1a7955b2a98698c21a7d8846b63177b9a01e31fa86861f9c9aca71bce549411f", + "demonstrations_readonly/demo_04.h5": "3b360b5d8b7484751591614e01260aa90a39d17f8bfecc60f4dd733658197f6e", + "demonstrations_readonly/demo_05.h5": "cc98d993ae03987b80b7993250c848843802cbf81a8d6725783061ed2f40d41b", + "demonstrations_readonly/demo_06.h5": "30c3a56b8e0f3194bd459807591fefef9f33a02f03bea795ac97b335d35c1f24", + "demonstrations_readonly/demo_07.h5": "56dfb836e5c6164798382e836cc11a29aaebb8ffcc44aa9bfb2fc181fcf7206c", + "demonstrations_readonly/demo_08.h5": "4e13ff5539507471160e43835ff9dff55af83a07d35dbca0026ded46238f57c8", + "demonstrations_readonly/demo_09.h5": "245ab0a7378f2680acf08402ddfc5cff23e3c28a0dabab7f3d83624c7de5db61", + "demonstrations_readonly/demo_10.h5": "e2d1e2828addc37ffacc03e8ced863b1f7e233be15cb82a640d00061cd2e7c65", + "demonstrations_readonly/demo_11.h5": "ee3ca2e208b884873a8d20505bae5149651fa159b7dbb57b078eb26f68c30524", + "demonstrations_readonly/demo_12.h5": "b02bfee14836b7ce35740628b37aa82180679dd241b8f4e1d4c27a33eb11c952", + "demonstrations_readonly/demo_13.h5": "3f2dc0ab9f7896d6ccb73693b647289631140d0d392951af328bf9a4d76882d4", + "demonstrations_readonly/demo_14.h5": "74bd697ff20e2425aa47be4f9fb7a867a422ed5cdbb65faa6960c63e30ed65d8", + "demonstrations_readonly/demo_15.h5": "a0f11094a66993e8e8b05d7bc4dc06643e719f91b8f5f3c08ef495530fcbfff8", + "demonstrations_readonly/demo_16.h5": "7b78c36b7cc3725a82b125ed38928a2c8bce06c2deae54ff1993487f9c65fbf7", + "demonstrations_readonly/demo_17.h5": "d4b6da3746a9c938cd42db129107ff15531271eb3543a9147ce7ff90db250b8b", + "demonstrations_readonly/demo_18.h5": "18691a89db690dddddc01f12b677a28d41cae4b857716c6f6a1d03b385e0499a", + "demonstrations_readonly/demo_19.h5": "ef20d71ab91677a20d96cc1f23ee0dd1d2da0da9d40d90ce9747cb8b02477d83", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "findings.md": "9bdba9bda0d1e88a25512633d4ae7801985f5c5dfd58319ec717f769ab6ea2f3", + "handoff.md": "c9373a92263ae4f1e9028877550ced35350a07b6306c7bb4a64b4d304347fe36", + "model_tool_manifest.yaml": "257a34af94b743bff60b9073b857789c966eab87cab3018daf1a252ee4afd21d", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "response_bank.npz": "2b1a54b927f11e6d3882446b52b4997715eaf5f19f1f38c72b097cc366bb6eb3", + "response_bank_provenance.json": "caaf8d512da312fb0a5f771760316b8ed363cab0763e1afb2af13fff72f92b3e", + "skills.md": "3d0005e6567aacff4e8409fbe6e47b49c8a96c4bbfcf3b7b4842e7e5ce9e3533", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "3c872d21054f5de08c5d590651895d900d2b14dbf69496dee5c37940b2b7e3a6", + "exploration_ledger_hash": "b9030aa54f4812083b6b2beefacd0679c1de5a73787ab5a72d9a32672b1c19ed", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "episode": 6, + "bundle_hash": "623de3f0735c6530e0e8990484319b74517848570e632b7aaddd8d990a43b04e", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "af0030659f849f69bf2537b2f138985dfa639a76720000268a4d0277981c2975", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "3c872d21054f5de08c5d590651895d900d2b14dbf69496dee5c37940b2b7e3a6", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "3c872d21054f5de08c5d590651895d900d2b14dbf69496dee5c37940b2b7e3a6", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "3c872d21054f5de08c5d590651895d900d2b14dbf69496dee5c37940b2b7e3a6", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..74a3cc46838d40527cd32b88c09f9c9b8fb232f6 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/handoff.md @@ -0,0 +1,13 @@ +# Offline handoff + +Task: DexOpenDoor-v1. Slide the upper latch toward the side post, undo the handle, and swing the door open. + +Runtime files: controller.py, demo_bank.npz, response_bank.npz. Keep the two data files beside the controller. Imports are Python standard library, NumPy and OpenCV only. No API, network, development agent, external model, or simulator is used by the frozen program. The runner separately adds the verified demonstration manifest, readonly authorized demonstrations, and common environment lock. + +Interface: reset_episode() clears every per-episode phase/cadence/press state. act(obs) accepts legal RGB, agent/qpos and step_id, returning one finite 22-component normalized delta vector. It returns None only at step_id>=850. The initial hold is runner-owned and consumes step1; the controller adds no startup hold. Five native steps share each newly computed action, and legal observations drive the next decision. + +The program uses a fixed demonstration descriptor bank, local image/joint phase matching, bounded forward reference progress, and local least-squares joint-response correction. Reference paths longer than 650 steps are not selected, but all 20 authorized demonstrations remain in the response bank. This alternative removes the added downward press and follows the demonstrated handle/grasp timing directly. It retains the five-step decision cadence and empirical joint feedback. See findings.md for successes, failures and limitations; see response_bank_provenance.json for the non-neural response data construction. + +The bundle is documented before the final independent rehearsal stage (slots17-20). Final scores and selected bundle hash come from API.rehearse/API.freeze receipts and the workspace audit. Do not confuse earlier interactive successes with independent success. Native scores are authoritative when supplied; otherwise ambiguous visible evidence is false. + +Workspace audit paths (not runtime dependencies): ../demo_analysis.md, ../evidence/exploration_log.md, ../evidence/development_results.json, ../evidence/rehearsalNN*.json/jpg/pkl, and ../versions/. Behavior must not change after the final rehearsal. After exactly 20 charged slots, freeze through the trusted API and stop development. No evaluation outputs may be accessed. diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6e02425d800cfffec4da0f54225b466fb1248d02 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,124 @@ +{ + "schema": "task-local-compiled-v1", + "task_id": "DexOpenDoor-v1", + "stage": "simpler alternative entering independent slots18-20 after native failure in17", + "authorized_data": { + "demo_ids": [ + "demo_00", + "demo_01", + "demo_02", + "demo_03", + "demo_04", + "demo_05", + "demo_06", + "demo_07", + "demo_08", + "demo_09", + "demo_10", + "demo_11", + "demo_12", + "demo_13", + "demo_14", + "demo_15", + "demo_16", + "demo_17", + "demo_18", + "demo_19" + ], + "other_task_data": false, + "legal_exploration": "trusted API slots1-16; see development_results.json" + }, + "model": { + "coding_assistant": "OpenAI Codex; exact model revision not exposed", + "neural_finetuning": false, + "pretrained_weights_loaded": [], + "runtime_neural_model": false + }, + "policy": { + "kind": "deterministic nonparametric trajectory tracking with local empirical joint feedback", + "runtime_files": [ + "controller.py", + "demo_bank.npz", + "response_bank.npz" + ], + "entrypoints": [ + "reset_episode()", + "act(obs)" + ], + "native_horizon": 850, + "native_control_hz": 20, + "decision_interval_native_steps": 5, + "action_width": 22, + "action_bounds": [ + -1, + 1 + ], + "action_order": "xyz translation, xyz rotation, sixteen dex joint deltas", + "initial_hold": "runner owned; native step1", + "runtime_external_reads": false, + "network": false, + "reference_selection": "first legal RGB, paths<=650steps; no scene IDs or seeds", + "parameter_provenance": "authorized demonstrations and manually reviewed legal exploration; no neural optimization", + "pregrasp_hold_native_steps": 0 + }, + "runtime_dependencies": { + "python": "3.10.20", + "numpy": "2.2.6", + "opencv-python": "4.12.0", + "environment": "runner-provided common lock" + }, + "tools_actually_used": [ + "worker_api.API budget_status/read_demo/next_episode/latest_observation/execute_actions/finish_episode/rehearse/score_rehearsal", + "local Python/NumPy/OpenCV/Pillow for legal observation analysis and evidence", + "local shell tools for own files; no external network" + ], + "provenance_files": [ + "bank_provenance.json", + "response_bank_provenance.json" + ], + "validation": { + "interactive_native_success_slots": [ + 4, + 5, + 9, + 14 + ], + "final_controller_interactive_success_slots": [], + "independent_before_final": [ + { + "episode": 6, + "valid": true, + "native_success": false + }, + { + "episode": 17, + "valid": true, + "native_success": false, + "bundle_hash": "af0030659f849f69bf2537b2f138985dfa639a76720000268a4d0277981c2975" + } + ], + "final_rehearsals": "slots18-20 for this exact alternative; runner receipts authoritative", + "simulators_created_or_imported": false, + "related_earlier_tracker_success_slots": [ + 4, + 5 + ] + }, + "scoring": "Native sparse feedback when present. Otherwise unambiguous visible public-task completion only; ambiguity false.", + "limitations": [ + "Pose descriptor quantization and contact-state ambiguity", + "Empirical response may be inaccurate near contact or uncommon postures", + "No calibrated release/completion detector or retained proven regrasp", + "Exploration comparisons use different placements; no unbiased generalization estimate" + ], + "runtime_sha256": { + "controller.py": "f432c2697ce304265a2ac3c87bccdd5a1e3907085d8d6121c3c7734c89327ad8", + "demo_bank.npz": "7722f878093806e09f4dee9a3bde09c2f7c10041289996430be4e9f6223a2655", + "response_bank.npz": "2b1a54b927f11e6d3882446b52b4997715eaf5f19f1f38c72b097cc366bb6eb3" + }, + "runner_supplied": [ + "verified demonstration manifest", + "readonly authorized demonstration files", + "common environment lock" + ] +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/policy_runner.py @@ -0,0 +1,25 @@ +"""Frozen-program entry point; no development agent and no reset capability.""" +import importlib.util +import sys + +sys.path.insert(0,'/artifact') +sys.path.insert(0,'/') +from worker_api import API + + +def main(): + spec=importlib.util.spec_from_file_location('controller','/artifact/controller.py') + module=importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + module.reset_episode() + api=API() + result=api.latest_observation() + while not (result['terminated'] or result['truncated'] or result['horizon_reached']): + obs=dict(result['observation'],step_id=result['step_id']) + action=module.act(obs) + if action is None:break + response=api.execute_actions([action]) + result=response['steps'][-1] + + +if __name__=='__main__':main() diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/response_bank_provenance.json b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/response_bank_provenance.json new file mode 100644 index 0000000000000000000000000000000000000000..dada211000817727f2b2e1bb603e3c92ba8f23a0 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/response_bank_provenance.json @@ -0,0 +1,21 @@ +{ + "source": "Authorized task-local demo_bank.npz, itself compiled via API.read_demo for demo_00..demo_19", + "source_sha256": "7722f878093806e09f4dee9a3bde09c2f7c10041289996430be4e9f6223a2655", + "transitions": "q[t+1,:7]-q[t,:7], excluding last bank row of every demo; actions[t,[0,1,2,5]]", + "shapes": { + "q": [ + 11018, + 7 + ], + "dq": [ + 11018, + 7 + ], + "a": [ + 11018, + 4 + ] + }, + "neural_weights": false, + "other_task_data": false +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..08515e6f26f3a67dd82d3b47c75d2a16e047f6b3 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/skills.md @@ -0,0 +1,7 @@ +# Demonstration-derived controller skills + +1. Select a reference using first post-hold four-camera RGB, excluding paths longer than650native steps. Re-localize using current images and joint posture in a short phase window. +2. Follow demonstrated upper-latch approach and manipulation with bounded empirical arm and finger corrections. There is no hidden release state or calibrated contact detector. +3. Follow the demonstrated side-handle depression and finger-closing sequence. This version adds no extra downward hold or late regrasp. +4. Continue demonstrated pulling motions with joint feedback. Recompute every five native steps and hold commands between decisions. Native control remains20Hz, action width22, bounds[-1,1], horizon850, including the runner-owned initial hold. +5. Bounded phase progression reduces static-label stalls but can advance despite missed contact. No proven recovery or policy success detector is present. diff --git a/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DexOpenDoor-v1/frozen/worker_api.py @@ -0,0 +1,81 @@ +"""Standalone worker client; safe to mount without the runner package.""" +import base64 +import json +import socket +import struct +import uuid +import os +from pathlib import Path + +import numpy as np + + +def array_hook(value): + if value.get('__array__') is True: + dtype=np.dtype(value['dtype']) + if dtype.kind not in 'bifu':raise ValueError('non-numeric array from service') + raw=base64.b64decode(value['data'],validate=True) + return np.frombuffer(raw,dtype=dtype).reshape(value['shape']).copy() + return value + + +class API: + def __init__(self,socket_path='/rpc/control.sock',demo_root='/demonstrations',manifest='/demo_manifest.json'): + self.socket_path=socket_path + self.demo_root=Path(demo_root) + self.manifest=Path(manifest) + + def call(self,method,arguments=None,request_id=None): + # Caller can persist a request ID before sending. Never automatically retry. + request_id=request_id or str(uuid.uuid4()) + request={'request_id':request_id,'method':method,'arguments':arguments or {}} + if os.environ.get('AGENT_E20_RPC_TOKEN'): + request['token']=os.environ['AGENT_E20_RPC_TOKEN'] + payload=json.dumps(request,allow_nan=False).encode() + if len(payload)>65536:raise ValueError('request too large') + with socket.socket(socket.AF_UNIX,socket.SOCK_STREAM) as s: + s.settimeout(1810);s.connect(self.socket_path) + s.sendall(struct.pack('!I',len(payload))+payload) + def exact(n): + chunks=[] + while n: + chunk=s.recv(min(n,1024*1024)) + if not chunk:raise RuntimeError('RPC interrupted; do not replay action with a new ID') + chunks.append(chunk);n-=len(chunk) + return b''.join(chunks) + length=struct.unpack('!I',exact(4))[0] + if length>64*1024*1024:raise RuntimeError('response too large') + result=json.loads(exact(length),object_hook=array_hook) + if not result['ok']:raise RuntimeError(result['error']) + return result['result'] + + def next_episode(self,request_id=None):return self.call('next_episode',request_id=request_id) + def latest_observation(self):return self.call('latest_observation') + def execute_actions(self,actions,request_id=None): + return self.call('execute_actions',{'actions':np.asarray(actions).tolist()},request_id) + def finish_episode(self):return self.call('finish_episode') + def budget_status(self):return self.call('budget_status') + def rehearse(self,candidate='candidate',request_id=None): + return self.call('rehearse',{'candidate':candidate},request_id) + def score_rehearsal(self,episode,visible_success,evidence): + return self.call('score_rehearsal',{'episode':episode,'visible_success':visible_success,'evidence':evidence}) + def freeze(self):return self.call('freeze') + + def read_demo(self,demo_id,start=0,stop=None,fields=None): + import h5py + manifest=json.loads(self.manifest.read_text()) + if manifest.get('status') not in ('released','released_for_offline_analysis'): + raise RuntimeError('demonstrations not released by trusted preflight') + entries={e['demo_id']:e for e in manifest['episodes']} + if demo_id not in entries:raise ValueError('unauthorized demo ID') + entry=entries[demo_id] + allowed={f['path'] for f in entry['fields']} + fields=sorted(allowed) if fields is None else fields + if not set(fields)<=allowed:raise ValueError('unauthorized demo field') + stop=entry['length']+1 if stop is None else stop + if not isinstance(start,int) or not isinstance(stop,int) or not 0<=start 150) & (hsv[:,:,2] > 70)).astype(np.float32) + color = im.astype(np.float32) / 255. + features.append(cv2.resize(color, (16,16), interpolation=cv2.INTER_AREA).ravel()) + features.append(3 * cv2.resize(color * mask[:,:,None], (24,24), interpolation=cv2.INTER_AREA).ravel()) + return np.concatenate(features).astype(np.float32) + +class Controller: + SPEED=1.6 + ARM_GAIN=.15 + HAND_GAIN=2. + def __init__(self): + with np.load(Path(__file__).with_name('memory.npz'), allow_pickle=False) as data: + self.bank = {key: data[key] for key in data.files} + self.inverse = np.load(Path(__file__).with_name('feedback.npz'))['inverse'] + self.scale = np.tile(np.r_[np.full(7,.20), np.full(16,.35)],2).astype(np.float32) + self.reset_episode() + + def reset_episode(self): + self.t = 0 + self.last_phase = None + self.last_step = None + self.diagnostics = {'status':'reset'} + + def act(self, obs): + self.t += 1 + step = int(obs.get('step_id', self.t)) + obs = obs.get('observation', obs) + if self.last_step is not None and step < self.last_step: + self.reset_episode() + self.last_step = step + # One native step was already consumed by the runner-owned hold. + if step >= int(np.ceil(1559/self.SPEED))+41: + self.diagnostics = {'status':'horizon_stop', 'success_claim':False} + return None + try: + p = obs['proprioception'] + q = np.concatenate([np.asarray(p[k],dtype=np.float32).reshape(-1) for k in QPATHS]) + v = np.concatenate([np.asarray(p[k],dtype=np.float32).reshape(-1) for k in VPATHS]) + if q.shape != (46,) or v.shape != (46,) or not np.isfinite(q).all() or not np.isfinite(v).all(): + raise ValueError('Malformed proprioception') + f = visual_features(obs['rgb']) + except (KeyError, ValueError, TypeError, cv2.error): + self.diagnostics = {'status':'missing_or_invalid_observation'} + return np.zeros(44,dtype=np.float32) + if (step-1)*self.SPEED >= 1559: + a = np.zeros(44,dtype=np.float32) + a[2] = a[24] = .04 + self.diagnostics = {'status':'retract_for_visibility'} + return a + b = self.bank + qcost = np.mean(((b['q']-q)/self.scale)**2,axis=1) + vcost = .025*np.mean(np.minimum((b['v']-v)**2,25),axis=1) + base = qcost + vcost + # Timing resolves stationary/contact phase ambiguity seen in episode 1. + expected = min((step - 1)*self.SPEED, 1558) + base += .5*((b['phase']-expected)/8.)**2 + # Soft continuity inferred from previous observed state, never demo ID or seed. + if self.last_phase is not None: + base += .08*np.minimum(((b['phase']-self.last_phase)/100.)**2,4.) + ids = np.argpartition(base,min(127,len(base)-1))[:128] + visual = np.mean((b['features'][ids]-f)**2,axis=1) + score = base[ids] + 12*visual + j = int(ids[np.argmin(score)]) + if qcost[j] > 4.0 or float(visual[np.argmin(score)]) > .15: + self.diagnostics = {'status':'outside_demo_support', 'qcost':float(qcost[j])} + return np.zeros(44,dtype=np.float32) + self.last_phase = float(b['phase'][j]) + self.diagnostics = {'status':'retrieved_feedback','reference_phase':self.last_phase,'reference_demo':int(b['demo'][j]),'qcost':float(qcost[j]),'success_claim':False} + # Jointly retrieve both robots to preserve the demonstrated coordination. + # Parts are [robot 0: 6 arm + 16 hand, robot 1: 6 arm + 16 hand]. + a = self.SPEED * b['actions'][j].copy() + errors = b['q'][j] - q + for r in range(2): + correction = self.ARM_GAIN * errors[r*23:r*23+7] @ self.inverse[min(int(expected)//4,390),r] + correction = np.clip(correction,-.03,.03) + a[np.array([0,1,2,4])+r*22] += correction + hand_a = np.array([0,1,2,3,12,14,15]) + r*22+6 + hand_q = np.array([11,7,15,19,10,18,22]) + r*23 + a[hand_a] += np.clip(self.HAND_GAIN*errors[hand_q],-.1,.1) + self.diagnostics['pose_error'] = float(np.linalg.norm(errors)) + return np.clip(a,-1.,1.).astype(np.float32) + +_policy = None + +def reset_episode(): + global _policy + if _policy is not None: + _policy.reset_episode() + +def act(obs): + global _policy + if _policy is None: + _policy = Controller() + return _policy.act(obs) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/demo_analysis.md b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/demo_analysis.md new file mode 100644 index 0000000000000000000000000000000000000000..2ec87429a0acc19ad8d7d6aa9e283d238bee4675 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/demo_analysis.md @@ -0,0 +1,89 @@ +# Offline D20 demonstration analysis + +Status: preparation only; draft controller, not rehearsed, not frozen, no success estimate. Zero exploration episodes or environment calls. No simulator, hidden state, task expert, external solutions, network retrieval, neural fitting, or pretrained weight changes were used. + +## Authorized sources and inspection ledger + +Read `/task_contract.json`, `/demo_manifest.json`, and standalone `/worker_api.py`. Manifest contains exactly demo_00 through demo_19. RGB contact sheets were obtained with API.read_demo; numerical analysis also uses that API. The memory builder reads only the same sanitized HDF5 fields directly. Frame indexing below is zero-based observation indexing; action t is associated with observation t, with one extra terminal observation. That association follows array lengths and is an assumption about recording alignment, not independently verified environment timing. + +Each listed frame was visually inspected in **both top_camera and front_camera**, via evidence/demo_XX.jpg. All action rows and all four proprioception arrays were read and numerically analyzed for every demo. Human inspection is distinct from machine feature extraction; the latter is recorded in evidence/machine_access.json. The builder reads RGB in blocks of 98 frames for HDF5 efficiency, spanning frames 0 through length-1, but retains features only for the listed stride-four indices plus the final action index. + +|Demo ID|Actions|Visually inspected observation frames|Observed progression| +|---|---:|---|---| +|demo_00|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_01|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_02|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_03|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_04|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_05|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_06|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_07|1560|0, 390, 780, 1170, 1560|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_08|1558|0, 389, 779, 1168, 1558|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_09|1558|0, 389, 779, 1168, 1558|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_10|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_11|1560|0, 390, 780, 1170, 1560|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_12|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_13|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_14|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_15|1560|0, 390, 780, 1170, 1560|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_16|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_17|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_18|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| +|demo_19|1559|0, 389, 779, 1169, 1559|Scattered blocks → partial line → apparent final line, hands occlude some blocks| + +Additional visual inspection: demo_00 frames **200 and 1559**, all five cameras (front_camera, left_camera, robot_camera_0, robot_camera_1, top_camera), saved in evidence/additional_views.jpg. Top-camera panels in that additional sheet alone were rotated 90 degrees clockwise for display; controller inputs are never rotated. In all other sheets top frames retain original orientation and are resized proportionally. + +## Observable behavior and completion + +All 20 initial views show eight brightly colored blocks in two groups around a red table line, with small apparent position variation and the same broad layout. Images show red, orange, yellow, green, cyan, blue, magenta and purple blocks. By the quarter and halfway frames, increasing numbers have moved toward the line. By the three-quarter frames, the outer green/purple pair remains away from the central row in these views. Terminal views show a compact row along the target, but the hands overlap several blocks. In demo_00's terminal left-camera image, the row is especially clear; wrist cameras show close-up blocks near the red stripe rather than a full unobstructed row. + +These images support apparent line formation in all trajectories; they do not establish simulator success, exact eight-block tolerances, stable release, or post-terminal persistence. No reward, done, success, object pose, depth, segmentation truth, or contact state is available. The final action is still nonzero (including positive z), so demonstration termination is not a generic zero-action completion cue. No reliable online success predicate is claimed. + +## Contract coordinates and action layout + +The action is 44 normalized components in this exact order: panda_leaphand-0, then panda_leaphand-1; each has six arm components followed by sixteen dexterous-hand joint deltas. Per part, indices 0:3 translate in the robot root frame, scaled by 0.1 meters; indices 3:6 are the contract's root-aligned rotation representation (vector norm clipped to one, multiplied by **-0.5 radians**, then Euler-to-quaternion). They must not be interpreted as ordinary positive axis-angle increments. Indices 6:22 scale by 0.1 radians. Native scalar bounds are [-1,1]. Each robot exposes 23 qpos and 23 qvel values; the apparent seven-arm/sixteen-hand organization is consistent with the data but individual finger joint names are unavailable. + +Control mode is pd_ee_delta_pose, control rate 20 Hz, native horizon 2000. The runner owns the initial zero-delta hold, which consumes one step. The draft sends at most actions for step_id 1..1999 and returns None from step_id 2000. It does not issue a second initial hold. No Panda mimic-gripper mapping applies to these dex hands. + +The red line is approximately horizontal in the unrotated top image and approximately vertical in the front image. Image left/right is not automatically robot-root x/y; robot base transforms, camera intrinsics/extrinsics, metric depth, and reach boundaries are unknown. No calibrated Cartesian visual servo or IK is invented. Contract root-frame conventions, rather than camera appearance, determine action interpretation. + +## Sequence and variation analysis + +31,181 action rows were analyzed, with lengths 1558–1560 (77.90–78.00 seconds at the contract rate, excluding any unrecorded reset handling). All scalar labels are finite and within bounds; overall range is approximately -0.433793 to 0.5425. Initial qpos is identical across all 20 demonstrations. This narrow coverage does not justify assuming a live initial scene matches any demonstration. + +Per-demo, per-component minima, maxima, mean absolute values, nonzero fractions and endpoint qpos are in evidence/statistics.json. Per-demo sign runs and active components are in evidence/sequence_analysis.json; complete action arrays are in evidence/actions.npz. Translation magnitudes never exceed 0.08 normalized in the observed labels (8 mm target delta), while rotation uses only the middle component above 1e-5, with opposite signs between robots and peak magnitude 0.16. Finger activity concentrates in local hand components 0,1,2,3,12,14,15 above 0.01; other joints have small or zero labels. This does not prove that zero-action joints are mechanically irrelevant. + +For demo_00, both robots show approach with near-zero z through frame 86, negative z at 87–157, near-zero z at 158–217, positive z at 218–273, negative z at 280–330, near-zero z at 331–360, and positive z at 361–411. Similar cycles start around 485, 883 and 1281. Combined with RGB and changing finger labels, these are consistent with approach, lower, grasp, lift/transfer, lower/release and retract, repeated for four pairs of blocks. Exact contact/grasp events are not directly observable from these sparse views; sign-run analysis uses a 0.015 normalized z threshold and at least ten frames. Near-identical cycle timing across demos is observed, not imposed as live time scheduling. + +|Demo|Mean absolute xyz, robot 0|Mean absolute xyz, robot 1|First sustained negative-z interval, robot 0| +|---|---|---|---| +|demo_00|0.0164, 0.0210, 0.0402|0.0280, 0.0220, 0.0402|87–157| +|demo_01|0.0151, 0.0220, 0.0402|0.0287, 0.0229, 0.0402|87–157| +|demo_02|0.0153, 0.0218, 0.0402|0.0288, 0.0220, 0.0402|87–157| +|demo_03|0.0154, 0.0206, 0.0402|0.0289, 0.0222, 0.0402|87–157| +|demo_04|0.0156, 0.0207, 0.0402|0.0286, 0.0221, 0.0402|87–157| +|demo_05|0.0160, 0.0220, 0.0402|0.0285, 0.0220, 0.0402|87–157| +|demo_06|0.0159, 0.0222, 0.0402|0.0285, 0.0218, 0.0402|87–157| +|demo_07|0.0165, 0.0224, 0.0402|0.0293, 0.0224, 0.0402|87–157| +|demo_08|0.0157, 0.0219, 0.0401|0.0287, 0.0214, 0.0402|87–157| +|demo_09|0.0163, 0.0212, 0.0402|0.0286, 0.0221, 0.0402|87–157| +|demo_10|0.0162, 0.0224, 0.0402|0.0294, 0.0220, 0.0402|87–157| +|demo_11|0.0151, 0.0210, 0.0402|0.0282, 0.0219, 0.0403|87–157| +|demo_12|0.0149, 0.0230, 0.0402|0.0287, 0.0230, 0.0402|87–157| +|demo_13|0.0158, 0.0223, 0.0402|0.0291, 0.0216, 0.0402|87–157| +|demo_14|0.0158, 0.0221, 0.0402|0.0286, 0.0230, 0.0402|87–157| +|demo_15|0.0157, 0.0231, 0.0402|0.0282, 0.0220, 0.0403|87–157| +|demo_16|0.0151, 0.0208, 0.0402|0.0293, 0.0224, 0.0402|87–157| +|demo_17|0.0149, 0.0215, 0.0402|0.0286, 0.0236, 0.0402|87–157| +|demo_18|0.0158, 0.0211, 0.0402|0.0290, 0.0219, 0.0402|87–157| +|demo_19|0.0149, 0.0221, 0.0402|0.0289, 0.0211, 0.0402|87–157| + +## Draft design and limitations + +candidate/controller.py implements deterministic nonparametric observation-to-action retrieval. It consumes current top/front RGB plus both robots' qpos and qvel; it ranks nearby demonstration observations with a soft previous-observation phase-continuity cost, then reranks by RGB appearance including a saturation-weighted color descriptor. The action is the paired label at the selected observation. No demo identity, hidden seed, scene metadata or elapsed-time replay is used. step_id is used only for reset detection and horizon termination. instruction is accepted but not interpreted: this draft is scoped to this contract. + +The retrieval memory contains 7,820 indexed observations (391 per demo), using all 20 demos at stride four plus each last action frame. It is a data index, not a neural model or pretrained weight update. The controller may change reference demo at each observation. Selection uses whole paired actions to avoid mixing contradictory grasp phases across arms. Missing/malformed inputs or a large observation mismatch produce zero deltas; thresholds are uncalibrated. There is no automatic success termination. Terminal reference frames may keep commanding motion; stagnation, mistaken phase selection, unseen layouts, camera changes, occlusion and object loss remain material risks. There is no learned kinematics, metric calibration, explicit grasp verification or recovery planner. RGB retrieval is feedback but is not a guarantee of generalization or object-relative control. + +Only syntax and synthetic-input checks are permitted and performed. No demonstration replay in an environment, rollout, task performance test, rehearsal, scoring, or freeze call occurred. No internet access was attempted; the stated audited-provider-only restriction remains in force. HDF5 chunking made individual frame access slow; extraction was changed to bounded block reads without additional data sources. The environment and runner lock are unavailable at this stage; verified demo manifest and common environment lock are supplied separately by the runner. + +Final local validation: syntax and all synthetic checks passed; exact checks are recorded in candidate/checks.json. RGB and qpos dependence were checked using an entirely invented two-row memory. These checks do not measure task performance. The exact visual ledger is also available as evidence/visual_inspection.json. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..c666ed21305e01591db7829b6bde6f2d29e122a3 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/demo_manifest.json @@ -0,0 +1,2168 @@ +{ + "task_id": "DualArmMakeLine-v1", + "status": "released", + "selection_rule": "prefer existing pinned D20, otherwise numeric trajectory ID sort before reading data", + "lineage_status": "pinned_comparator", + "episodes": [ + { + "demo_id": "demo_00", + "file": "demo_00.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "1c3b02e9db509c03e3b10ca451384e1ef40b62183e570b304095c79b34d621e4", + "source_sha256": "7d3a8638e121809c9e6340fbde470c3ecaa51769096d1ac93a89eba69fe16a7b", + "view_sha256": "8a1a009ed94703757815eec1f274f794cd265046c3018ecb9d9b659c06cfef17" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "79df8e25a75ea62e740c3ce8a82dc2b61f461610d0a2b5b52cdb5d6c8d00039a", + "source_sha256": "a8ad18d762ba55bee9955d12af8764029014478aa3408894672ab5624660de8c", + "view_sha256": "619f8481a9e57a39588c2f1ad12058b4ac1b576916564db24ed17f6fccf0dacb" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8c8d87b134b30cc453cb693250ac8eb0cd2f89cedbc50938de6f04b7203bd046", + "source_sha256": "cc80ed236d8296a2d7aab46be375d6bb69605cdb8bd732524e800fbf040d2597", + "view_sha256": "7cf337bd30a34b1f20f279f21e00f16d052d43c731a576cae7cd7babae2f539b" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "b4312a33806c437a7822214a30624e45369b9835bb9453bc116f1ec5aacb5df6", + "source_sha256": "9838f0e7f315f20bbd468be7d7553d3f2fe8e1339cff36afeaa0723d3a62839c", + "view_sha256": "3246c10c1aad391ced7bc2c53ded0f8482302015388ea1ad571f3726ca85fcae" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9c1dc0f92fadc716efbefc679627a5c41ded90eb1a6405cbdc3356d80d155888", + "source_sha256": "a7aadfc5c45a91cea827329ab06d4e7c01b974fd8a4e0ab6d2086122e732bf55", + "view_sha256": "05eb7a1f3a992fbe0122bc2f25cf263a6e04a10b38206ae4bc148e4fdcfd5cd3" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "1b7ea4ed82d6d5d61005de5d6c7f7d92837a138dc5dabccad92a15ac36f294f3", + "source_sha256": "9bcd534b5c173133b673e98386bf962d89251a819ea2b872b786f6a72d99591d", + "view_sha256": "6fede0794a6ae1b11b4308974d88f63cf190d0636b452dc87d4a219d0b75ef8d" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c0469ba6f5da25baa53285292ab7798c80ee18b1491027b03ac617a527203230", + "source_sha256": "42cd180cf8774358f15d3b7d29b9084866704fb1b0efa6d13b719e2235c4a56e", + "view_sha256": "442273886d98959e0ed0b925cddba986c4a3e1b02643e64799863055e63f7d41" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 1560, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1560, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1560, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1561, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "5591922aacca9480b9b70929b413eb7fe6d018e36ccc922098bec99ec24049e3", + "source_sha256": "44fd47ace89da3b5dd3a3be8b854ec352d9199216c2fca59618913d6c8293938", + "view_sha256": "7fca8796f74e8ca658cc63166e016f78273fda7947c13b3e443271c9e2f6038f" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 1558, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1558, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1558, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1559, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1559, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1559, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1559, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1559, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1559, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1559, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1559, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1559, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c80eb8f5b7dadb093c091895d7428021a322fef180a96a384b8c31f917916f6d", + "source_sha256": "41d863d1bda09c066848da790e2147838fdb0f5c409c804a3765d344405bba0a", + "view_sha256": "2b102c4a5b906ec0fbdfaddccc862b5250910284b80fa5702fc15ea6641d08c2" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 1558, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1558, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1558, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1559, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1559, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1559, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1559, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1559, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1559, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1559, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1559, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1559, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "71242acf24d334c1b13ffeff44c4e1e15aa78b287242630f8d6d3d12d690c2d3", + "source_sha256": "465995789d5109bbdb17229e2226b79fa1f309f379b5851a0ff1f9b6db762cd0", + "view_sha256": "27ef0248c920b009d645b61404f2b76d17aed2b8ec322b9987c174f17963d8af" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "067c4a4c2c478147f4d5701a8350e6b8a4d1702b727e327da1e7a245d2fd4ad4", + "source_sha256": "155a384d7501e17c4c8572f4334df21ab0f62b63931d6f768d7a4ea5dc3de13e", + "view_sha256": "6988f20886e3d1c1f474d171281d0f5af9bf2ced0b972e1c2e9e5e4c02fbbb2c" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 1560, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1560, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1560, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1561, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "49b371abbe71a39f5069e0755b4fe0e32bb101c464da70de8e0eea0a430129fe", + "source_sha256": "600a778036655db5bb3d084d46ecca47009bd0d4bbd9cf029e6c2af75940514e", + "view_sha256": "1201c883c69e7c6dc6a0b1b3643bec797aab69aef6c24d153c37e5a918bd9274" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "41792a00a094d0b7af786362feb34502f27625a97f4eca1d27caba78a149746d", + "source_sha256": "7600cff8cb4895d6434370fa8bc3e70e7d78f153adee125151033385b10e4b0a", + "view_sha256": "545d24e44102bc8eb781191067caef74ffbf5972e4460e4a4509a066760d0a8f" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "bacb7aecc032837f0d4dcf9930f05204372a679a032725df93c0af0a17433b3f", + "source_sha256": "e62ed8c10f2e75caf56362313e854da7d84e96488e1e5ee137d777c38be8075a", + "view_sha256": "269e19fc8ceb22a241385c78443cca8abbba1dd9c33d78c721983ed3435270d0" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "43ff09c6b08ecb345f7493ff3bcfc51e5529a05a33d992198d32ce614bc2ab2e", + "source_sha256": "8634314aae2cc12896013bebe3cdb6160f8fd90fc75296191511d4ec26e9ebeb", + "view_sha256": "262f1aa0f0e7605e61320f6fd874e0323b8e91ad5f753aa1f2e34b51ed00f0a0" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 1560, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1560, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1560, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1561, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0a299238c6ce040f102221232dc2e7fdcaa9888863f2202164339c500c3a8efc", + "source_sha256": "c7ce178ba137543aa045390ddac27268d45498dfe49a2cdcc466252ef9f4086d", + "view_sha256": "fed2fc6324219cd63dabac6c67a0fe039ab04faa43bae743f9157a2556396c2f" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "f2206aca246c8a66b411750c1b6d772f65e539ff54f60792c3bfc214dc84a624", + "source_sha256": "f6d085440fb2e6c6ac9cbc0b43a4025e6a7ef64c8f59c46f149e7ab71a08d08e", + "view_sha256": "e9d541c4d969e0be65188e42dd90ddb533875dfa5dec0fb1bd65fa648e6b36c3" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "a066471cb0eced9e6581b5ed7fb685dd06e84d0c250e04ace9b40483ea08f6c0", + "source_sha256": "14e5a3a2dcd9d7ce4a2a567b7ab88e4f1c879a11b5b41c16e9f09837a9b3f00a", + "view_sha256": "a7afa8908adb0ade184131457dff0a39db379ee9800b33a1b2875e3e69806931" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8e74bdc9e511ae65096bc978268aa11856a5b27cde0fabac31d3c115f77de6b9", + "source_sha256": "12b9e507f0f9125fbf1307ab9a7b14b46ac30bb3539c4eccbcee47364ca0dac7", + "view_sha256": "6e73383378ac4a7617450420883e05eff0f08d3899e01f1a47a9851e98f93b21" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 1559, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand-1", + "shape": [ + 1559, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 1560, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 1560, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 1560, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "b3de75660dd1cd85173f4502fe413943fa93f1a3bc17853e2c34279bb0a2391e", + "source_sha256": "b8a08a651dcf62b7cb66402d40d645743adb94fb28bf7b1e8a3f87e09d99a003", + "view_sha256": "257cb835e77080bb7172526c64bd01a72bdac34eecf71b3f091d15daee56d93f" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/environment.lock @@ -0,0 +1,249 @@ +absl-py==2.4.0 +accelerate==1.13.0 +addict==2.4.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.13.5 +aiosignal==1.4.0 +annotated-types==0.7.0 +anyio==4.13.0 +anytree==2.13.0 +asttokens==3.0.1 +async-timeout==5.0.1 +attrs==26.1.0 +av==15.1.0 +blinker==1.9.0 +casadi==3.7.2 +certifi==2026.4.22 +cffi==2.0.0 +charset-normalizer==3.4.7 +click==8.3.3 +cloudpickle==3.1.2 +cmake==4.1.3 +coacd==1.0.11 +colorama==0.4.6 +colorlog==6.10.1 +comm==0.2.3 +ConfigArgParse==1.7.5 +contourpy==1.3.2 +cuda-bindings==12.9.4 +cuda-pathfinder==1.5.4 +cycler==0.12.1 +dacite==1.9.2 +dash==4.1.0 +dataclasses-json==0.6.7 +datasets==4.8.5 +decorator==5.2.1 +deepdiff==8.6.2 +Deprecated==1.3.1 +diffusers==0.35.2 +dill==0.4.1 +docstring_parser==0.18.0 +draccus==0.10.0 +einops==0.8.2 +embreex==4.4.0 +etils==1.13.0 +evdev==1.9.3 +exceptiongroup==1.3.1 +executing==2.2.1 +Farama-Notifications==0.0.6 +fast_simplification==0.1.13 +fastjsonschema==2.21.2 +filelock==3.29.0 +Flask==3.1.3 +fonttools==4.63.0 +freetype-py==2.5.1 +frozenlist==1.8.0 +fsspec==2026.2.0 +genesis-world @ file:///data/gck/genesis-world +git-filter-repo==2.47.0 +gitdb==4.0.12 +GitPython==3.1.50 +glfw==2.10.0 +gs-madrona==0.0.5 +gstaichi==3.3.0 +gym==0.26.2 +gym-notices==0.1.0 +gymnasium==1.3.0 +h11==0.16.0 +h5py==3.16.0 +hf-xet==1.5.0 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface-hub==0.35.3 +idna==3.15 +ImageIO==2.37.3 +imageio-ffmpeg==0.6.0 +importlib_metadata==9.0.0 +importlib_resources==7.1.0 +inquirerpy==0.3.4 +ipython==8.39.0 +ipywidgets==8.1.8 +itsdangerous==2.2.0 +jedi==0.20.0 +Jinja2==3.1.6 +joblib==1.5.3 +jsonlines==4.0.0 +jsonschema==4.26.0 +jsonschema-specifications==2025.9.1 +jupyter_core==5.9.1 +jupyterlab_widgets==3.0.16 +kiwisolver==1.5.0 +lazy-loader==0.5 +lerobot==0.4.4 +libigl==2.6.2 +llvmlite==0.47.0 +loguru==0.7.3 +lxml==6.1.0 +manifold3d==3.4.1 +-e git+ssh://git@github.com/HeegerGao/maniladder.git@f6eed17496816bb41ce484f2d7580990a908d3e6#egg=maniladder +mapbox_earcut==2.0.0 +markdown-it-py==4.2.0 +MarkupSafe==3.0.3 +marshmallow==3.26.2 +matplotlib==3.10.9 +matplotlib-inline==0.2.2 +mdurl==0.1.2 +mergedeep==1.3.4 +moviepy==2.2.1 +mpmath==1.3.0 +msgspec==0.21.1 +mujoco==3.8.1 +multidict==6.7.1 +multiprocess==0.70.19 +mypy_extensions==1.1.0 +nbformat==5.10.4 +nest-asyncio==1.6.0 +networkx==3.4.2 +ninja==1.13.0 +nlopt==2.10.0 +numba==0.65.1 +numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1747544640217/work/dist/numpy-2.2.6-cp310-cp310-linux_x86_64.whl#sha256=d6d964caeef85d00073d27cd62b46883d275b3d8162f723f0fcabbd0b3cc3f9d +nvidia-cublas-cu12==12.8.4.1 +nvidia-cuda-cupti-cu12==12.8.90 +nvidia-cuda-nvrtc-cu12==12.8.93 +nvidia-cuda-runtime-cu12==12.8.90 +nvidia-cudnn-cu12==9.10.2.21 +nvidia-cufft-cu12==11.3.3.83 +nvidia-cufile-cu12==1.13.1.3 +nvidia-curand-cu12==10.3.9.90 +nvidia-cusolver-cu12==11.7.3.90 +nvidia-cusparse-cu12==12.5.8.93 +nvidia-cusparselt-cu12==0.7.1 +nvidia-nccl-cu12==2.27.5 +nvidia-nvjitlink-cu12==12.8.93 +nvidia-nvshmem-cu12==3.4.5 +nvidia-nvtx-cu12==12.8.90 +open3d==0.19.0 +opencv-python==4.13.0.92 +opencv-python-headless==4.12.0.88 +OpenEXR==3.4.11 +orderly-set==5.5.0 +packaging==25.0 +pandas==2.3.3 +parso==0.8.7 +pexpect==4.9.0 +pfzy==0.3.4 +pillow==11.3.0 +pin==4.0.0 +pip @ file:///home/task_177498883471825/croot/pip_1774988882575/work +platformdirs==4.9.6 +plotly==5.24.1 +polyscope==2.6.1 +proglog==0.1.12 +prompt_toolkit==3.0.52 +propcache==0.5.2 +protobuf==6.33.6 +psutil==7.2.2 +ptyprocess==0.7.0 +pure_eval==0.2.3 +py-cpuinfo==9.0.0 +py-spy==0.4.2 +pyarrow==24.0.0 +pycollada==0.9.3 +pycparser==3.0 +pydantic==2.13.4 +pydantic_core==2.46.4 +PyGEL3D==0.6.1 +pyglet==2.1.14 +pygltflib==1.16.0 +Pygments==2.20.0 +pymeshlab==2025.7.post1 +pynput==1.8.2 +PyOpenGL==3.1.10 +pyparsing==3.3.2 +pyperclip==1.11.0 +PyQt6==6.11.0 +PyQt6-Qt6==6.11.0 +PyQt6_sip==13.11.1 +pyquaternion==0.9.9 +pyserial==3.5 +pysplashsurf==0.12.0.2 +python-dateutil==2.9.0.post0 +python-dotenv==1.2.2 +python-xlib==0.33 +pytransform3d==3.15.0 +pytz==2026.2 +pyuipc @ file:///tmp/claude-1005/-mnt4-gck-maniladder/9f005e67-04f6-4368-bd0e-9f40896c7dbf/scratchpad/pyuipc_dl/pyuipc-0.0.25-cp310-cp310-manylinux_2_34_x86_64.whl#sha256=76ff13554e1971ea4401db2c875369cf32352ae3a5a4c398c45193231b5cbf00 +PyYAML==6.0.3 +pyyaml-include==1.4.1 +referencing==0.37.0 +regex==2026.5.9 +requests==2.34.2 +rerun-sdk==0.26.2 +retrying==1.4.2 +rich==14.3.4 +rpds-py==0.30.0 +rtree==1.4.1 +safetensors==0.7.0 +sapien==3.0.3 +scikit-image==0.25.2 +scikit-learn==1.7.2 +scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy-split_1739790642651/work/dist/scipy-1.15.2-cp310-cp310-linux_x86_64.whl#sha256=9e52bad6c3294d1a5b04a13632118ca2157130603c6c018c2d710162b223b27e +sentry-sdk==2.60.0 +setuptools==80.10.2 +shapely==2.1.2 +six==1.17.0 +smmap==5.0.3 +stack-data==0.6.3 +svg.path==7.0 +sympy==1.14.0 +tenacity==9.1.4 +termcolor==3.3.0 +tetgen==0.8.4 +threadpoolctl==3.6.0 +tifffile==2025.5.10 +timm==1.0.27 +toml==0.10.2 +torch==2.10.0 +torchaudio==2.11.0 +torchcodec==0.10.0 +torchvision==0.25.0 +tqdm==4.67.3 +traitlets==5.15.0 +transforms3d==0.4.2 +trimesh==4.12.2 +triton==3.6.0 +typeguard==4.5.2 +typing-inspect==0.9.0 +typing-inspection==0.4.2 +typing_extensions==4.15.0 +tyro==1.0.13 +tzdata==2026.2 +urllib3==2.7.0 +vhacdx==0.0.10 +viser==1.0.27 +vtk==9.6.1 +wandb==0.24.2 +wcwidth==0.7.0 +websockets==16.0 +Werkzeug==3.1.8 +wheel==0.46.3 +widgetsnbextension==4.0.15 +wrapt==2.1.2 +xxhash==3.7.0 +yarl==1.23.0 +yourdfpy==0.0.60 +z3-solver==4.16.0.0 +zipp==3.23.1 +zstandard==0.25.0 diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..a9fb47c53765d7ec5a93a76e32f7cd00bf7a16b7 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/findings.md @@ -0,0 +1,43 @@ +# Findings through episode 16 + +# Legal exploration ledger + +Budget began at zero used / twenty remaining. Only worker API calls are used for environment interaction. Episode 1 started with next_episode; the initial hold is native step 1. The first action was successfully executed before the driver discovered execute_actions returns a steps list. Driver resumed via latest_observation at step 2, without replay or reset. Action at step 1 was the original candidate's retrieved demo phase 0 label. Camera evidence retained under ep01. + +At native step 102 the retrieval selected phase 100 with qcost 0.00328. Initial pose progression therefore appears stable. Contact/grasp and later sequence progression remain unverified. + +Episode 1 ended manually after native step 502. Native success was false. Recorded 500 resumed actions (steps 2..501), plus the documented phase-0 first action. Final reference phase 216; repeated 178 times. Phase 156 repeated 117 times. No full transfer was observed. Episode 2 is a frozen independent rehearsal of the timing revision. + +Episode 2: independent bundle a33d298143d57c3792e3b90beb273b4fdcaf896bbfd5b4a1b5d68292cda4d5a8; valid, finished, native success false, final step 1600. Top/front final images show scattered orange/yellow/cyan/magenta/purple blocks, not a horizontal line of eight. Timing alone insufficient. + +Episode 3 tests a local linear arm-response correction computed only from observed D20 qpos differences and action labels. This is numerical non-neural regression, not simulator kinematics or neural fine-tuning. Local inverse maps cover four active arm action components; corrections are capped at .03 normalized. Finger correction is capped at .1 normalized. Entire unchanged candidate is archived in versions/v2_pose_feedback. The first-cycle test is capped at 430 actions to inspect grasp and transfer before broader testing. + +Episode 3 ended at step 118 after visible finger divergence and qcost 1.86 at step 101. The assumption that qpos[7:23] matches hand action ordering was false. Demonstration correlations identify active hand action indices 0,1,2,3,12,14,15 with qpos indices 11,7,15,19,10,18,22 respectively (joint 1 is inferred by exclusivity and correlated response, and remains less certain under contact). Episode 4 tests this corrected active-joint mapping; inactive hand joints receive demonstrated labels only. + +Episode 4 ended at native step 251. Corrected active-finger ordering reduced qcost to 0.000367 at step 51, 0.000151 at 101, 0.0000557 at 151, and 0.0000340 at 201. The correction is stable through closure. Red is hidden after lifting, while blue appears near its original front-image location; grasp evidence is mixed, not success. Episode 5 keeps the same behavior and extends through first-cycle release (430 actions). + +Episode 5 finished at step 431. Top and left images visibly show red and blue blocks on the red target line after release; this is a first-pair placement observation, not full-task success. Native success remains false because six other blocks have not been arranged. Corrected mapping plus bounded pose feedback is therefore a practical manipulation baseline. Episode 6 tests initial color-centroid matching independently per arm, fixed reference identity, and interpolated phase targets. This localizer indexes the same 20 authorized demonstrations at frame 0; additional demo_00 frames 400,800,1200,1559 were analyzed to confirm color order: red/blue, orange/magenta, yellow/cyan, green/purple. + +Continuation: budget_status reported six spent, fourteen remaining, inactive. Episode 6 had ended before restart; its saved step-401 left view shows red near the line but blue placement is not established. Episode 7 exercised baseline fixed-per-arm localization through approach only (see ep07 final and diagnostics), then finished to move full-cycle testing into independent rehearsal. Pose errors at step101 were .0112/.00647 radians aggregate; not a success claim. + +Revision for episode 8: per-cycle front-camera color-centroid localization, four nearest demonstration references weighted by inverse squared image distance, interpolated action and qpos targets, bounded arm/hand pose feedback. Cycle observations at frames 0,398,796,1194 were read via API.read_demo for all 20 authorized demos and saved as cycle_centers.npy. Later frames avoid the observed initial settling bias. No neural fitting. Localization is only at cycle starts; contact/grasp verification and recovery are not robust. Missing blocks can still be assigned a poor reference. + +Episode 8: valid independent rehearsal, bundle 174b661274249df06f72ad0315be7393ae5933ad7f686be6713c98f6b6b40502, finished step1600, native success false. Final top/front/left views show blue, red, orange, yellow and green off line; cyan also offset, magenta/purple nearer the line. Therefore no visible success. Four-reference blending improves held-out D20 arm-q prediction vs nearest1, but did not yield reliable real grasps. Archive v6_perblock_blend. + +Episode 9 restores v3_hand_order's current-RGB/proprio retrieval with per-step bounded pose corrections. This had the strongest actual first-pair evidence in episode5. Full four-cycle rehearsal will test generalization; no success assumed. + +Episode 9: API.rehearse request timed out at its client receive deadline; last read-only status saw native step1509. Next budget_status reported nine used, eleven remaining, inactive, steps0; latest_observation returned 'no step observation'. No result/hash or native success was received, so completion/validity cannot be claimed. No replay/retry was issued. Log preserved in ep09_rehearse.log; exact input candidate archived as v7_retrieval_timeout. + +Episodes10–15 plan: bounded approach perturbations with 1.6x phase timing and proportionally scaled demonstrated actions. Arm gains .1,.15,.3 and hand gains1,2,3 tested separately. Each probe uses40 actions with five small perturbed actions at iterations10–14, then unperturbed feedback. These are pose-recovery tests only, not grasp/full-task tests. Episode16 will inspect a full first-pair cycle at the selected gains. The timing compression addresses the observed wall-clock failure while retaining four demonstrated cycles; its physical behavior is not assumed equivalent. + +Episodes10–15 each finished at native step41 after40 actions. All six probes showed decay of aggregate pose error after the five-step perturbation. Terminal errors: arm gains .1/.15/.3 gave .02890/.02892/.03084; hand gains1/2/3 gave .02536/.02939/.02887. Different scenes/reference choices confound causal ranking. Retain established .15/2 gains: these probes establish modest approach recovery, not contact or object-loss recovery. Detailed configs/actions/images/diagnostics under ep10–ep15; aggregate recovery_summary.json. + +Episode16 uses unchanged fast retrieval at default .15/2 gains for270 actions, approximately432 demonstration phases, to inspect first-pair grasp, transfer and release under compressed timing. + +Episode16 finished at step271 after270 actions. Final top/left views unambiguously show red and blue blocks placed on the red line after release; other six remain scattered. Native full-task success false. Pose error at demonstration phases80/160/240/320 was .0376/.0575/.0325/.0329. This is direct first-pair evidence for 1.6x timing, not full-task success. Retain this unchanged behavior for independent episodes17–20. + +Final candidate: per-step paired RGB/proprio retrieval, phase=(native_step-1)*1.6, demonstration action deltas multiplied by1.6, arm gain.15 and finger gain2, existing .03/.1 correction caps. Four cycles end near native976, then40 upward-retraction actions; stop at1016. Full-task success must be from actual runner feedback or unambiguous legal images if feedback is absent. + +## Remaining limitations + +The candidate has no explicit object-grasp detector or object-loss recovery. Small pose disturbances decay during approach, but pose error is not a proxy for correct grasp. RGB retrieval can retain a wrong reference under occlusion. First-pair success does not establish later-cycle success. The full-speed rehearsal timed out; timing compression has been observed through only one pair before final independent rehearsals. Episode8's blended reference alternative completed but failed the task. No neural weights were trained or modified. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..c8d178d9fc1411cb8215fd71221275ef7d3dbe84 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/freeze_manifest.json @@ -0,0 +1,104 @@ +{ + "files": { + "build_memory.py": "ddb030950f5284b960dc6027e1a8e591e21e58d21ae14bda65499557498ad4b9", + "checks.json": "4f16a904ecbfab0fe49b79cf5787c3a36d8338af31ae13a6b334b7d635d77925", + "controller.py": "5002ade4e5bb05d006b7a7b50c3e1156015a175011f7c3e15bbd9b143cb71d78", + "cycle_centers.npy": "c4d9cf525f7035b74b6f97eaead30552dbc8cce491297f273200d475f81a2f98", + "demo_analysis.md": "6ea9f41873262298dc22f7f4cd8b68c79aff77677b12e2be2177a5bb426b4fc6", + "demo_manifest.json": "364f2e956b1f35608c8264e009dede3b7444caac4be466baf428c42f0543647e", + "demonstrations_readonly/demo_00.h5": "8a1a009ed94703757815eec1f274f794cd265046c3018ecb9d9b659c06cfef17", + "demonstrations_readonly/demo_01.h5": "619f8481a9e57a39588c2f1ad12058b4ac1b576916564db24ed17f6fccf0dacb", + "demonstrations_readonly/demo_02.h5": "7cf337bd30a34b1f20f279f21e00f16d052d43c731a576cae7cd7babae2f539b", + "demonstrations_readonly/demo_03.h5": "3246c10c1aad391ced7bc2c53ded0f8482302015388ea1ad571f3726ca85fcae", + "demonstrations_readonly/demo_04.h5": "05eb7a1f3a992fbe0122bc2f25cf263a6e04a10b38206ae4bc148e4fdcfd5cd3", + "demonstrations_readonly/demo_05.h5": "6fede0794a6ae1b11b4308974d88f63cf190d0636b452dc87d4a219d0b75ef8d", + "demonstrations_readonly/demo_06.h5": "442273886d98959e0ed0b925cddba986c4a3e1b02643e64799863055e63f7d41", + "demonstrations_readonly/demo_07.h5": "7fca8796f74e8ca658cc63166e016f78273fda7947c13b3e443271c9e2f6038f", + "demonstrations_readonly/demo_08.h5": "2b102c4a5b906ec0fbdfaddccc862b5250910284b80fa5702fc15ea6641d08c2", + "demonstrations_readonly/demo_09.h5": "27ef0248c920b009d645b61404f2b76d17aed2b8ec322b9987c174f17963d8af", + "demonstrations_readonly/demo_10.h5": "6988f20886e3d1c1f474d171281d0f5af9bf2ced0b972e1c2e9e5e4c02fbbb2c", + "demonstrations_readonly/demo_11.h5": "1201c883c69e7c6dc6a0b1b3643bec797aab69aef6c24d153c37e5a918bd9274", + "demonstrations_readonly/demo_12.h5": "545d24e44102bc8eb781191067caef74ffbf5972e4460e4a4509a066760d0a8f", + "demonstrations_readonly/demo_13.h5": "269e19fc8ceb22a241385c78443cca8abbba1dd9c33d78c721983ed3435270d0", + "demonstrations_readonly/demo_14.h5": "262f1aa0f0e7605e61320f6fd874e0323b8e91ad5f753aa1f2e34b51ed00f0a0", + "demonstrations_readonly/demo_15.h5": "fed2fc6324219cd63dabac6c67a0fe039ab04faa43bae743f9157a2556396c2f", + "demonstrations_readonly/demo_16.h5": "e9d541c4d969e0be65188e42dd90ddb533875dfa5dec0fb1bd65fa648e6b36c3", + "demonstrations_readonly/demo_17.h5": "a7afa8908adb0ade184131457dff0a39db379ee9800b33a1b2875e3e69806931", + "demonstrations_readonly/demo_18.h5": "6e73383378ac4a7617450420883e05eff0f08d3899e01f1a47a9851e98f93b21", + "demonstrations_readonly/demo_19.h5": "257cb835e77080bb7172526c64bd01a72bdac34eecf71b3f091d15daee56d93f", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "feedback.npz": "64603dc51ffaa6d798d1731807ab219e565872bb47efe6098f699ddecfca13bc", + "findings.md": "c8528c87046401e0b2e8c418791c104b2fe444cfaffcc43919eed426b0d7b878", + "handoff.md": "cadd058f15937b3233c9efa8900932673294967f79c32ce08c3ab26fcc2f3c12", + "initial_centers.npy": "fca92e0c2742d1ecda20afeb132345196356b2a666e67d33c9ef44f09c4b3c10", + "localization.py": "9a9e7086daa0bab285bd39a552f867a242d90182d23632a7d8ef3c1d9cca94c7", + "memory.npz": "7bc7f50cfd5069d355e7dd2aa35aef7db4d9bbc3d71458ccc1733544426205f0", + "model_tool_manifest.yaml": "36429b11cd6716f0a82cfeb6bedadd336fc5ab1a8644de7906c4108d4188f047", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "skills.md": "0858cfe09b2dd4fec4fd8e85df04fb6253577f43b78f4185ae1e75a43b636748", + "synthetic_check.py": "2466be62beb296b40e8bb75ad8e71317ef8658ab124913ccba429b50f0df0246", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "adc2b66138cd1f9f14b961ce55532b38525e56eb753bee2698eeb3ca7a668e19", + "exploration_ledger_hash": "fe2738099aed4ac2009dd4e926d64566fbc7a75263dd56a634a0b3a54526e954", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "bundle_hash": "a33d298143d57c3792e3b90beb273b4fdcaf896bbfd5b4a1b5d68292cda4d5a8", + "episode": 2, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "174b661274249df06f72ad0315be7393ae5933ad7f686be6713c98f6b6b40502", + "episode": 8, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "episode": 17, + "bundle_hash": "adc2b66138cd1f9f14b961ce55532b38525e56eb753bee2698eeb3ca7a668e19", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "adc2b66138cd1f9f14b961ce55532b38525e56eb753bee2698eeb3ca7a668e19", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "adc2b66138cd1f9f14b961ce55532b38525e56eb753bee2698eeb3ca7a668e19", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "adc2b66138cd1f9f14b961ce55532b38525e56eb753bee2698eeb3ca7a668e19", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..3208f952a20b6e0aa78a8ce7d42b54a7ceade2dd --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/handoff.md @@ -0,0 +1,9 @@ +# Frozen-program handoff + +Entry points are controller.reset_episode() and controller.act(obs). Runtime requires controller.py, memory.npz, feedback.npz, Python pathlib, NumPy and OpenCV. All data assets are packaged; no network, model-development agent, pretrained neural model or task simulator is used. Other bundled analysis/localization files are historical and not runtime dependencies. The runner adds the verified D20 manifest, readonly demonstrations and common environment lock. + +The controller emits one44-component action per legal observation: two22-component arm/hand parts. It follows four demonstrated cycles with current RGB/proprioception retrieval and bounded pose feedback. Phase advances1.6 demonstration steps per native step; labels are scaled accordingly. A40-step upward retraction follows; act returns None at step1016, below the native2000 horizon. + +At preparation for episodes17–20, only first-pair placement is established for this exact behavior. No full-task success is claimed. Exact independently rehearsed bundle hashes and runner feedback determine eligibility and selection. Preserve candidate unchanged through the final four rehearsals; record their evidence outside candidate. If native success is absent, ambiguous images count false. + +Audit: findings.md, demo_analysis.md, and workspace exploration/notes.md, per-episode images/actions/diagnostics, reference_cross_validation.json and recovery_summary.json. Contact ambiguity and lack of object-loss recovery remain the principal limitations. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/localization.py b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/localization.py new file mode 100644 index 0000000000000000000000000000000000000000..3624a23a57534be344ba02a0f685a663c0b222a5 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/localization.py @@ -0,0 +1,17 @@ +import cv2 +import numpy as np +HUES=(0,15,30,60,120,90,150,135) +def centers(rgb): + out=[] + for cam in ('top_camera','front_camera'): + im=np.asarray(rgb[cam]); im=im[0] if im.ndim==4 else im + hsv=cv2.cvtColor(im,cv2.COLOR_RGB2HSV) + for hue in HUES: + dh=np.abs(hsv[:,:,0].astype(float)-hue);dh=np.minimum(dh,180-dh) + m=((dh<7)&(hsv[:,:,1]>160)&(hsv[:,:,2]>90)).astype('uint8') + n,_,stats,cents=cv2.connectedComponentsWithStats(m) + candidates=[j for j in range(1,n) if stats[j,4]>=8 and max(stats[j,2:4])/max(1,min(stats[j,2:4]))<4] + if candidates: + j=max(candidates,key=lambda k:stats[k,4]);out.append([cents[j,0]/im.shape[1],cents[j,1]/im.shape[0],1]) + else:out.append([0,0,0]) + return np.array(out,dtype=np.float32).reshape(2,8,3) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5e72ac21f532e460e2d8ee1a7e9e08705845e742 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,99 @@ +{ + "stage": "LEGAL_E20_EXPLORATION", + "status": "final_candidate_pending_episodes_17_to_20", + "task": "DualArmMakeLine-v1", + "episodes_spent": 16, + "pretrained_weights": [], + "neural_finetuning": false, + "model": { + "identity": "provider coding model (exact weight revision unavailable through task API)", + "weights_modified": false + }, + "python": "3.10.20 (main, Mar 11 2026, 17:46:40) [GCC 14.3.0]", + "platform": "Linux-5.15.0-94-generic-x86_64-with-glibc2.35", + "runtime_dependencies": { + "numpy": "2.2.6", + "opencv": "4.12.0" + }, + "offline_tools": { + "python_standard_library": "3.10.20", + "numpy": "2.2.6", + "h5py": "3.16.0", + "opencv": "4.12.0", + "worker_api": "/worker_api.py API.read_demo only", + "shell": "bash; local file creation and process management", + "image_viewer": "provided view_image tool; version unavailable" + }, + "available_not_used_for_computation": { + "scipy": "1.15.3", + "torch": "2.10.0" + }, + "provenance": { + "sources": [ + "/task_contract.json", + "/demo_manifest.json", + "/worker_api.py", + "/demonstrations/demo_00.h5 through demo_19.h5" + ], + "authorized_demo_ids": [ + "demo_00", + "demo_01", + "demo_02", + "demo_03", + "demo_04", + "demo_05", + "demo_06", + "demo_07", + "demo_08", + "demo_09", + "demo_10", + "demo_11", + "demo_12", + "demo_13", + "demo_14", + "demo_15", + "demo_16", + "demo_17", + "demo_18", + "demo_19" + ], + "artifacts": "memory.npz contains untrained fixed RGB descriptors, observed proprioception and expert action labels; no pretrained model", + "visual_inspection": "../demo_analysis.md; ../evidence/demo_XX.jpg; ../evidence/additional_views.jpg", + "machine_access": "../evidence/machine_access.json" + }, + "network_used": false, + "limits": [ + "No neural fitting; only authorized D20 and E20 data", + "No hidden states, calibration or simulator access", + "Contact and recovery remain uncertain" + ], + "source_file_sha256": { + "/task_contract.json": "858e8680c1742ea38ccace045e454069713f06cab1f449711df645e39333b746", + "/demo_manifest.json": "8896f0f4ac2f42726cb7eec7dbf8a479d53a568aa539e29f2d6b56f3a9a51a48", + "/worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "memory": { + "rows": 7820, + "demo_count": 20, + "sampling": "range(0,length,4) union {length-1}", + "optimization": "none; fixed descriptors and label indexing", + "runtime_pretrained_weight_references": [] + }, + "validation": { + "task_testing_performed": true, + "success_claim": false, + "first_pair_observed": "legal episode16; not full-task success" + }, + "runtime_model": "none; fixed RGB/proprio D20 retrieval and bounded non-neural numerical feedback", + "runtime_artifacts": [ + "controller.py", + "memory.npz", + "feedback.npz" + ], + "timing": { + "phase_speed": 1.6, + "arm_gain": 0.15, + "hand_gain": 2.0, + "stop_native_step": 1016 + } +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/policy_runner.py @@ -0,0 +1,25 @@ +"""Frozen-program entry point; no development agent and no reset capability.""" +import importlib.util +import sys + +sys.path.insert(0,'/artifact') +sys.path.insert(0,'/') +from worker_api import API + + +def main(): + spec=importlib.util.spec_from_file_location('controller','/artifact/controller.py') + module=importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + module.reset_episode() + api=API() + result=api.latest_observation() + while not (result['terminated'] or result['truncated'] or result['horizon_reached']): + obs=dict(result['observation'],step_id=result['step_id']) + action=module.act(obs) + if action is None:break + response=api.execute_actions([action]) + result=response['steps'][-1] + + +if __name__=='__main__':main() diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..3105452f8e0e20d168b0a5bee9fd83dfa82411a8 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/skills.md @@ -0,0 +1,10 @@ +# Implemented controller mechanisms + +- Consume only current legal top/front RGB and both qpos/qvel vectors. +- Extract fixed RGB and saturation-weighted descriptors with NumPy/OpenCV. +- Retrieve a paired D20 observation/action with current pose, velocity, image and bounded phase costs. +- Use 1.6x phase timing and rescale normalized demonstration deltas by1.6. +- Correct four active arm components via a D20 numerical response inverse, capped at.03; correct seven mapped finger joints, capped at.1. +- Clip actions to native[-1,1], retract for visibility, and stop at native1016. + +Observed ability: red/blue first-pair placement in legal episode16; modest approach-pose recovery in episodes10–15. Full-task success, reliable grasp detection and object-loss recovery are not established. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/synthetic_check.py b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/synthetic_check.py new file mode 100644 index 0000000000000000000000000000000000000000..ae556a5e7864c7773b93733df2136945f1398b35 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/synthetic_check.py @@ -0,0 +1,36 @@ +"""Syntax and synthetic input checks only. No environment or demo rollout.""" +import ast, json +from pathlib import Path +import numpy as np +import controller as m +root=Path(__file__).parent +for filename in ['controller.py','build_memory.py','synthetic_check.py']: + ast.parse((root/filename).read_text()) +p=m.Controller() +def obs(value=0,batch=False): + rgb={c:np.full((32,32,3),value,np.uint8) for c in m.CAMERAS} + if batch:rgb={c:x[None] for c,x in rgb.items()} + return {'rgb':rgb,'proprioception':{k:np.zeros(23,np.float32) for k in m.QPATHS+m.VPATHS},'step_id':1,'instruction':'Arrange eight blocks along the line.'} +def legal(a): + assert a.shape==(44,) and a.dtype==np.float32 and np.isfinite(a).all() and np.all(np.abs(a)<=1) +a=p.act(obs());legal(a) +a=p.act(obs(batch=True));legal(a) +assert p.act({'step_id':2000}) is None +p.reset_episode();assert p.last_phase is None +legal(p.act({'step_id':1})) +bad=obs();bad['proprioception'][m.QPATHS[0]][0]=np.nan +assert np.array_equal(p.act(bad),np.zeros(44)) +# Entirely invented memory tests exercise positive retrieval and both feedback paths. +x=obs();y=obs(255) +f0=m.visual_features(x['rgb']);f1=m.visual_features(y['rgb']) +p.bank={'q':np.zeros((2,46),np.float32),'v':np.zeros((2,46),np.float32),'features':np.stack([f0,f1]),'actions':np.stack([np.full(44,.02,np.float32),np.full(44,-.02,np.float32)]),'phase':np.zeros(2,np.float32)} +p.reset_episode();a=p.act(x);b=p.act(y);legal(a);legal(b);assert not np.array_equal(a,b) +p.bank['features'][:]=f0;p.bank['q'][1]=.1 +p.reset_episode();a=p.act(x) +x['proprioception']={k:np.full(23,.1 if k in m.QPATHS else 0,np.float32) for k in m.QPATHS+m.VPATHS} +b=p.act(x);assert not np.array_equal(a,b) +p.last_phase=500;p.last_step=20;x['step_id']=1;p.act(x);assert p.last_step==1 +m.reset_episode();legal(m.act(obs())) +report={'syntax':'pass','synthetic_checks':'pass','checks':['real artifact loads','44 finite bounded float32 outputs','HWC and 1HWC RGB','horizon stop at 2000','missing fields zero deltas','nonfinite proprioception zero deltas','RGB affects retrieval in wholly synthetic memory','qpos affects retrieval in wholly synthetic memory','reset and decreasing-step handling','module entry points'],'task_testing_performed':False,'rollouts':0,'rehearsed':False,'success_claim':False} +(root/'checks.json').write_text(json.dumps(report,indent=2)+'\n') +print(json.dumps(report,indent=2)) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmMakeLine-v1/frozen/worker_api.py @@ -0,0 +1,81 @@ +"""Standalone worker client; safe to mount without the runner package.""" +import base64 +import json +import socket +import struct +import uuid +import os +from pathlib import Path + +import numpy as np + + +def array_hook(value): + if value.get('__array__') is True: + dtype=np.dtype(value['dtype']) + if dtype.kind not in 'bifu':raise ValueError('non-numeric array from service') + raw=base64.b64decode(value['data'],validate=True) + return np.frombuffer(raw,dtype=dtype).reshape(value['shape']).copy() + return value + + +class API: + def __init__(self,socket_path='/rpc/control.sock',demo_root='/demonstrations',manifest='/demo_manifest.json'): + self.socket_path=socket_path + self.demo_root=Path(demo_root) + self.manifest=Path(manifest) + + def call(self,method,arguments=None,request_id=None): + # Caller can persist a request ID before sending. Never automatically retry. + request_id=request_id or str(uuid.uuid4()) + request={'request_id':request_id,'method':method,'arguments':arguments or {}} + if os.environ.get('AGENT_E20_RPC_TOKEN'): + request['token']=os.environ['AGENT_E20_RPC_TOKEN'] + payload=json.dumps(request,allow_nan=False).encode() + if len(payload)>65536:raise ValueError('request too large') + with socket.socket(socket.AF_UNIX,socket.SOCK_STREAM) as s: + s.settimeout(1810);s.connect(self.socket_path) + s.sendall(struct.pack('!I',len(payload))+payload) + def exact(n): + chunks=[] + while n: + chunk=s.recv(min(n,1024*1024)) + if not chunk:raise RuntimeError('RPC interrupted; do not replay action with a new ID') + chunks.append(chunk);n-=len(chunk) + return b''.join(chunks) + length=struct.unpack('!I',exact(4))[0] + if length>64*1024*1024:raise RuntimeError('response too large') + result=json.loads(exact(length),object_hook=array_hook) + if not result['ok']:raise RuntimeError(result['error']) + return result['result'] + + def next_episode(self,request_id=None):return self.call('next_episode',request_id=request_id) + def latest_observation(self):return self.call('latest_observation') + def execute_actions(self,actions,request_id=None): + return self.call('execute_actions',{'actions':np.asarray(actions).tolist()},request_id) + def finish_episode(self):return self.call('finish_episode') + def budget_status(self):return self.call('budget_status') + def rehearse(self,candidate='candidate',request_id=None): + return self.call('rehearse',{'candidate':candidate},request_id) + def score_rehearsal(self,episode,visible_success,evidence): + return self.call('score_rehearsal',{'episode':episode,'visible_success':visible_success,'evidence':evidence}) + def freeze(self):return self.call('freeze') + + def read_demo(self,demo_id,start=0,stop=None,fields=None): + import h5py + manifest=json.loads(self.manifest.read_text()) + if manifest.get('status') not in ('released','released_for_offline_analysis'): + raise RuntimeError('demonstrations not released by trusted preflight') + entries={e['demo_id']:e for e in manifest['episodes']} + if demo_id not in entries:raise ValueError('unauthorized demo ID') + entry=entries[demo_id] + allowed={f['path'] for f in entry['fields']} + fields=sorted(allowed) if fields is None else fields + if not set(fields)<=allowed:raise ValueError('unauthorized demo field') + stop=entry['length']+1 if stop is None else stop + if not isinstance(start,int) or not isinstance(stop,int) or not 0<=start0) + active=np.linalg.norm(B['action'][ids,first*22:first*22+3],axis=1) + sw=int(B['frame'][ids[np.flatnonzero(active<1e-5)[0]]]) if np.any(active<1e-5) else 150 + ramp=np.minimum(B['frame'][ids]/max(sw*.8,1),1.) + warped=P.copy() + for arm in range(2): + full=P[:,arm,:2]@rotation.T+shift[arm] + arm_ramp=np.minimum(np.linalg.norm(P[:,arm]-P[0,arm],axis=1)/.20,1.) + warped[:,arm,:2]+=arm_ramp[:,None]*(full-P[:,arm,:2]) + state={'ids':ids,'p':warped,'R':rotation,'calls':0,'best':0,'di':di,'angle':float(angle),'terminal':0,'stall':0,'floor':0,'recoveries':0} + s=state;s['calls']+=1 + if s['calls']>=800 or obs.get('step_id',1)>=800:return None + ids=s['ids'];dq=(B['qpos'][ids]-q)/B['qscale'];dq[:,0:7]=0;dq[:,23:30]=0 + d=np.mean(((s['p']-pos)/.045)**2,axis=(1,2))+.4*np.mean(dq*dq,axis=1) + d+=.08*np.mean((B['image'][ids]-feats)**2,axis=(1,2))/.12**2 + ix=np.arange(len(ids));d[(ixs['best']+12)]+=100 + best=int(np.argmin(d));s['stall']=s['stall']+1 if best<=s['best'] else 0;s['best']=best;j=ids[best] + s['terminal']=s['terminal']+1 if best>=len(ids)-2 else 0 + if s['terminal']>20 or s['stall']>120: + last_status='reference_end_or_stall';return None + # If the active hand has reached the lookahead but the image/finger + # metric remains at an earlier state, advance one reference by observed + # waypoint completion. This is not a clock-indexed path replay. + active=int(np.linalg.norm(B['action'][j,22:25])>np.linalg.norm(B['action'][j,:3])) + ahead=min(best+2,len(ids)-1) + if s['stall']>=8 and best= 800 or _calls >= 799: + last_status = 'native_horizon_exhausted' + return None + try: + p = obs['proprioception'] + q = np.concatenate([np.asarray(p[f'agent/{r}/qpos'], dtype=np.float32).reshape(-1) for r in ROBOTS]) + v = np.concatenate([np.asarray(p[f'agent/{r}/qvel'], dtype=np.float32).reshape(-1) for r in ROBOTS]) + if q.shape != (46,) or v.shape != (46,) or not np.isfinite(q).all() or not np.isfinite(v).all(): + raise ValueError('invalid proprioception') + feats = np.stack([image_feature(obs['rgb'][cam]) for cam in CAMERAS]) + except (KeyError, ValueError, TypeError): + last_status = 'unsupported_observation' + return None + b = _load() + # Re-query ALL reference states every step. No locked demonstration or clock phase. + dq = (b['qpos']-q)/b['qscale'] + qdist = np.mean(dq*dq, axis=1) + dv = np.clip((b['qvel']-v)/1.0, -3., 3.) + vdist = np.mean(dv*dv, axis=1) + visual = np.zeros(len(qdist), dtype=np.float32) + for i in range(len(CAMERAS)): + df = b['image'][:, i]-feats[i] + visual += np.mean(df*df, axis=1)/(0.12**2*len(CAMERAS)) + distance = qdist + 1.5*visual + .01*vdist + if 'role' not in b: + b['role'] = np.zeros(len(b['action']), dtype=int) + for di in np.unique(b['demo_index']): + ii = np.flatnonzero(b['demo_index']==di) + role = int(np.linalg.norm(b['action'][ii[0],22:25]) > 0) + b['role'][ii] = role + b['pos'] = np.stack([fk(b['qpos'][:,i*23:i*23+7]) for i in range(2)],axis=1) + if _role is None: + _role = int(b['role'][np.argmin(distance)]) + distance[b['role'] != _role] += 100. + + best = int(np.argmin(distance)) + # Unsupported appearance/configuration: finish without inventing recovery. + # Thresholds are hand-chosen draft settings, not calibrated by rollouts. + if qdist[best] > 9. or visual[best] > 5.: + last_status = 'outside_reference_support' + return None + near = np.argsort(distance)[:8] + anchor = b['action'][best] + last_reference = (int(b['demo_index'][best]),int(b['frame'][best]),float(qdist[best]),float(visual[best])) + # Avoid averaging opposing commands or different active-arm phases. + arm_idx = np.array([0,1,2,22,23,24]) + near = near[np.max(np.abs(b['action'][near][:,arm_idx]-anchor[arm_idx]),axis=1) < .06] + if not len(near): + near = np.array([best]) + weights = np.exp(-(distance[near]-distance[best])/.04) + action = np.sum(b['action'][near]*weights[:,None],axis=0)/np.sum(weights) + # Small Cartesian correction toward the retrieved demonstrated pose. + # Generic Panda FK is rotated into the observed action axes, validated + # from authorized demo qpos/action differences, without task state access. + for arm in range(2): + current = fk(q[arm*23:arm*23+7]) + error = b['pos'][best,arm]-current + world = np.array([error[1],-error[0],error[2]]) if arm==0 else np.array([-error[1],error[0],error[2]]) + action[arm*22:arm*22+3] += np.clip(3.*world,-.08,.08) + target = b['qpos'][best,arm*23+7:arm*23+23] + action[arm*22+6:arm*22+22] += np.clip(2.*(target-q[arm*23+7:arm*23+23])[np.array([4,0,8,12,5,1,9,13,6,2,10,14,3,7,11,15])],-.2,.2) + # Native box projection; no changes to native frequency or delta semantics. + action = np.clip(action, -1., 1.).astype(np.float32) + if action.shape != (44,) or not np.isfinite(action).all(): + last_status = 'invalid_action' + return None + _calls += 1 + _last_action = action.copy() + last_status = 'reference_action' + return action diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..93cc5a40986473b5ca36d74e44a5ac70b15e3c8a --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/skills.md @@ -0,0 +1,13 @@ +# Current compiled skills + +1. Read legal front/right RGB and both robots' qpos; choose an initial demonstration path by visible appearance. All 20 authorized demonstrations remain available in the fixed non-neural bank. +2. Localize the gray lid in the legal top image using its dominant gray intensity and a connected-component rectangle. Estimate relative planar center/yaw from the chosen demo. This is approximate image registration, not calibrated hinge/contact sensing. +3. Adjust demonstrated Cartesian hand positions using generic Panda serial-chain geometry and a projection fitted from legal demo motion. Ramp each arm's adjustment with its own motion to preserve sequential role timing. +4. Re-select path progress each call from CURRENT hand positions, finger qpos, and front/right image descriptors. A local reference window limits large phase jumps. Translation preserves the demonstrated action rotated by the registered yaw, plus gain-3 Cartesian correction toward the current reference position, capped at 0.12 normalized per component. This retains contact motion even when a waypoint is reached. Rotation remains zero as in the demos. +5. Retain demonstrated finger deltas and add bounded finger-position feedback using the inferred action-to-observed-joint permutation. Earlier exploration exposed and corrected the incorrect assumption of identical action/qpos ordering. +6. Recover from reference ambiguity by advancing one row only after the active hand is observed within 12 mm of its lookahead following eight stalled decisions. This does not regrasp a lost object. Stop at the native horizon, a persistent terminal reference, or prolonged nonprogress. None never asserts success. No force sensing, verified grasp detector, or active regrasp recovery is implemented. + +No neural weights, network, model agent, simulator, reset, or privileged scene state is used at runtime. + + +Continuation before episode 10: registered hybrid uses preserved demonstrated translation feedforward plus bounded Cartesian correction, observed local progression and permuted hand feedback. Bank includes successful legal exploration paths 5 and 7; sparse episode 3 is excluded from path selection. Episode 9 augmented retrieval ended at step 566 with native success false. Localization remains approximate; grasp is unverified and there is no hinge-angle estimator. Independent validation pending. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/sparse_exploration_provenance.json b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/sparse_exploration_provenance.json new file mode 100644 index 0000000000000000000000000000000000000000..4ea48fed891c61235b86eebed1572a5c0d0b2b18 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/sparse_exploration_provenance.json @@ -0,0 +1,12 @@ +{ + "episode": 3, + "native_success": true, + "observation_action_frames": [ + 0, + 99, + 199, + 299 + ], + "source": "exploration/ep03", + "extra_demonstrations": 0 +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/synthetic_check_results.json b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/synthetic_check_results.json new file mode 100644 index 0000000000000000000000000000000000000000..3f1b8a6e93c48d1e0bce99a08c167ec8ddf9abd1 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/synthetic_check_results.json @@ -0,0 +1,9 @@ +{ + "passed": true, + "type": "syntax and synthetic-input only", + "reference_rows": 3759, + "synthetic_real_bank_call_seconds": 0.023926952853798866, + "real_bank_synthetic_status": "reference_action", + "environment_episodes": 0, + "task_success_evaluated": false +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/vision.py b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/vision.py new file mode 100644 index 0000000000000000000000000000000000000000..9f3e065b1850203b67b615e52e53c4e638d936ec --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/vision.py @@ -0,0 +1,22 @@ +import cv2 +import numpy as np + +def laptop_pose(image): + a=cv2.resize(np.asarray(image).squeeze(),(240,320),interpolation=cv2.INTER_AREA) + spread=np.max(a,axis=2).astype(float)-np.min(a,axis=2) + gray=a.mean(2) + region=gray[65:265,45:215];sat=spread[65:265,45:215] + samples=region[(sat<8)&(region>75)&(region<140)].astype(int) + if len(samples)<100:raise ValueError('no gray lid') + mode=np.argmax(np.bincount(samples,minlength=256)) + mask=((spread<10)&(abs(gray-mode)<4)).astype(np.uint8) + mask[:65]=0;mask[265:]=0;mask[:,:45]=0;mask[:,215:]=0 + n,lab,stats,cent=cv2.connectedComponentsWithStats(mask) + if n<2:raise ValueError('no lid region') + i=1+np.argmax(stats[1:,cv2.CC_STAT_AREA]);ys,xs=np.where(lab==i) + if len(xs)<150:raise ValueError('small lid region') + rect=cv2.minAreaRect(np.stack([xs,ys],1).astype(np.float32));box=cv2.boxPoints(rect) + edges=np.roll(box,-1,axis=0)-box;vec=edges[np.argmax(np.linalg.norm(edges,axis=1))] + if vec[0]<0:vec=-vec + vec/=np.linalg.norm(vec) + return np.asarray(rect[0]),vec,float(len(xs)),box diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenLaptop-v1/frozen/worker_api.py @@ -0,0 +1,81 @@ +"""Standalone worker client; safe to mount without the runner package.""" +import base64 +import json +import socket +import struct +import uuid +import os +from pathlib import Path + +import numpy as np + + +def array_hook(value): + if value.get('__array__') is True: + dtype=np.dtype(value['dtype']) + if dtype.kind not in 'bifu':raise ValueError('non-numeric array from service') + raw=base64.b64decode(value['data'],validate=True) + return np.frombuffer(raw,dtype=dtype).reshape(value['shape']).copy() + return value + + +class API: + def __init__(self,socket_path='/rpc/control.sock',demo_root='/demonstrations',manifest='/demo_manifest.json'): + self.socket_path=socket_path + self.demo_root=Path(demo_root) + self.manifest=Path(manifest) + + def call(self,method,arguments=None,request_id=None): + # Caller can persist a request ID before sending. Never automatically retry. + request_id=request_id or str(uuid.uuid4()) + request={'request_id':request_id,'method':method,'arguments':arguments or {}} + if os.environ.get('AGENT_E20_RPC_TOKEN'): + request['token']=os.environ['AGENT_E20_RPC_TOKEN'] + payload=json.dumps(request,allow_nan=False).encode() + if len(payload)>65536:raise ValueError('request too large') + with socket.socket(socket.AF_UNIX,socket.SOCK_STREAM) as s: + s.settimeout(1810);s.connect(self.socket_path) + s.sendall(struct.pack('!I',len(payload))+payload) + def exact(n): + chunks=[] + while n: + chunk=s.recv(min(n,1024*1024)) + if not chunk:raise RuntimeError('RPC interrupted; do not replay action with a new ID') + chunks.append(chunk);n-=len(chunk) + return b''.join(chunks) + length=struct.unpack('!I',exact(4))[0] + if length>64*1024*1024:raise RuntimeError('response too large') + result=json.loads(exact(length),object_hook=array_hook) + if not result['ok']:raise RuntimeError(result['error']) + return result['result'] + + def next_episode(self,request_id=None):return self.call('next_episode',request_id=request_id) + def latest_observation(self):return self.call('latest_observation') + def execute_actions(self,actions,request_id=None): + return self.call('execute_actions',{'actions':np.asarray(actions).tolist()},request_id) + def finish_episode(self):return self.call('finish_episode') + def budget_status(self):return self.call('budget_status') + def rehearse(self,candidate='candidate',request_id=None): + return self.call('rehearse',{'candidate':candidate},request_id) + def score_rehearsal(self,episode,visible_success,evidence): + return self.call('score_rehearsal',{'episode':episode,'visible_success':visible_success,'evidence':evidence}) + def freeze(self):return self.call('freeze') + + def read_demo(self,demo_id,start=0,stop=None,fields=None): + import h5py + manifest=json.loads(self.manifest.read_text()) + if manifest.get('status') not in ('released','released_for_offline_analysis'): + raise RuntimeError('demonstrations not released by trusted preflight') + entries={e['demo_id']:e for e in manifest['episodes']} + if demo_id not in entries:raise ValueError('unauthorized demo ID') + entry=entries[demo_id] + allowed={f['path'] for f in entry['fields']} + fields=sorted(allowed) if fields is None else fields + if not set(fields)<=allowed:raise ValueError('unauthorized demo field') + stop=entry['length']+1 if stop is None else stop + if not isinstance(start,int) or not isinstance(stop,int) or not 0<=start.5)+1 + close,release=map(int,changes[:2]);feats=[] + for lo in range(0,n,32): + hi=min(lo+32,n);ims=api.read_demo(e['demo_id'],lo,hi,[f'obs/sensor_data/{c}/rgb' for c in CAMERAS]) + feats.extend(image_features({c:ims[f'obs/sensor_data/{c}/rgb'][i] for c in CAMERAS}) for i in range(hi-lo)) + vals=dict(q=data['obs/agent/qpos'][:n],v=data['obs/agent/qvel'][:n],image=np.array(feats),action=np.clip(a,-1,1),time=np.arange(n),demo=np.full(n,di),phase=np.where(np.arange(n)1,axis=1).sum()),out_of_bounds_components=int((np.abs(a)>1).sum()),close=close,release=release)) + print(e['demo_id'],n,flush=True) +path=pathlib.Path(__file__).parent +np.savez_compressed(path/'memory.npz',**{k:np.concatenate(v) for k,v in parts.items()}) +(path/'compilation_audit.json').write_text(json.dumps(audit,indent=2)) diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/check_synthetic.py b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/check_synthetic.py new file mode 100644 index 0000000000000000000000000000000000000000..7bf1eca33c010638ec4147e312d71c5a25d3052b --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/check_synthetic.py @@ -0,0 +1,25 @@ +"""Interface tests using fabricated observations/memory, never a task rollout.""" +import importlib.util,pathlib,json,numpy as np +p=pathlib.Path(__file__).parent +s=importlib.util.spec_from_file_location('draft',p/'controller.py');c=importlib.util.module_from_spec(s);s.loader.exec_module(c) +checks=[] +# Check compiled artifact consistency without executing policy on demonstrations. +m=c._load();assert m['action'].shape[1]==22 and len(np.unique(m['demo']))==20 +assert np.isfinite(m['action']).all() and (np.abs(m['action'])<=1).all();checks.append('artifact: 20 demos, finite bounded 22-dimensional labels') +rows=len(m['action']);del m +c._memory={'time':np.array([1,1]),'q':np.stack([np.zeros(23),np.full(23,.3)]).astype('f'),'v':np.zeros((2,23),dtype='f'),'image':np.stack([np.full(2304,50/255),np.full(2304,90/255)]).astype('f'),'action':np.stack([np.full(22,-.4),np.full(22,.4)]).astype('f'),'phase':np.zeros(2,dtype=int)} +def obs(value=50,q=0,step=1,batch=False): + return {'rgb':{name:np.full((1,24,32,3) if batch else (24,32,3),value,dtype=np.uint8) for name in c._features.CAMERAS},'proprioception':{'agent/qpos':np.full(23,q,dtype=np.float32),'agent/qvel':np.zeros(23)},'instruction':'synthetic interface check','step_id':step} +c.reset_episode();a=c.act(obs());assert a.shape==(22,) and a.dtype==np.float32 and np.isfinite(a).all() and (np.abs(a)<=1).all();checks.append('flat finite float32 legal output') +c.reset_episode();assert np.allclose(a,c.act(obs(batch=True)));checks.append('HWC and singleton batch agree') +c.reset_episode();b=c.act(obs(q=.6));assert not np.allclose(a,b);checks.append('current proprioception changes output on synthetic memory') +c.reset_episode();b=c.act(obs(value=90));assert not np.allclose(a,b);checks.append('current RGB changes output on synthetic memory') +assert c.act(obs(step=520)) is None;checks.append('native horizon boundary') +bad=obs();bad['proprioception']['agent/qpos'][0]=np.nan;assert c.act(bad) is None +bad=obs();del bad['rgb']['front_camera'];assert c.act(bad) is None;checks.append('malformed inputs stop') +c.reset_episode() +for i in range(1,5):assert np.array_equal(c.act(obs(q=10,step=i)),np.zeros(22)) +assert c.act(obs(q=10,step=5)) is None;checks.append('sustained synthetic mismatch stops') +c.reset_episode();assert c._bad==0 and c._last_step==0;checks.append('reset clears episode state') +(p/'synthetic_checks.json').write_text(json.dumps({'status':'passed','scope':'synthetic input and artifact consistency only; no task evaluation','memory_rows':rows,'checks':checks},indent=2)+'\n') +print('\n'.join(checks)) diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/compilation_audit.json b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/compilation_audit.json new file mode 100644 index 0000000000000000000000000000000000000000..38f156f50c702e5a20a164e8d87e155daa1f7600 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/compilation_audit.json @@ -0,0 +1,302 @@ +[ + { + "demo_id": "demo_00", + "descriptor_frames": [ + 0, + 497 + ], + "action_rows": [ + 0, + 497 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 416 + }, + { + "demo_id": "demo_01", + "descriptor_frames": [ + 0, + 502 + ], + "action_rows": [ + 0, + 502 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 414 + }, + { + "demo_id": "demo_02", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 415 + }, + { + "demo_id": "demo_03", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 414 + }, + { + "demo_id": "demo_04", + "descriptor_frames": [ + 0, + 499 + ], + "action_rows": [ + 0, + 499 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 416 + }, + { + "demo_id": "demo_05", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 416 + }, + { + "demo_id": "demo_06", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 416 + }, + { + "demo_id": "demo_07", + "descriptor_frames": [ + 0, + 484 + ], + "action_rows": [ + 0, + 484 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 405 + }, + { + "demo_id": "demo_08", + "descriptor_frames": [ + 0, + 497 + ], + "action_rows": [ + 0, + 497 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 415 + }, + { + "demo_id": "demo_09", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 416 + }, + { + "demo_id": "demo_10", + "descriptor_frames": [ + 0, + 498 + ], + "action_rows": [ + 0, + 498 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 414 + }, + { + "demo_id": "demo_11", + "descriptor_frames": [ + 0, + 496 + ], + "action_rows": [ + 0, + 496 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 415 + }, + { + "demo_id": "demo_12", + "descriptor_frames": [ + 0, + 500 + ], + "action_rows": [ + 0, + 500 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 415 + }, + { + "demo_id": "demo_13", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 414 + }, + { + "demo_id": "demo_14", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 414 + }, + { + "demo_id": "demo_15", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 415 + }, + { + "demo_id": "demo_16", + "descriptor_frames": [ + 0, + 494 + ], + "action_rows": [ + 0, + 494 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 414 + }, + { + "demo_id": "demo_17", + "descriptor_frames": [ + 0, + 494 + ], + "action_rows": [ + 0, + 494 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 414 + }, + { + "demo_id": "demo_18", + "descriptor_frames": [ + 0, + 495 + ], + "action_rows": [ + 0, + 495 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 71, + "release": 416 + }, + { + "demo_id": "demo_19", + "descriptor_frames": [ + 0, + 498 + ], + "action_rows": [ + 0, + 498 + ], + "out_of_bounds_rows": 4, + "out_of_bounds_components": 26, + "close": 70, + "release": 414 + } +] \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/controller.py b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/controller.py new file mode 100644 index 0000000000000000000000000000000000000000..6e1dd4fcf8f1cb1b72db6b906fcfcb8e31f7492f --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/controller.py @@ -0,0 +1,89 @@ +"""Unrehearsed D20 observation-conditioned nonparametric draft. +No simulator, expert, hidden-state access, learned neural weights or demo-ID lock. +""" +from pathlib import Path +import importlib.util +import numpy as np +_spec=importlib.util.spec_from_file_location('_d20_features',Path(__file__).with_name('features.py')) +_features=importlib.util.module_from_spec(_spec);_spec.loader.exec_module(_features) +_memory=None +_bad=0 +_last_step=0 +_scene=None + +def reset_episode(): + global _bad,_last_step,_scene + _bad=0 + _last_step=0 + _scene=None + +def _load(): + global _memory + if _memory is None: + with np.load(Path(__file__).with_name('memory.npz'),allow_pickle=False) as f: + _memory={k:f[k] for k in f.files} + _memory['feedback']=np.load(Path(__file__).with_name('feedback.npy')) + _memory['scene']=np.load(Path(__file__).with_name('scene.npy')) + return _memory + +def act(obs): + global _bad,_last_step,_scene + # Step 1 follows the runner-owned hold; this module never issues that hold. + step=int(obs['step_id']) + if step<1 or step>=520:return None + if step<_last_step:reset_episode() + _last_step=step + try: + q=np.asarray(obs['proprioception']['agent/qpos'],dtype=np.float32).reshape(-1) + v=np.asarray(obs['proprioception']['agent/qvel'],dtype=np.float32).reshape(-1) + im=_features.image_features(obs['rgb']) + if q.shape!=(23,) or v.shape!=(23,) or not np.all(np.isfinite(q)) or not np.all(np.isfinite(v)):return None + except (KeyError,ValueError,TypeError): + return None + mem=_load() + if _scene is None: + import cv2 + a=cv2.resize(np.asarray(obs['rgb']['front_camera']).squeeze(),(320,240),interpolation=cv2.INTER_AREA).astype(float) + mask=(a[:,:,0]>130)&(a[:,:,1]>60)&(a[:,:,1]<180)&(a[:,:,2]<100)&(a[:,:,0]>1.5*a[:,:,1]);mask[:125]=False + n,labels,stats,centers=cv2.connectedComponentsWithStats(mask.astype('uint8')) + if n>1 and stats[1:,4].max()>30:_scene=centers[1+np.argmax(stats[1:,4])] + + # Pool all scenes each step. Time does not select a demo or prescribe actions. + phase=0 if step<71 else (1 if step<416 else 2) + ids=np.flatnonzero((np.abs(mem['time']-step)<=20) & (mem['phase']==phase)) + if not len(ids):return None + dq=mem['q'][ids]-q + dv=mem['v'][ids]-v + di=mem['image'][ids]-im + qcost=np.mean((dq[:,:7]/.18)**2,axis=1)+.35*np.mean((dq[:,7:]/.25)**2,axis=1) + vcost=.04*np.mean((dv/1.5)**2,axis=1) + icost=2*np.mean((di/.08)**2,axis=1) + cost=qcost+vcost+icost+1.0*((mem['time'][ids]-step)/15.)**2 + if _scene is not None and phase<2: + cost+=.5*np.sum(((mem['scene'][mem['demo'][ids]]-_scene)/2.)**2,axis=1) + best=int(np.argmin(cost));ref=ids[best] + # Uncalibrated conservative out-of-distribution stop; never claims completion. + uncertain=np.sqrt(np.mean(dq[best]**2))>.8 or np.sqrt(np.mean(di[best]**2))>.3 + _bad=_bad+1 if uncertain else 0 + if _bad>=5:return None + if uncertain:return np.zeros(22,dtype=np.float32) + # Do not average closure and release commands across a phase boundary. + compatible=np.flatnonzero((mem['phase'][ids]==mem['phase'][ref]) & (np.abs(mem['time'][ids]-mem['time'][ref])<=5)) + selected=compatible[np.argsort(cost[compatible])[:5]] + weights=np.exp(-(cost[selected]-cost[selected].min())/.25);weights/=weights.sum() + action=np.sum(mem['action'][ids[selected]]*weights[:,None],axis=0) + refq=np.sum(mem['q'][ids[selected]]*weights[:,None],axis=0) + correction=(refq[:7]-q[:7]) @ mem['feedback'][min(step,519)] / 15. + action[:6]+=np.clip(correction,-.08,.08) + perm=np.array([4,0,8,12,5,1,9,13,6,2,10,14,3,7,11,15]) + handq=q[7:][perm] + if phase==0: + goal=np.zeros(16);goal[12]=1.0 + action[6:]=.3*(goal-handq) + elif phase==1: + goal=np.array([0,1.3,1.3,1.3,0,1.3,1.3,1.3,0,1.3,1.3,1.3,1,0,1.3,1.3]) + action[6:]=.3*(goal-handq) + else: + action[6:]=-handq + # Action order is exactly the sole 22-wide contract part: xyz, rotation, 16 hand deltas. + return np.clip(action,-1,1).astype(np.float32) diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..b29031f21099d7bf618c15087e30ff4e98fdb774 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "HitBox-v1", + "status": "released", + "selection_rule": "prefer existing pinned D20, otherwise numeric trajectory ID sort before reading data", + "lineage_status": "pinned_comparator", + "episodes": [ + { + "demo_id": "demo_00", + "file": "demo_00.h5", + "length": 498, + "fields": [ + { + "path": "actions", + "shape": [ + 498, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 499, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 499, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 499, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 499, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 499, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 499, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "882e0d19131c02717853eb4a1316cb73da4a9b54e0abd43249d2daa695c043b5", + "source_sha256": "70e3583a303959fc4f55407db717f931635cf2079c937f55ab7a9cf4cabe2c8f", + "view_sha256": "f34f2c7404f80a389f9bac76000b7348175f9cd5adec0507867e4c7ab5f5bacc" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 503, + "fields": [ + { + "path": "actions", + "shape": [ + 503, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 504, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 504, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 504, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 504, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 504, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 504, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ae4060ebafaa60ace3a5bb6a821373dfc3a033ee80834a2c25f1e8eb7db7131c", + "source_sha256": "a0ef956d0bb5131fd06d2ba9be0097e165d878c35bb30bdb90be1eccf53692fd", + "view_sha256": "4b7814cb36b42f3226a42bbbff1557031c666ac9ce3d1b091ce42262a80dd75c" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ce0e67de58a160332802f5f9434a47c523733e0c491540df3ef99044de8b7c1a", + "source_sha256": "6cbe5e811492250c311a76d337057ca151cb4bc4eb48fba2c3b7d8b1f90bf6d6", + "view_sha256": "18c19dc7046258527553cb446258bc183446907081463c50cb01ac0b00e2d366" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "590feb89382c427c33309c77d91cd9f0ba0723471523f5c362047dc3fcaa22c9", + "source_sha256": "519f5ad382aae000e4df1f1a412b481e968c5ff47e291cc40e7036a827cc5261", + "view_sha256": "df907b34120775f4736fb80d16e1ebb74beedb535f8dac8e764477ae389b8c1f" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 500, + "fields": [ + { + "path": "actions", + "shape": [ + 500, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 501, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 501, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 501, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 501, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 501, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 501, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "517a80fc85a1d00f7040339c7b2c906ba656a8306e0ea4e9bb593597a85c97c3", + "source_sha256": "cde8a547b5c74835536c211793d9adb1278a90d455453b9e7b2292bc7d54a24b", + "view_sha256": "c607c433cd7279287449aae6b0d4122cfc5d14b543a2b2f2a5e90c23d3d507e2" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "aef404a339e2850d448b103cc5dffc0f5e111734a627c68f0251c9f6f587a6ac", + "source_sha256": "e2854afccd363f3148789452381c0c680ad772e0406b9f971029f13014ba7e03", + "view_sha256": "b3c9813632b0495be0a96739a57fd9ffd06f74321bea27fd01b4205d51943e52" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ea0d0c0063568d4e0e94b204ea6cab570d2a811a040785431c91e795d7c7648d", + "source_sha256": "1c2449071b25752463bc3b97d8e03675e99b61ee9ed8f9db4433e44ad24f086f", + "view_sha256": "631bccaaaef293772ae1edfef2bd6b222e92338aefbd0d060d27c1addc84fbc2" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 485, + "fields": [ + { + "path": "actions", + "shape": [ + 485, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 486, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 486, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 486, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 486, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 486, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 486, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "035b5ed88070fa4feac39417467575ac30988d3765a8be8ebd7b9b21a1198c7a", + "source_sha256": "04da03d2911bc4f30223875ad64ca05f9d7df1c206a1d206382cdf03231b64cf", + "view_sha256": "99d5f2eab330d89c9f234b2ce60a125ed843906f89ab4463466d9154b9f069a2" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 498, + "fields": [ + { + "path": "actions", + "shape": [ + 498, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 499, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 499, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 499, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 499, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 499, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 499, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6d8e0fe03548ab9ab8542d89b292f4c2fdf4d708a88a27f81bbd31251aacffab", + "source_sha256": "1c14c5dcee513645d0adc38a4313594049f25b4bb52f659c5a6262bbc41cf28b", + "view_sha256": "65cfa3fca29a0447cb1e3705dd9cac55c8ccc6ef6bf2ed8f06e9ff7cafe8a3bd" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d593c6101bf72ce3db5c0a30dde787e65814966d0b34db98053d0ef6278b8085", + "source_sha256": "127825691b1e82869e917b40b4cd350f56744289f556364ae7fb5c6707ce5a9a", + "view_sha256": "ed60902502cb709b8b4b1bd61ed10719bcd9ee077dddfc3235f5f82129265ad4" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 499, + "fields": [ + { + "path": "actions", + "shape": [ + 499, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 500, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 500, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 500, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 500, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 500, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 500, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "69ca4efbf6a980b7e8f5c21f14c05fe0f3cbb853dff2ec2939de5d4e822d507c", + "source_sha256": "fcab6ed2f25fd132f3a039272384970555073943fb63e88b8fe44e36137a3d4c", + "view_sha256": "64bf8f63b9300979f7bf24ad7fce82a3889937140c3df84f0683e539c891d919" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 497, + "fields": [ + { + "path": "actions", + "shape": [ + 497, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 498, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 498, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 498, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 498, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 498, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 498, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "23142820413e4458869a7b5fd7593d5b31200d0c8511246102a6962c01ee7254", + "source_sha256": "44e6fcab358d5215f4420f49bb70bc9c92e97118abbafef96e352fd6a464432c", + "view_sha256": "4614ad8ab4e4456021811131ff269152e4a3287e50379e7d5e6c1eec0eeaa365" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 501, + "fields": [ + { + "path": "actions", + "shape": [ + 501, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 502, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 502, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 502, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 502, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 502, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 502, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "1940cb63b3d4e2fff40d0802826a6422abae5c1f4abac20b48dcffa90e832a0b", + "source_sha256": "e2f7e7a633f1650320b48e62ec742bdefbc678863b30aff42cb1dc48b1bc3348", + "view_sha256": "ea012a513f966e0ac3941123b1156d029fb88dee6ab4d9f4dde968f845337f54" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ea8f7d91adbcc1522201dc58d91ebe4311c058177721df15a02e0c511ab61b70", + "source_sha256": "16dc436769993fa099c883090f35fd0d60fa8e663fe2d8734b7aacaf5c213ea8", + "view_sha256": "1cd861db962b1db5d1faf6f3302375d2e477c9029f65a43c8800b42adcb9ef10" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c531d53a857859e86410ca4309911027300955764b3b56fc16ed016aad5d0d85", + "source_sha256": "cf361bcc069fa428679af67f039b204b8de8b8cb07c44456c882860232aa6589", + "view_sha256": "01cbf238e27b314121aaec49661897f9078df8b35f8ce9100b8d59040681219e" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "aeca9bec07b99e3bf6e5f54d56311ab9183f4ec8121f7a1ed0a4ce9e2318181a", + "source_sha256": "018cbe80cb84ff0cedbdcbbbabf15e65d7ff85c47e047b0bccfaba83645e542c", + "view_sha256": "aa7944bfa68cf59f8005ab04e5fb3aebf90b6008176b0cd1457279a750fe5b16" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 495, + "fields": [ + { + "path": "actions", + "shape": [ + 495, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 496, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 496, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 496, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 496, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 496, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 496, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6a975be580d1b7dce0cb9e8157b15b7b8ba0e87f33f7011c8144b505ab50a08a", + "source_sha256": "1f23333767b2b24ec12d213f7372e5f3e0c9a1c5fdfdf10265b1fd4592fda01a", + "view_sha256": "e362583f092934ee150a4be9812d8177d3a38c686b366788460bae76fd754e21" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 495, + "fields": [ + { + "path": "actions", + "shape": [ + 495, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 496, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 496, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 496, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 496, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 496, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 496, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8000a4a7ad842d90a06383826b65f4c2b10994247a1f8170a1f790bc5774b429", + "source_sha256": "6345dabc9d0d2c8eeb95e58847d967d1039db65edbd2087c280e9d3081cd88ea", + "view_sha256": "f4447d2ab566d892da7d60fe85feb933532acb0d643947b798cfb6edeb21ce18" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 496, + "fields": [ + { + "path": "actions", + "shape": [ + 496, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 497, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 497, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 497, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "663e9fb76d224195e82c4d8fcc46d69bc5ebf03581361e72957726d4e7dfd270", + "source_sha256": "27e47f2a09e93eb1b0ce5b5f2f4efd61d7de1b9103eb8274a1bd61fd74929c1a", + "view_sha256": "12237e8433bd886f1fd5b5313de21a70f956a882e1495e449885ae7792346f13" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 499, + "fields": [ + { + "path": "actions", + "shape": [ + 499, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 500, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 500, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 500, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 500, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 500, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 500, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "55b452a78691299115c66f6d48a51946b2f61f572870a2eaa23b80ad2088ff8b", + "source_sha256": "b6a66205ec84e22910cb07571e6f30470ea0c0baac8d4f1dd70f3915c382c478", + "view_sha256": "b3eb08a5c59787458c47486c648078cade25bc54390be26f1606f41f7e1303f9" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/environment.lock @@ -0,0 +1,249 @@ +absl-py==2.4.0 +accelerate==1.13.0 +addict==2.4.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.13.5 +aiosignal==1.4.0 +annotated-types==0.7.0 +anyio==4.13.0 +anytree==2.13.0 +asttokens==3.0.1 +async-timeout==5.0.1 +attrs==26.1.0 +av==15.1.0 +blinker==1.9.0 +casadi==3.7.2 +certifi==2026.4.22 +cffi==2.0.0 +charset-normalizer==3.4.7 +click==8.3.3 +cloudpickle==3.1.2 +cmake==4.1.3 +coacd==1.0.11 +colorama==0.4.6 +colorlog==6.10.1 +comm==0.2.3 +ConfigArgParse==1.7.5 +contourpy==1.3.2 +cuda-bindings==12.9.4 +cuda-pathfinder==1.5.4 +cycler==0.12.1 +dacite==1.9.2 +dash==4.1.0 +dataclasses-json==0.6.7 +datasets==4.8.5 +decorator==5.2.1 +deepdiff==8.6.2 +Deprecated==1.3.1 +diffusers==0.35.2 +dill==0.4.1 +docstring_parser==0.18.0 +draccus==0.10.0 +einops==0.8.2 +embreex==4.4.0 +etils==1.13.0 +evdev==1.9.3 +exceptiongroup==1.3.1 +executing==2.2.1 +Farama-Notifications==0.0.6 +fast_simplification==0.1.13 +fastjsonschema==2.21.2 +filelock==3.29.0 +Flask==3.1.3 +fonttools==4.63.0 +freetype-py==2.5.1 +frozenlist==1.8.0 +fsspec==2026.2.0 +genesis-world @ file:///data/gck/genesis-world +git-filter-repo==2.47.0 +gitdb==4.0.12 +GitPython==3.1.50 +glfw==2.10.0 +gs-madrona==0.0.5 +gstaichi==3.3.0 +gym==0.26.2 +gym-notices==0.1.0 +gymnasium==1.3.0 +h11==0.16.0 +h5py==3.16.0 +hf-xet==1.5.0 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface-hub==0.35.3 +idna==3.15 +ImageIO==2.37.3 +imageio-ffmpeg==0.6.0 +importlib_metadata==9.0.0 +importlib_resources==7.1.0 +inquirerpy==0.3.4 +ipython==8.39.0 +ipywidgets==8.1.8 +itsdangerous==2.2.0 +jedi==0.20.0 +Jinja2==3.1.6 +joblib==1.5.3 +jsonlines==4.0.0 +jsonschema==4.26.0 +jsonschema-specifications==2025.9.1 +jupyter_core==5.9.1 +jupyterlab_widgets==3.0.16 +kiwisolver==1.5.0 +lazy-loader==0.5 +lerobot==0.4.4 +libigl==2.6.2 +llvmlite==0.47.0 +loguru==0.7.3 +lxml==6.1.0 +manifold3d==3.4.1 +-e git+ssh://git@github.com/HeegerGao/maniladder.git@f6eed17496816bb41ce484f2d7580990a908d3e6#egg=maniladder +mapbox_earcut==2.0.0 +markdown-it-py==4.2.0 +MarkupSafe==3.0.3 +marshmallow==3.26.2 +matplotlib==3.10.9 +matplotlib-inline==0.2.2 +mdurl==0.1.2 +mergedeep==1.3.4 +moviepy==2.2.1 +mpmath==1.3.0 +msgspec==0.21.1 +mujoco==3.8.1 +multidict==6.7.1 +multiprocess==0.70.19 +mypy_extensions==1.1.0 +nbformat==5.10.4 +nest-asyncio==1.6.0 +networkx==3.4.2 +ninja==1.13.0 +nlopt==2.10.0 +numba==0.65.1 +numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1747544640217/work/dist/numpy-2.2.6-cp310-cp310-linux_x86_64.whl#sha256=d6d964caeef85d00073d27cd62b46883d275b3d8162f723f0fcabbd0b3cc3f9d +nvidia-cublas-cu12==12.8.4.1 +nvidia-cuda-cupti-cu12==12.8.90 +nvidia-cuda-nvrtc-cu12==12.8.93 +nvidia-cuda-runtime-cu12==12.8.90 +nvidia-cudnn-cu12==9.10.2.21 +nvidia-cufft-cu12==11.3.3.83 +nvidia-cufile-cu12==1.13.1.3 +nvidia-curand-cu12==10.3.9.90 +nvidia-cusolver-cu12==11.7.3.90 +nvidia-cusparse-cu12==12.5.8.93 +nvidia-cusparselt-cu12==0.7.1 +nvidia-nccl-cu12==2.27.5 +nvidia-nvjitlink-cu12==12.8.93 +nvidia-nvshmem-cu12==3.4.5 +nvidia-nvtx-cu12==12.8.90 +open3d==0.19.0 +opencv-python==4.13.0.92 +opencv-python-headless==4.12.0.88 +OpenEXR==3.4.11 +orderly-set==5.5.0 +packaging==25.0 +pandas==2.3.3 +parso==0.8.7 +pexpect==4.9.0 +pfzy==0.3.4 +pillow==11.3.0 +pin==4.0.0 +pip @ file:///home/task_177498883471825/croot/pip_1774988882575/work +platformdirs==4.9.6 +plotly==5.24.1 +polyscope==2.6.1 +proglog==0.1.12 +prompt_toolkit==3.0.52 +propcache==0.5.2 +protobuf==6.33.6 +psutil==7.2.2 +ptyprocess==0.7.0 +pure_eval==0.2.3 +py-cpuinfo==9.0.0 +py-spy==0.4.2 +pyarrow==24.0.0 +pycollada==0.9.3 +pycparser==3.0 +pydantic==2.13.4 +pydantic_core==2.46.4 +PyGEL3D==0.6.1 +pyglet==2.1.14 +pygltflib==1.16.0 +Pygments==2.20.0 +pymeshlab==2025.7.post1 +pynput==1.8.2 +PyOpenGL==3.1.10 +pyparsing==3.3.2 +pyperclip==1.11.0 +PyQt6==6.11.0 +PyQt6-Qt6==6.11.0 +PyQt6_sip==13.11.1 +pyquaternion==0.9.9 +pyserial==3.5 +pysplashsurf==0.12.0.2 +python-dateutil==2.9.0.post0 +python-dotenv==1.2.2 +python-xlib==0.33 +pytransform3d==3.15.0 +pytz==2026.2 +pyuipc @ file:///tmp/claude-1005/-mnt4-gck-maniladder/9f005e67-04f6-4368-bd0e-9f40896c7dbf/scratchpad/pyuipc_dl/pyuipc-0.0.25-cp310-cp310-manylinux_2_34_x86_64.whl#sha256=76ff13554e1971ea4401db2c875369cf32352ae3a5a4c398c45193231b5cbf00 +PyYAML==6.0.3 +pyyaml-include==1.4.1 +referencing==0.37.0 +regex==2026.5.9 +requests==2.34.2 +rerun-sdk==0.26.2 +retrying==1.4.2 +rich==14.3.4 +rpds-py==0.30.0 +rtree==1.4.1 +safetensors==0.7.0 +sapien==3.0.3 +scikit-image==0.25.2 +scikit-learn==1.7.2 +scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy-split_1739790642651/work/dist/scipy-1.15.2-cp310-cp310-linux_x86_64.whl#sha256=9e52bad6c3294d1a5b04a13632118ca2157130603c6c018c2d710162b223b27e +sentry-sdk==2.60.0 +setuptools==80.10.2 +shapely==2.1.2 +six==1.17.0 +smmap==5.0.3 +stack-data==0.6.3 +svg.path==7.0 +sympy==1.14.0 +tenacity==9.1.4 +termcolor==3.3.0 +tetgen==0.8.4 +threadpoolctl==3.6.0 +tifffile==2025.5.10 +timm==1.0.27 +toml==0.10.2 +torch==2.10.0 +torchaudio==2.11.0 +torchcodec==0.10.0 +torchvision==0.25.0 +tqdm==4.67.3 +traitlets==5.15.0 +transforms3d==0.4.2 +trimesh==4.12.2 +triton==3.6.0 +typeguard==4.5.2 +typing-inspect==0.9.0 +typing-inspection==0.4.2 +typing_extensions==4.15.0 +tyro==1.0.13 +tzdata==2026.2 +urllib3==2.7.0 +vhacdx==0.0.10 +viser==1.0.27 +vtk==9.6.1 +wandb==0.24.2 +wcwidth==0.7.0 +websockets==16.0 +Werkzeug==3.1.8 +wheel==0.46.3 +widgetsnbextension==4.0.15 +wrapt==2.1.2 +xxhash==3.7.0 +yarl==1.23.0 +yourdfpy==0.0.60 +z3-solver==4.16.0.0 +zipp==3.23.1 +zstandard==0.25.0 diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/features.py b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/features.py new file mode 100644 index 0000000000000000000000000000000000000000..ab6029a13be9b9495590c5465355c3f7ac397f87 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/features.py @@ -0,0 +1,12 @@ +"""Fixed RGB descriptors; no pretrained or trained neural weights.""" +import cv2 +import numpy as np +CAMERAS=('front_camera','left_camera','robot_camera','top_camera') +def image_features(rgb): + out=[] + for camera in CAMERAS: + a=np.asarray(rgb[camera]) + if a.ndim==4 and a.shape[0]==1:a=a[0] + if a.ndim!=3 or a.shape[2]!=3 or a.dtype!=np.uint8:raise ValueError('Expected uint8 RGB HWC') + out.append(cv2.resize(a,(16,12),interpolation=cv2.INTER_AREA).reshape(-1).astype(np.float32)/255.) + return np.concatenate(out) diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..2df12e5df37990b04cb91d65c86cfad3a7904481 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/findings.md @@ -0,0 +1,8 @@ +# Findings +All 20 authorized demonstrations were analyzed; ../demo_analysis.md preserves the actual analysis and visual inspection ledger. Raw hand release labels exceeded legal bounds; compiled labels are clipped. + +Legal continuation: episode1 original retrieval completed 520 steps with native success false. Approach and towing occurred, but phase matching jumped early to release and the box remained partly supported. Episode2 timed phase matching completed520 steps with target still supported. Finger positions overshot the demonstrated open pose; carriage moved away during late motion. Episode3 tests bounded differential arm correction plus feedback opening. No official successes are invented. + +Localization: fixed four-camera descriptors; orange target localization was investigated with image-size normalization, not yet used in control. Pose: local numeric calibration uses authorized joint differences and action labels only. Grasp: image evidence supports contact/retention during tow, without force confirmation. Timing: close71/release416 are demo-derived approximations. Recovery: OOD stop is heuristic; no reliable regrasp exists. Program failure: initial harness nested-response parsing fixed in episode1 without resetting or replaying actions. + +Episode4 independently completed at step456, valid=true, success=false from native_step_feedback. The exact bundle hash is d83dead01b33eafcc69b762b2401066d5055aefdb7fcfd799744ef47eb3f4f9b. Hand-feedback ordering was wrong in that version. Authorized demo labels identify exact action-to-qpos[7:] permutation [4,0,8,12,5,1,9,13,6,2,10,14,3,7,11,15]. Corrected candidate uses .3*(closed_goal-q_mapped) during grasp and -q_mapped during release. This relation matches demo release labels exactly before legal clipping, and closed targets to numerical precision. No imported task code is used. diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..01f566c5f49827ff3a0a36d36417db70cdd61dfb --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/freeze_manifest.json @@ -0,0 +1,179 @@ +{ + "files": { + "__pycache__/build_memory.cpython-310.pyc": "46e45fa24c1a7cd7270b90c7aee22b8739c63fef381b474194961b1a91e83a22", + "__pycache__/check_synthetic.cpython-310.pyc": "4eb8b2d2903c5ae9feb22125948dbca6f16509df56e26db5fdfa49341dc314a8", + "__pycache__/controller.cpython-310.pyc": "7def9e7f7ea9e218172a867fb81cb0e5867add43d0ae355c04ff16e30d8d67c8", + "__pycache__/features.cpython-310.pyc": "c0fbcc66b02343f30d36598da8303199c172f61e0898cec76e9536f714fc4b76", + "build_memory.py": "645165c9d9166c3ff061b4f600fdcd726cf63a20f07caa8dd85c25ba4eb51986", + "check_synthetic.py": "a53998f357400b1b920b7d831f1ccb4009fd659ddb6f5759899c91d1698d7baf", + "compilation_audit.json": "1541ef93249ddeda1cdbe9288f53ed3f3a6a0ddea04c2b0aef9ae33db99bc0f2", + "controller.py": "098c7eb82fe39301ce36b949f3becb85fbe7e920cabf2a22d0d1e4fcc0206564", + "demo_manifest.json": "f23aba3c8aca3ef52d8d9e613f276301d1d4aad317602b9722a0ab3d8c36c76b", + "demonstrations_readonly/demo_00.h5": "f34f2c7404f80a389f9bac76000b7348175f9cd5adec0507867e4c7ab5f5bacc", + "demonstrations_readonly/demo_01.h5": "4b7814cb36b42f3226a42bbbff1557031c666ac9ce3d1b091ce42262a80dd75c", + "demonstrations_readonly/demo_02.h5": "18c19dc7046258527553cb446258bc183446907081463c50cb01ac0b00e2d366", + "demonstrations_readonly/demo_03.h5": "df907b34120775f4736fb80d16e1ebb74beedb535f8dac8e764477ae389b8c1f", + "demonstrations_readonly/demo_04.h5": "c607c433cd7279287449aae6b0d4122cfc5d14b543a2b2f2a5e90c23d3d507e2", + "demonstrations_readonly/demo_05.h5": "b3c9813632b0495be0a96739a57fd9ffd06f74321bea27fd01b4205d51943e52", + "demonstrations_readonly/demo_06.h5": "631bccaaaef293772ae1edfef2bd6b222e92338aefbd0d060d27c1addc84fbc2", + "demonstrations_readonly/demo_07.h5": "99d5f2eab330d89c9f234b2ce60a125ed843906f89ab4463466d9154b9f069a2", + "demonstrations_readonly/demo_08.h5": "65cfa3fca29a0447cb1e3705dd9cac55c8ccc6ef6bf2ed8f06e9ff7cafe8a3bd", + "demonstrations_readonly/demo_09.h5": "ed60902502cb709b8b4b1bd61ed10719bcd9ee077dddfc3235f5f82129265ad4", + "demonstrations_readonly/demo_10.h5": "64bf8f63b9300979f7bf24ad7fce82a3889937140c3df84f0683e539c891d919", + "demonstrations_readonly/demo_11.h5": "4614ad8ab4e4456021811131ff269152e4a3287e50379e7d5e6c1eec0eeaa365", + "demonstrations_readonly/demo_12.h5": "ea012a513f966e0ac3941123b1156d029fb88dee6ab4d9f4dde968f845337f54", + "demonstrations_readonly/demo_13.h5": "1cd861db962b1db5d1faf6f3302375d2e477c9029f65a43c8800b42adcb9ef10", + "demonstrations_readonly/demo_14.h5": "01cbf238e27b314121aaec49661897f9078df8b35f8ce9100b8d59040681219e", + "demonstrations_readonly/demo_15.h5": "aa7944bfa68cf59f8005ab04e5fb3aebf90b6008176b0cd1457279a750fe5b16", + "demonstrations_readonly/demo_16.h5": "e362583f092934ee150a4be9812d8177d3a38c686b366788460bae76fd754e21", + "demonstrations_readonly/demo_17.h5": "f4447d2ab566d892da7d60fe85feb933532acb0d643947b798cfb6edeb21ce18", + "demonstrations_readonly/demo_18.h5": "12237e8433bd886f1fd5b5313de21a70f956a882e1495e449885ae7792346f13", + "demonstrations_readonly/demo_19.h5": "b3eb08a5c59787458c47486c648078cade25bc54390be26f1606f41f7e1303f9", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "features.py": "1c31872d83ecfdf74ed922b04c74ce4139bd8b082a37bfb0cdbb65efce49d2f1", + "feedback.npy": "908342dd55e1c83c7333bec471a18dbda954b1bd1099baf91c1636555d3a42bd", + "findings.md": "9b292495ea08dd07c1dbf631466e45d8c1418c50ce9a9c018d94f04210db2f02", + "handoff.md": "e794593ab12a80461a1da09eaf1546461a985bd23e5802284f2b193b9ca84455", + "memory.npz": "a042e217f4cb2ba1da10089a465d1e4521848e18501c05486f2d8eb9e2b7af58", + "model_tool_manifest.yaml": "8c42140f65bd84f75ae47f3b130caea32c230474297b0d1c9c0eb33dabdd419a", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "scene.npy": "3f3066139950be6643ef10bb3e2c2d0fdef6fc45a2ab0b7fb5c7a02f0a265026", + "skills.md": "a2797328163588c80325fc7914ff54f2d2b710e7c857dada36b1a6d844679840", + "synthetic_checks.json": "d33520d8398ee4b08bf3fed1bf082f9f4bc77fc544db9c0aeafb919ad14c2965", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "b95985e0de734349ec4981889d535e655e9dd9d8f0572a22a6875d76f86e0047", + "exploration_ledger_hash": "3bf2cc4ca206754b3b33e4ddac450640090f37d6aa94dc07040afe088d3c518d", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "bundle_hash": "d83dead01b33eafcc69b762b2401066d5055aefdb7fcfd799744ef47eb3f4f9b", + "episode": 4, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "74b4a1da54ce3db40daa1ab65f027c1e305a86791cb2df63e7ef7643ee15f25c", + "episode": 5, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "episode": 9, + "bundle_hash": "0ec51e652d0d6d3f33c672566464b8ca9f2e0cc56c511db6a6be216e0834a3f4", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 10, + "bundle_hash": "0709e123f798f2a656de074a3565044b4da19183cef4589425c0677f5b2ca1ba", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 11, + "bundle_hash": "5142255b2989cbf82ecdf186a8ec005da7cd4a38657c8bd873875ab2c69f7e85", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 12, + "bundle_hash": "b95985e0de734349ec4981889d535e655e9dd9d8f0572a22a6875d76f86e0047", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 13, + "bundle_hash": "1fe22f0b762c0185769d9ac3d14b29ddb1456a6af6ce90aa8446538ca14363d2", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 14, + "bundle_hash": "1fe22f0b762c0185769d9ac3d14b29ddb1456a6af6ce90aa8446538ca14363d2", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 15, + "bundle_hash": "1fe22f0b762c0185769d9ac3d14b29ddb1456a6af6ce90aa8446538ca14363d2", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 16, + "bundle_hash": "1fe22f0b762c0185769d9ac3d14b29ddb1456a6af6ce90aa8446538ca14363d2", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "1fe22f0b762c0185769d9ac3d14b29ddb1456a6af6ce90aa8446538ca14363d2", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "1fe22f0b762c0185769d9ac3d14b29ddb1456a6af6ce90aa8446538ca14363d2", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "1fe22f0b762c0185769d9ac3d14b29ddb1456a6af6ce90aa8446538ca14363d2", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "1fe22f0b762c0185769d9ac3d14b29ddb1456a6af6ce90aa8446538ca14363d2", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..fd0f6c53c775cb6ab4c31253e6f2e97758279821 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/handoff.md @@ -0,0 +1,8 @@ +# Handoff +Agent-D20-E20-Compiled continuation for HitBox-v1. Development in progress; not frozen. Only this task's 20 authorized demos and legal API exploration are used. + +controller.py exposes reset_episode() and act(obs). Runtime: Python, NumPy, OpenCV. Bundle-local features.py, memory.npz and feedback.npy are required. No network, model-development agent, simulator, hidden state, or neural weights. The runner supplies verified demo manifest and common environment lock. + +Observation contract: RGB mapping for four cameras, proprioception agent/qpos and agent/qvel, step_id. Returns bounded 22-vector or None. Initial native hold is runner-owned. Horizon 520. All development interactions use /worker_api.py API, never a separate environment. Original offline artifact and prior versions remain in ../versions; legal images, actions, API returns and notes remain in ../exploration. + +Current candidate uses observed RGB/joints to retrieve same-phase demonstration action labels within a narrow time window. Bounded local differential arm correction combats pose drift. Hand control uses the exact permutation inferred from authorized labels; release uses feedback to demonstrated open finger positions to avoid repeated negative delta overshoot. These mechanisms do not guarantee a grasp or a safe stand-off. Native success must be read only from returned fields; visible judgment is conservative when native success is unavailable. diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3fbfd618c5320b05448d6bcf1a041b2f33300992 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,87 @@ +{ + "stage": "Agent-D20-E20-Compiled legal exploration", + "status": "development", + "python": "3.10.20 (main, Mar 11 2026, 17:46:40) [GCC 14.3.0]", + "platform": "Linux-5.15.0-94-generic-x86_64-with-glibc2.35", + "versions": { + "numpy": "2.2.6", + "scipy": "1.15.3", + "h5py": "3.16.0", + "torch": "2.10.0", + "opencv_runtime": "4.12.0" + }, + "runtime_dependencies": [ + "Python", + "numpy", + "opencv" + ], + "build_dependencies": [ + "h5py", + "worker_api.py", + "numpy", + "opencv" + ], + "tools_actually_used": [ + "shell via exec_command", + "Python standard library", + "NumPy", + "OpenCV resize/contact sheets", + "h5py via API.read_demo", + "view_image" + ], + "available_not_used_for_computation": [ + "SciPy", + "torch" + ], + "network": { + "used": false, + "restriction": "audited provider proxy only; availability untested" + }, + "models": { + "coding_model": "provider-supplied coding model; exact build/weight reference not exposed", + "pretrained_tool_weights": [], + "neural_finetuning": false, + "weights_changed": false, + "numeric_calibration": "Ridge local differential maps from authorized demo q differences and action labels; no neural fitting" + }, + "provenance": { + "contract_sha256": "37b7b0aa8f6b7412a2f84935c85fa60e796c3c14acd97db9ad6b3bfcd742b6b9", + "manifest_sha256": "58f62da79ca02b3144d36f48d2584a841a0adc996f09c77412183194cb530595", + "worker_api_sha256": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e", + "demo_ids": [ + "demo_00", + "demo_01", + "demo_02", + "demo_03", + "demo_04", + "demo_05", + "demo_06", + "demo_07", + "demo_08", + "demo_09", + "demo_10", + "demo_11", + "demo_12", + "demo_13", + "demo_14", + "demo_15", + "demo_16", + "demo_17", + "demo_18", + "demo_19" + ], + "data": "Only authorized sanitized RGB, proprioception and action labels; verified manifest supplied separately", + "derived_asset": "memory.npz: fixed RGB descriptors and clipped action/proprioception exemplars, no neural model" + }, + "validation": [ + "syntax and synthetic prior checks", + "API-only legal exploration" + ], + "exploration_episodes": 3, + "limitations": [ + "No metric camera calibration or contact sensors", + "Narrow demonstration coverage", + "Success only from native returns or conservative visible rule" + ], + "validation_result": "Syntax and synthetic checks passed; initial harness corrections documented in demo_analysis.md" +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/policy_runner.py @@ -0,0 +1,25 @@ +"""Frozen-program entry point; no development agent and no reset capability.""" +import importlib.util +import sys + +sys.path.insert(0,'/artifact') +sys.path.insert(0,'/') +from worker_api import API + + +def main(): + spec=importlib.util.spec_from_file_location('controller','/artifact/controller.py') + module=importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + module.reset_episode() + api=API() + result=api.latest_observation() + while not (result['terminated'] or result['truncated'] or result['horizon_reached']): + obs=dict(result['observation'],step_id=result['step_id']) + action=module.act(obs) + if action is None:break + response=api.execute_actions([action]) + result=response['steps'][-1] + + +if __name__=='__main__':main() diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..c11b99d7bb6373b3d86f45bcfd15838d910e6d0f --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/skills.md @@ -0,0 +1,8 @@ +# Controller skills +1. Approach using image/joint-conditioned demonstration retrieval. +2. Close around the handle and tow with same-phase labels. +3. Lift along the demonstrated arc with bounded arm pose correction. +4. At release, drive finger joints toward the demonstrated open pose and withdraw. +5. Stop at the native horizon or on malformed observations/sustained large mismatch. + +No calibrated metric stand-off or contact estimator is available. Phase timing is approximate. There is no demonstrated recovery guarantee. See findings.md and handoff.md. No external Codex skill or pretrained model is used. diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/synthetic_checks.json b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/synthetic_checks.json new file mode 100644 index 0000000000000000000000000000000000000000..5db78909ea109828c82b2d8308660a37018ee371 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/synthetic_checks.json @@ -0,0 +1,16 @@ +{ + "status": "passed", + "scope": "synthetic input and artifact consistency only; no task evaluation", + "memory_rows": 9934, + "checks": [ + "artifact: 20 demos, finite bounded 22-dimensional labels", + "flat finite float32 legal output", + "HWC and singleton batch agree", + "current proprioception changes output on synthetic memory", + "current RGB changes output on synthetic memory", + "native horizon boundary", + "malformed inputs stop", + "sustained synthetic mismatch stops", + "reset clears episode state" + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/HitBox-v1/frozen/worker_api.py @@ -0,0 +1,81 @@ +"""Standalone worker client; safe to mount without the runner package.""" +import base64 +import json +import socket +import struct +import uuid +import os +from pathlib import Path + +import numpy as np + + +def array_hook(value): + if value.get('__array__') is True: + dtype=np.dtype(value['dtype']) + if dtype.kind not in 'bifu':raise ValueError('non-numeric array from service') + raw=base64.b64decode(value['data'],validate=True) + return np.frombuffer(raw,dtype=dtype).reshape(value['shape']).copy() + return value + + +class API: + def __init__(self,socket_path='/rpc/control.sock',demo_root='/demonstrations',manifest='/demo_manifest.json'): + self.socket_path=socket_path + self.demo_root=Path(demo_root) + self.manifest=Path(manifest) + + def call(self,method,arguments=None,request_id=None): + # Caller can persist a request ID before sending. Never automatically retry. + request_id=request_id or str(uuid.uuid4()) + request={'request_id':request_id,'method':method,'arguments':arguments or {}} + if os.environ.get('AGENT_E20_RPC_TOKEN'): + request['token']=os.environ['AGENT_E20_RPC_TOKEN'] + payload=json.dumps(request,allow_nan=False).encode() + if len(payload)>65536:raise ValueError('request too large') + with socket.socket(socket.AF_UNIX,socket.SOCK_STREAM) as s: + s.settimeout(1810);s.connect(self.socket_path) + s.sendall(struct.pack('!I',len(payload))+payload) + def exact(n): + chunks=[] + while n: + chunk=s.recv(min(n,1024*1024)) + if not chunk:raise RuntimeError('RPC interrupted; do not replay action with a new ID') + chunks.append(chunk);n-=len(chunk) + return b''.join(chunks) + length=struct.unpack('!I',exact(4))[0] + if length>64*1024*1024:raise RuntimeError('response too large') + result=json.loads(exact(length),object_hook=array_hook) + if not result['ok']:raise RuntimeError(result['error']) + return result['result'] + + def next_episode(self,request_id=None):return self.call('next_episode',request_id=request_id) + def latest_observation(self):return self.call('latest_observation') + def execute_actions(self,actions,request_id=None): + return self.call('execute_actions',{'actions':np.asarray(actions).tolist()},request_id) + def finish_episode(self):return self.call('finish_episode') + def budget_status(self):return self.call('budget_status') + def rehearse(self,candidate='candidate',request_id=None): + return self.call('rehearse',{'candidate':candidate},request_id) + def score_rehearsal(self,episode,visible_success,evidence): + return self.call('score_rehearsal',{'episode':episode,'visible_success':visible_success,'evidence':evidence}) + def freeze(self):return self.call('freeze') + + def read_demo(self,demo_id,start=0,stop=None,fields=None): + import h5py + manifest=json.loads(self.manifest.read_text()) + if manifest.get('status') not in ('released','released_for_offline_analysis'): + raise RuntimeError('demonstrations not released by trusted preflight') + entries={e['demo_id']:e for e in manifest['episodes']} + if demo_id not in entries:raise ValueError('unauthorized demo ID') + entry=entries[demo_id] + allowed={f['path'] for f in entry['fields']} + fields=sorted(allowed) if fields is None else fields + if not set(fields)<=allowed:raise ValueError('unauthorized demo field') + stop=entry['length']+1 if stop is None else stop + if not isinstance(start,int) or not isinstance(stop,int) or not 0<=start100) + rows=np.flatnonzero(grey[:,213:220].mean(1)>.7);rows=rows[(rows>60)&(rows<250)] + if len(rows)<30:raise ValueError('Cannot localize platform') + lo,hi=rows.min(),rows.max() + mask=(r>g*1.18)&(g>b*1.08)&(r>35) + mask[:lo+3]=False;mask[hi-2:]=False;mask[:,:100]=False;mask[:,218:]=False + n,lab,stat,cen=cv2.connectedComponentsWithStats(mask.astype('uint8')) + if n<2:raise ValueError('Cannot localize book') + i=int(np.argmax(stat[1:,4]))+1;ys,xs=np.where(lab==i) + (cx,cy),(w,h),angle=cv2.minAreaRect(np.array([xs,ys]).T.astype('float32')) + angle=np.deg2rad(angle+(90 if h>w else 0)) + return np.array([cx,cy,angle]) + +def platform_y(im): + im=cv2.resize(np.asarray(im).squeeze(),(240,320)) + gray=(im.max(2).astype(float)-im.min(2)<20)&(im.min(2)>100) + rows=np.flatnonzero(gray[:,213:220].mean(1)>.7);rows=rows[(rows>60)&(rows<250)] + if len(rows)<30:raise ValueError('Platform not localized') + return (float(rows.min())+float(rows.max()))/2 + +def register(rgb): + m=_load();im=cv2.resize(np.asarray(rgb).squeeze(),(240,320)).astype(np.float32)/255 + candidates=[] + live_y=platform_y(rgb) + for j,ref in enumerate(m['initial']): + shift0=int(round(live_y-platform_y(ref))) + ref=ref.astype(np.float32)/255;best=(1e9,j,0) + for shift in range(shift0-3,shift0+4): + lo=max(55,55+shift);hi=min(265,265+shift) + d=(im[lo:hi,108:235]-ref[lo-shift:hi-shift,108:235])**2 + score=float(d.mean())+.000002*abs(shift) + if score=500:return None + if step<=_last:raise ValueError('Nonmonotonic step') + _last=step + q=np.asarray(obs['proprioception']['agent/qpos']).reshape(-1) + if q.size!=9 or not np.isfinite(q).all():raise ValueError('Invalid qpos') + pos=_k.xyz(q);m=_load() + if _path is None: + score,j,shift=register(obs['rgb']['top_camera']);_chosen=(score,j,shift) + idx=np.flatnonzero(m['demo_id']==j);_path=m['xyz'][idx].copy();_labels=m['actions'][idx].copy();_path[:,1]-=shift*.00465 + # Fade scene offset into initial approach to retain actual starting pose. + _path[:30,1]+=(shift*.00465)*np.linspace(1,0,30) + try: + live=geometry(obs['rgb']['top_camera']);ref=geometry(m['initial'][j]) + delta=np.array([(live[0]-ref[0])*.00465,-(live[1]-ref[1]-shift)*.00465,0]) + delta=np.clip(delta,-.08,.08) + # Approach object offset fades as the initial push reaches the fixed wall span. + phase=np.arange(len(_path));blend=np.minimum(phase/25,1)*np.clip((180-phase)/60,0,1) + _path+=blend[:,None]*delta + except (ValueError,IndexError):pass + # Demo feedforward retains contact-directed commands; pose feedback corrects drift. + _cursor=min(_nominal,len(_path)-1) + target=_path[_cursor] + a=np.zeros(7,dtype=np.float32) + a[:3]=np.clip(_labels[_cursor,:3]+6*(target-pos),[-.20,-.25,-.15],[.20,.25,.18]) + a[6]=-1 + _nominal+=1 + if _nominal>=len(_path)+20:return None + return a diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..b592a222102289e9b0d65553407300b7e8489b44 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "PivotBook-v1", + "status": "released", + "selection_rule": "prefer existing pinned D20, otherwise numeric trajectory ID sort before reading data", + "lineage_status": "pinned_comparator", + "episodes": [ + { + "demo_id": "demo_00", + "file": "demo_00.h5", + "length": 307, + "fields": [ + { + "path": "actions", + "shape": [ + 307, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 308, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 308, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 308, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 308, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 308, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 308, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "76014dfc55ac0e61f35e4a6ff9d1c8a492dc9065fd920fde5d61e1302604af1f", + "source_sha256": "65316a4083fd8a5fb2771d30fb9ad0e7b01852aeeca2af85638ec1416ced6228", + "view_sha256": "4b0026710d4a4a0164dd62f36926478a06a295434fcd23f9ef7e245b4eccdc22" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 332, + "fields": [ + { + "path": "actions", + "shape": [ + 332, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 333, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 333, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 333, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 333, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 333, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 333, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0985c60991bba6549479f778962dea7740d086ccafc3428fa3229f1a1713d671", + "source_sha256": "f96c706be74b2f7fc825ef35adc1e2c1d01ce14199f3788db1afb6d7890b2451", + "view_sha256": "8c5a8503bd44478076865086f944bab3bfae10d7352a86606ac372acb22d50b5" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 303, + "fields": [ + { + "path": "actions", + "shape": [ + 303, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 304, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 304, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 304, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 304, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 304, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 304, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "87fa11159ab526d12ffbe34910c284a06186b3010aeecb4764cb6be65db3a460", + "source_sha256": "f351c8c14bdaff439b779bc889ce05d7ce98252ebae9c489290759e53c292675", + "view_sha256": "8dde833f0ccc4b73eeb3dda1e4eea01d86e42bb8e6af288b0a001cdafbd68156" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 321, + "fields": [ + { + "path": "actions", + "shape": [ + 321, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 322, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 322, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 322, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 322, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 322, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 322, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7d056c408981b16e7dc7abd1150aaffc0b6f73f6d99308e6f2314bfd49a1e700", + "source_sha256": "e48ac27e72a72d5d348b02929d148fd10603a3b1043c0d1dc1efecf6fcd47a8f", + "view_sha256": "963b50bcdc30029e59d49b5f7947038cfe9460bc1dc27363dd1eca0844875cf6" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 485, + "fields": [ + { + "path": "actions", + "shape": [ + 485, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 486, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 486, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 486, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 486, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 486, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 486, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "857d418dc4f96f8dbdca1969c5e0573ddde256db241d3e2fd451e6a76423afd5", + "source_sha256": "78579d5568649c4f587bad5b4abe2f89be12791b99dc4982a30fdedf9e8bb772", + "view_sha256": "a21b2ac790ab20bfa5f49e047f893b55c0cbe63dcbb652bb9b3367e182ae1c9b" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 364, + "fields": [ + { + "path": "actions", + "shape": [ + 364, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 365, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 365, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 365, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 365, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 365, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 365, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "47870286f7e64348e0919e5ebc22ecc505cc5e0fad1926bafd29345ed3c2e7fa", + "source_sha256": "6b85956bc3179c8857b7a9c63f71c0fac89748c008f9dda43225d4e94fa41b60", + "view_sha256": "0abcafd9e1da72a6580bb489ab8fabe81a104b47e6793a9665e23bd9fedd005f" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 382, + "fields": [ + { + "path": "actions", + "shape": [ + 382, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 383, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 383, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 383, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 383, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 383, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 383, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "422c0812f9183b1c375fc9e36dc413fb16866ee84862d491476bc28133ee82c2", + "source_sha256": "0c6a1adc9e71d8ac083c0f61e639dc0f272544ccc2ddac68d88e622fd9f4dac5", + "view_sha256": "00c3c985f98eae762b8a5c9d07c98990975f3f2dbf17529e3ed2b15d6b0f508f" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 336, + "fields": [ + { + "path": "actions", + "shape": [ + 336, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 337, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 337, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 337, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 337, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 337, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 337, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ba012d28411ffee62f1f64babcacdc092cd04f9b25659f83d66c82196d7545e6", + "source_sha256": "22cb8ec9fc25c9a655ed0eb568b183e24b2a395742f550d80397768493f90e0b", + "view_sha256": "8fb40b3d473496950ccb463b1cb06729c341460feff034277157c0704c4506c0" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 312, + "fields": [ + { + "path": "actions", + "shape": [ + 312, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 313, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 313, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 313, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 313, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 313, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 313, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6d1150c5d4697d4f296b9b11b40351762fb1064f184f1306f32d8e5263c79186", + "source_sha256": "2c0c118f7a8c27f7fc26bc687d119ac109db69cd734ac3ea92856994d21c1474", + "view_sha256": "a2c3f9843d847c97530944babd3acdcb9988670c1b41dcc96b955f5a299718be" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 310, + "fields": [ + { + "path": "actions", + "shape": [ + 310, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 311, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 311, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 311, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 311, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 311, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 311, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e01b1ca1c0925bb6f8b40120c25184653f2985a2779b7a1c249e03175b438676", + "source_sha256": "74d0e7aff36ab860c708f9db2a0d0ea5ad03261ac6aeb3f6b8e7bf8070f3bc25", + "view_sha256": "c8162ea3f565c46bd74194c5388168b9a243b5b937268e238c7586a7a5c84948" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 337, + "fields": [ + { + "path": "actions", + "shape": [ + 337, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 338, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 338, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 338, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 338, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 338, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 338, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c4bfaf7033479555b07216bbb5b256303645f4c6826a2a4402d7ff4ab5dc654a", + "source_sha256": "7a0160e521f25005141c159618c15059a741c900bd5e3a37bb14b16863862d78", + "view_sha256": "e58ab4cfcfbb0f4ccb0a5d6ffcca41d84fd030824d30ea7d3b817cc8c3cf808d" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 305, + "fields": [ + { + "path": "actions", + "shape": [ + 305, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 306, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 306, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 306, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 306, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 306, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 306, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "98703c28f0a52e89f98dc8b92c40f7f76ba445d6012d64a8f71b0bc3b25e8583", + "source_sha256": "9959341193bda1d8353aa7133b86b9eff2d2c608b7d331b8b8fef28ce6db0ecc", + "view_sha256": "97f80cee39803beb15a6ed854cc0e34f35597df3b7b29fcee41e46d28bd17b42" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 461, + "fields": [ + { + "path": "actions", + "shape": [ + 461, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 462, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 462, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 462, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 462, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 462, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 462, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "715f5dd7b3fbe93742dc4678fda9a361486676936cb257957ce999f5bced5a30", + "source_sha256": "bf89db6f7b6801bb246335119db05ffe74eddc33e829c30259f92f1577c6946d", + "view_sha256": "57dbe9ae90385b9e65a8508ce7b2c154ce84962faea51f06e7fc755677fd865f" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 298, + "fields": [ + { + "path": "actions", + "shape": [ + 298, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 299, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 299, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 299, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 299, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 299, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 299, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "a7aedc12035e8fddc140e4dfd1272755bb9877df4561bbbb655f378d13950d4c", + "source_sha256": "2b4df265553d758ec3975cb80ecdb32f4ab3982a4da61b78130f7d507fb50a33", + "view_sha256": "b48a27b637362ea88d5aac080c23ae26310d2d741e079d55862f393dd28b53dd" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 461, + "fields": [ + { + "path": "actions", + "shape": [ + 461, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 462, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 462, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 462, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 462, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 462, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 462, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6225400d5ab7a89deaa2b12f3067189aebdee98947acdc3fb909fde5413519da", + "source_sha256": "abf817fb5085e78d01912a6a88852200c9c04251acaa1cc7b3785155146696dd", + "view_sha256": "c905d344d1c1b54d52790f895c5987e7873e9a9aecbd4ded603fab55273f20db" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 299, + "fields": [ + { + "path": "actions", + "shape": [ + 299, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 300, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 300, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 300, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 300, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 300, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 300, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "faa36bf85b0dbc84de64a7b3f89e2dfd2402d5cd56314e0c70142044c566af26", + "source_sha256": "c835849f4d6f51c2672c2e354d7124e0ef78cc1389bacde1b4f2d16818588cb5", + "view_sha256": "3e6d0897436ba74280c12f5d7ff8e65db62e26dce1971920ae5317d3d895407e" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 325, + "fields": [ + { + "path": "actions", + "shape": [ + 325, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 326, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 326, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 326, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 326, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 326, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 326, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2047a788f50e84994e772964571dd487b79da44bee4f6066cea60a2ae5687f1e", + "source_sha256": "2eaf5f01529f431cac189d72ea402ad3bd6d2c425bd0995a42a87c467b6caa30", + "view_sha256": "0f1de665bf53f385a3997f5a0cfd27f15d9fb3e8b8212220c3209ad4ae448304" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 381, + "fields": [ + { + "path": "actions", + "shape": [ + 381, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 382, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 382, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 382, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 382, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 382, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 382, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "834cbc96527853a93799ead52a02babc9d3a54f60f99b4805491054f86684de3", + "source_sha256": "02dffc74f8a2ba610e01b6ff5b990b6d22870cde5dc0d3a3e4f9239b1692129f", + "view_sha256": "57edea5a699ad9a16468e02f64275da91fd9698b08d80679e9ad64e01f819192" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 379, + "fields": [ + { + "path": "actions", + "shape": [ + 379, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 380, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 380, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 380, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 380, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 380, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 380, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "78fad38f364142e4fd0132139882fdc29dd3ff169b1c546389b1240e30ccc8d8", + "source_sha256": "2eda4bf92da45958595f0115bc4aac3712f4d66ee3223b36bf37845e937bf46d", + "view_sha256": "6455f3e1160f2167c30e5b848c130b5b978435f45f7728b1b7786f83a16168f5" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 482, + "fields": [ + { + "path": "actions", + "shape": [ + 482, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 483, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 483, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 483, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 483, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 483, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 483, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "647edc4884afe00dfd0443cd850214fde2f8415791136b274d65e506d07fd65f", + "source_sha256": "1e8b2cc96fc0af28eb34db994bd03e601b7457fc3642db5658eadd3e2d8d2c5f", + "view_sha256": "5ea3f55542c199ec92f8d4e34024f25f66e2a627d34e40ac0ce6a37cf563acf8" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/environment.lock @@ -0,0 +1,249 @@ +absl-py==2.4.0 +accelerate==1.13.0 +addict==2.4.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.13.5 +aiosignal==1.4.0 +annotated-types==0.7.0 +anyio==4.13.0 +anytree==2.13.0 +asttokens==3.0.1 +async-timeout==5.0.1 +attrs==26.1.0 +av==15.1.0 +blinker==1.9.0 +casadi==3.7.2 +certifi==2026.4.22 +cffi==2.0.0 +charset-normalizer==3.4.7 +click==8.3.3 +cloudpickle==3.1.2 +cmake==4.1.3 +coacd==1.0.11 +colorama==0.4.6 +colorlog==6.10.1 +comm==0.2.3 +ConfigArgParse==1.7.5 +contourpy==1.3.2 +cuda-bindings==12.9.4 +cuda-pathfinder==1.5.4 +cycler==0.12.1 +dacite==1.9.2 +dash==4.1.0 +dataclasses-json==0.6.7 +datasets==4.8.5 +decorator==5.2.1 +deepdiff==8.6.2 +Deprecated==1.3.1 +diffusers==0.35.2 +dill==0.4.1 +docstring_parser==0.18.0 +draccus==0.10.0 +einops==0.8.2 +embreex==4.4.0 +etils==1.13.0 +evdev==1.9.3 +exceptiongroup==1.3.1 +executing==2.2.1 +Farama-Notifications==0.0.6 +fast_simplification==0.1.13 +fastjsonschema==2.21.2 +filelock==3.29.0 +Flask==3.1.3 +fonttools==4.63.0 +freetype-py==2.5.1 +frozenlist==1.8.0 +fsspec==2026.2.0 +genesis-world @ file:///data/gck/genesis-world +git-filter-repo==2.47.0 +gitdb==4.0.12 +GitPython==3.1.50 +glfw==2.10.0 +gs-madrona==0.0.5 +gstaichi==3.3.0 +gym==0.26.2 +gym-notices==0.1.0 +gymnasium==1.3.0 +h11==0.16.0 +h5py==3.16.0 +hf-xet==1.5.0 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface-hub==0.35.3 +idna==3.15 +ImageIO==2.37.3 +imageio-ffmpeg==0.6.0 +importlib_metadata==9.0.0 +importlib_resources==7.1.0 +inquirerpy==0.3.4 +ipython==8.39.0 +ipywidgets==8.1.8 +itsdangerous==2.2.0 +jedi==0.20.0 +Jinja2==3.1.6 +joblib==1.5.3 +jsonlines==4.0.0 +jsonschema==4.26.0 +jsonschema-specifications==2025.9.1 +jupyter_core==5.9.1 +jupyterlab_widgets==3.0.16 +kiwisolver==1.5.0 +lazy-loader==0.5 +lerobot==0.4.4 +libigl==2.6.2 +llvmlite==0.47.0 +loguru==0.7.3 +lxml==6.1.0 +manifold3d==3.4.1 +-e git+ssh://git@github.com/HeegerGao/maniladder.git@f6eed17496816bb41ce484f2d7580990a908d3e6#egg=maniladder +mapbox_earcut==2.0.0 +markdown-it-py==4.2.0 +MarkupSafe==3.0.3 +marshmallow==3.26.2 +matplotlib==3.10.9 +matplotlib-inline==0.2.2 +mdurl==0.1.2 +mergedeep==1.3.4 +moviepy==2.2.1 +mpmath==1.3.0 +msgspec==0.21.1 +mujoco==3.8.1 +multidict==6.7.1 +multiprocess==0.70.19 +mypy_extensions==1.1.0 +nbformat==5.10.4 +nest-asyncio==1.6.0 +networkx==3.4.2 +ninja==1.13.0 +nlopt==2.10.0 +numba==0.65.1 +numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1747544640217/work/dist/numpy-2.2.6-cp310-cp310-linux_x86_64.whl#sha256=d6d964caeef85d00073d27cd62b46883d275b3d8162f723f0fcabbd0b3cc3f9d +nvidia-cublas-cu12==12.8.4.1 +nvidia-cuda-cupti-cu12==12.8.90 +nvidia-cuda-nvrtc-cu12==12.8.93 +nvidia-cuda-runtime-cu12==12.8.90 +nvidia-cudnn-cu12==9.10.2.21 +nvidia-cufft-cu12==11.3.3.83 +nvidia-cufile-cu12==1.13.1.3 +nvidia-curand-cu12==10.3.9.90 +nvidia-cusolver-cu12==11.7.3.90 +nvidia-cusparse-cu12==12.5.8.93 +nvidia-cusparselt-cu12==0.7.1 +nvidia-nccl-cu12==2.27.5 +nvidia-nvjitlink-cu12==12.8.93 +nvidia-nvshmem-cu12==3.4.5 +nvidia-nvtx-cu12==12.8.90 +open3d==0.19.0 +opencv-python==4.13.0.92 +opencv-python-headless==4.12.0.88 +OpenEXR==3.4.11 +orderly-set==5.5.0 +packaging==25.0 +pandas==2.3.3 +parso==0.8.7 +pexpect==4.9.0 +pfzy==0.3.4 +pillow==11.3.0 +pin==4.0.0 +pip @ file:///home/task_177498883471825/croot/pip_1774988882575/work +platformdirs==4.9.6 +plotly==5.24.1 +polyscope==2.6.1 +proglog==0.1.12 +prompt_toolkit==3.0.52 +propcache==0.5.2 +protobuf==6.33.6 +psutil==7.2.2 +ptyprocess==0.7.0 +pure_eval==0.2.3 +py-cpuinfo==9.0.0 +py-spy==0.4.2 +pyarrow==24.0.0 +pycollada==0.9.3 +pycparser==3.0 +pydantic==2.13.4 +pydantic_core==2.46.4 +PyGEL3D==0.6.1 +pyglet==2.1.14 +pygltflib==1.16.0 +Pygments==2.20.0 +pymeshlab==2025.7.post1 +pynput==1.8.2 +PyOpenGL==3.1.10 +pyparsing==3.3.2 +pyperclip==1.11.0 +PyQt6==6.11.0 +PyQt6-Qt6==6.11.0 +PyQt6_sip==13.11.1 +pyquaternion==0.9.9 +pyserial==3.5 +pysplashsurf==0.12.0.2 +python-dateutil==2.9.0.post0 +python-dotenv==1.2.2 +python-xlib==0.33 +pytransform3d==3.15.0 +pytz==2026.2 +pyuipc @ file:///tmp/claude-1005/-mnt4-gck-maniladder/9f005e67-04f6-4368-bd0e-9f40896c7dbf/scratchpad/pyuipc_dl/pyuipc-0.0.25-cp310-cp310-manylinux_2_34_x86_64.whl#sha256=76ff13554e1971ea4401db2c875369cf32352ae3a5a4c398c45193231b5cbf00 +PyYAML==6.0.3 +pyyaml-include==1.4.1 +referencing==0.37.0 +regex==2026.5.9 +requests==2.34.2 +rerun-sdk==0.26.2 +retrying==1.4.2 +rich==14.3.4 +rpds-py==0.30.0 +rtree==1.4.1 +safetensors==0.7.0 +sapien==3.0.3 +scikit-image==0.25.2 +scikit-learn==1.7.2 +scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy-split_1739790642651/work/dist/scipy-1.15.2-cp310-cp310-linux_x86_64.whl#sha256=9e52bad6c3294d1a5b04a13632118ca2157130603c6c018c2d710162b223b27e +sentry-sdk==2.60.0 +setuptools==80.10.2 +shapely==2.1.2 +six==1.17.0 +smmap==5.0.3 +stack-data==0.6.3 +svg.path==7.0 +sympy==1.14.0 +tenacity==9.1.4 +termcolor==3.3.0 +tetgen==0.8.4 +threadpoolctl==3.6.0 +tifffile==2025.5.10 +timm==1.0.27 +toml==0.10.2 +torch==2.10.0 +torchaudio==2.11.0 +torchcodec==0.10.0 +torchvision==0.25.0 +tqdm==4.67.3 +traitlets==5.15.0 +transforms3d==0.4.2 +trimesh==4.12.2 +triton==3.6.0 +typeguard==4.5.2 +typing-inspect==0.9.0 +typing-inspection==0.4.2 +typing_extensions==4.15.0 +tyro==1.0.13 +tzdata==2026.2 +urllib3==2.7.0 +vhacdx==0.0.10 +viser==1.0.27 +vtk==9.6.1 +wandb==0.24.2 +wcwidth==0.7.0 +websockets==16.0 +Werkzeug==3.1.8 +wheel==0.46.3 +widgetsnbextension==4.0.15 +wrapt==2.1.2 +xxhash==3.7.0 +yarl==1.23.0 +yourdfpy==0.0.60 +z3-solver==4.16.0.0 +zipp==3.23.1 +zstandard==0.25.0 diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/features.py b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/features.py new file mode 100644 index 0000000000000000000000000000000000000000..22f8479a857bf73daa3e5e1478cf2b3d94fb1153 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/features.py @@ -0,0 +1,19 @@ +"""Fixed, non-neural RGB descriptors shared by preparation and inference.""" +import cv2 +import numpy as np +CAMERAS = ('front_camera', 'left_camera', 'robot_camera', 'top_camera') + +def visual_feature(rgb): + out=[] + for name in CAMERAS: + im=np.asarray(rgb[name]) + if im.ndim==4 and im.shape[0]==1: im=im[0] + if im.ndim!=3 or im.shape[2]!=3 or im.dtype!=np.uint8: + raise ValueError('Expected uint8 HWC or 1HWC RGB') + h,w=im.shape[:2] + # Preserve global layout and emphasize the central manipulation area. + whole=cv2.resize(im,(10,10),interpolation=cv2.INTER_AREA) + crop=im[int(.25*h):int(.9*h),int(.2*w):int(.9*w)] + local=cv2.resize(crop,(16,16),interpolation=cv2.INTER_AREA) + out.extend([whole.reshape(-1)/255.,local.reshape(-1)/255.]) + return np.concatenate(out).astype(np.float32) diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..d832183e71aa82e523233df5585751f9f5990e53 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/findings.md @@ -0,0 +1,40 @@ +# E20 development log + +Only PivotBook-v1 D20 memory and API observations are used. Budget at entry: 0/20. `/worker_api.py` is imported from root (initial import without root on sys.path failed before any API call). All environment interaction uses API. No neural fitting or simulator construction. + +## Episode 1 — baseline single-step retrieval +Ran original offline candidate through 499 actions after API hold. Images/proprio at 25-step intervals and all actions/API flags saved in ep01. The top image resolution is 640x480 (HxW), other images 480x640, exactly twice demo resolution. Resizing descriptors works. Initial retrieval alternated demo09/demo11; top geometry reveals these have different wall x placement, so initial apparent similarity is insufficient. During push the book translates too far along x. Repeated nearest frames around demo11:210–215 delay transition; later robot moves into pivot posture while book remains flat and displaced. This is not visible success. Both phase ambiguity and loss of contact matter. Closed gripper and fixed orientation retained from demonstrations; no grasp lift is indicated. + +## Episode 2 hypothesis +Use camera weights front .7, left .7, robot .15, top 2.45 to emphasize object/wall over wrist-camera background. Add .06-per-visit local frame penalty (within 8 frames of selected neighbor) and capped Cartesian pose correction, gain 3, maximum .06 normalized per axis. Panda rigid-chain forward kinematics is arithmetic only, not an environment; demo next-position differences correlate with translation labels at .893/.887/.843 along xyz. This validates coordinate signs approximately, not exact contacts. Test uses five-step repeated actions to inspect progress at 201 steps. This differs from intended single-step frozen loop and is recorded as an interactive diagnostic. + +A standalone color segmentation experiment on authorized initial top images failed to isolate the book in 12/20 demos, because the brown book touches brown background at platform edges. It is not used in the controller. + +## Episode 2 result +Stopped at 201 native steps by planned diagnostic cap (200 worker actions). The book remained flat and approach/contact was not completed. Five-step repetition, pose correction, and strong static-camera weighting did not establish a viable policy. No native success flag was observed in saved summaries. The candidate code is preserved as controller_ep02.py. + +## Episode 3 hypothesis +Replaced unconstrained per-frame label retrieval with initial top-image registration over each demo and vertical offsets -85..85 pixels at demo resolution. Registered y shift is converted with slope -0.00465 m/pixel. Selected FK trajectory is followed by measured-qpos nearest-forward path tracking with 3-point lookahead and bounded translation. Plan: inspect through step351, then rehearse the exact code in slot4. This removes cross-demo phase switching, but book contact remains visually open-loop after initialization. Initial registration selected demo10 with -27 pixels; source choice is image-based, not episode identity. + +## Episode 3 result and localization diagnosis +Stopped at native351 after350 actions, diagnostic five-step chunks. Book remained flat near wall in final front and top views; false visible judgment. Initial registration picked demo10, but measured top-camera major-axis angle was about119 degrees versus demo10 about59 degrees. Demo14 in the same visible wall quadrant is about112 degrees. This substantial yaw error explains why a geometrically plausible hand path did not establish correct contact. Root-frame hand position progressed through approach, x push, lift, y reposition and pivot trajectory; no program exception occurred. Contact and upright outcome failed. + +## Episode 4 +Independent snapshot rehearsal of the unmodified episode3 path controller, using single-step feedback, full native horizon and all runtime dependencies offline. Result pending at time of this note. No intervention during rehearsal. + +## Prepared post-episode4 variant +Constrain demonstration choice to the visually matched wall-layout group, then penalize major-axis book-angle difference. Brown masking inside the measured platform rectangle plus largest connected component isolates the initial book in the 20 source images; this fixes the earlier unconstrained color-mask failure. Initial centroid residual after wall registration adjusts approach poses (bounded 8cm), fading as the first push reaches its wall-side target. These are fixed geometric rules, not neural fitting. Added endpoint hold of25 calls then stop, with no success assertion. This version has not yet been run. + +Episode4 independent result: valid true, native success false, bundle f1f18d88821128113dcf7d57d6cee008d8ac626b4393c756bb01acb4eb1b7c9c. Legal latest observation after return saved in ep04; final book flat and displaced toward/outside platform edge. No visible-success override is used because native feedback is present. + +Episode5: deploy prepared yaw-aware registration and bounded initial centroid residual. First independent test of this variant. Endpoint stopping is motion termination only. + +## Episodes 5–6 results +Exact same independently runnable bundle 58fe20efb10eafc030d0d85859e63b78baa4c861670bec07a1b118d839ef748e: episode5 native success false at horizon500; episode6 native success true at233. Thus 1/2 native successes for this exact version. Both final legal observations saved. Episode5 hand remained away from the flat book near the robot-side workspace; likely contact/pose stall, but no initial observation/cursor trace was available from the independent runner to prove the cause. Episode6 images show a narrow upright book edge against wall with hand support; native feedback, not an invented visual claim, establishes the recorded success. + +## Episode7 hypothesis +Interactive single-step feedforward-plus-pose-feedback test, preserving v5 fallback. All actions and native flags are recorded, plus cursor/reference diagnostics. Static registration offset search is now restricted to +/-3 pixels around the measured platform-center shift to prevent unrelated vertical alignments. Nominal demonstration frame advances per action; expert translation plus gain6 Cartesian error is bounded to x .20/y .25/z .15 down/.18 up. This tests whether maintaining contact-directed feedforward and consistent timing improves over nearest-pose stalling. + +Additional authorized demo inspection during E20: top-camera initial image for each of demo00–19 was viewed on demo_tops.jpg and geometry.jpg. Demo11 top-camera frames0,90,150,225 were viewed on top_pose_calibration.jpg. These supplement, not replace, the historical offline inspection log. Demo FK/action arrays were inspected numerically across all20. A rough near-table top projection x=.4+(pixel_x-120)/236 and y=(160-pixel_y)/236 is inferred from visible tool centers and measured FK positions; it is approximate and only used in the prepared recovery experiment. It is not simulator calibration or hidden state. + +Episode7 result: native success true at step457, observed directly in execute_actions and preserved in events.json. Closed-loop feedforward-plus-pose variant selected demo19 with platform shift -13 pixels; nominal frame advanced consistently. First push displaced the book to the wall-side x region, repositioning proceeded, and y push/pivot produced native success. This was interactive single-step execution, not an independent rehearsal. It does not count toward frozen-bundle success rate until rehearsed. diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..19cae4764e5a65b2c7635815a01ebcc79b859682 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/freeze_manifest.json @@ -0,0 +1,177 @@ +{ + "files": { + "__pycache__/controller.cpython-310.pyc": "c445ddbf3cb130dafe0866c4b527bd654d2a2eb928e0b6ce800fed5cc9839835", + "__pycache__/features.cpython-310.pyc": "dae648e380cdf2ae4efd5717078a7caff9423ddd8fa7144c832fe5a639d38ccf", + "__pycache__/kinematics.cpython-310.pyc": "a76313b15a275e46211786f2c6e84a29cb51544b9dff2a74a84ca06de408ec50", + "__pycache__/synthetic_checks.cpython-310.pyc": "66f6fb32af4d51ae9f33e3b1dad007e4f59bed40a41d4e0146d6445f374fc244", + "check_results.txt": "9d2a3140296b15dd8b179ea0d72dea9474c8e1fb106705bbd91821bac30f03d8", + "controller.py": "1a448c43f51ec10b292cbe289ef269741d59a37b9b4bd1a1d1328b59cceb3b19", + "demo_manifest.json": "623584c3ac3503594ef50f8cd91010cbd969755936a624455ff2f1ab502aa75d", + "demo_memory.npz": "144edd6540fd1e83af53a986d701e9474c094cd08c54725cda48facb0a0f65d1", + "demonstrations_readonly/demo_00.h5": "4b0026710d4a4a0164dd62f36926478a06a295434fcd23f9ef7e245b4eccdc22", + "demonstrations_readonly/demo_01.h5": "8c5a8503bd44478076865086f944bab3bfae10d7352a86606ac372acb22d50b5", + "demonstrations_readonly/demo_02.h5": "8dde833f0ccc4b73eeb3dda1e4eea01d86e42bb8e6af288b0a001cdafbd68156", + "demonstrations_readonly/demo_03.h5": "963b50bcdc30029e59d49b5f7947038cfe9460bc1dc27363dd1eca0844875cf6", + "demonstrations_readonly/demo_04.h5": "a21b2ac790ab20bfa5f49e047f893b55c0cbe63dcbb652bb9b3367e182ae1c9b", + "demonstrations_readonly/demo_05.h5": "0abcafd9e1da72a6580bb489ab8fabe81a104b47e6793a9665e23bd9fedd005f", + "demonstrations_readonly/demo_06.h5": "00c3c985f98eae762b8a5c9d07c98990975f3f2dbf17529e3ed2b15d6b0f508f", + "demonstrations_readonly/demo_07.h5": "8fb40b3d473496950ccb463b1cb06729c341460feff034277157c0704c4506c0", + "demonstrations_readonly/demo_08.h5": "a2c3f9843d847c97530944babd3acdcb9988670c1b41dcc96b955f5a299718be", + "demonstrations_readonly/demo_09.h5": "c8162ea3f565c46bd74194c5388168b9a243b5b937268e238c7586a7a5c84948", + "demonstrations_readonly/demo_10.h5": "e58ab4cfcfbb0f4ccb0a5d6ffcca41d84fd030824d30ea7d3b817cc8c3cf808d", + "demonstrations_readonly/demo_11.h5": "97f80cee39803beb15a6ed854cc0e34f35597df3b7b29fcee41e46d28bd17b42", + "demonstrations_readonly/demo_12.h5": "57dbe9ae90385b9e65a8508ce7b2c154ce84962faea51f06e7fc755677fd865f", + "demonstrations_readonly/demo_13.h5": "b48a27b637362ea88d5aac080c23ae26310d2d741e079d55862f393dd28b53dd", + "demonstrations_readonly/demo_14.h5": "c905d344d1c1b54d52790f895c5987e7873e9a9aecbd4ded603fab55273f20db", + "demonstrations_readonly/demo_15.h5": "3e6d0897436ba74280c12f5d7ff8e65db62e26dce1971920ae5317d3d895407e", + "demonstrations_readonly/demo_16.h5": "0f1de665bf53f385a3997f5a0cfd27f15d9fb3e8b8212220c3209ad4ae448304", + "demonstrations_readonly/demo_17.h5": "57edea5a699ad9a16468e02f64275da91fd9698b08d80679e9ad64e01f819192", + "demonstrations_readonly/demo_18.h5": "6455f3e1160f2167c30e5b848c130b5b978435f45f7728b1b7786f83a16168f5", + "demonstrations_readonly/demo_19.h5": "5ea3f55542c199ec92f8d4e34024f25f66e2a627d34e40ac0ce6a37cf563acf8", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "features.py": "c870d42552526dd75eccf359c36260ba3ab4934ee97fa0a0c7a74462915906bc", + "findings.md": "4874af7feb041efea2dc9431a3c0b14f52bff34d54860dddadcb5f93ce744695", + "handoff.md": "1cd5e1e7dae475aee4647948a47c0a340d6ad52ca83c4796f85c1abdd9ea0c6f", + "kinematics.py": "a1b7898247cc896fb46c6bbac78e277fdc5d67f5f6d37aed909ece1a9d0b1ad0", + "model_tool_manifest.yaml": "1cac48f14a024f22936470e4e90591f490c31f87e0a658c3518bd54f84acf1c4", + "paths.npz": "d884fd670189c3c91ccb04530b0c62544bf6c9b43c70d288c70412662246003c", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "skills.md": "f1414b48930303d74fa08f67c914b01d96c8fdb8dc2e776833990c488ba8a4fb", + "synthetic_checks.py": "6ae236e243742c80a32f89b4494caf62f7d383a9838b512b2e4bef0d5c86d575", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "41df069fe8de8d6e2b22e82604b5982ff6ce890e4cfe287d7fab4665d0a16a6c", + "exploration_ledger_hash": "88d363e7a7d331a5a9ac02c93654aba6a4a4003d1be3bcb188267817b02e9f11", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "bundle_hash": "f1f18d88821128113dcf7d57d6cee008d8ac626b4393c756bb01acb4eb1b7c9c", + "episode": 4, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "58fe20efb10eafc030d0d85859e63b78baa4c861670bec07a1b118d839ef748e", + "episode": 5, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "58fe20efb10eafc030d0d85859e63b78baa4c861670bec07a1b118d839ef748e", + "episode": 6, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "41df069fe8de8d6e2b22e82604b5982ff6ce890e4cfe287d7fab4665d0a16a6c", + "episode": 8, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "41df069fe8de8d6e2b22e82604b5982ff6ce890e4cfe287d7fab4665d0a16a6c", + "episode": 9, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "b53b73c37a39f58e7ea9f620026b8d52d39c22174e9d80fc98146d918fdb604c", + "episode": 11, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "b53b73c37a39f58e7ea9f620026b8d52d39c22174e9d80fc98146d918fdb604c", + "episode": 12, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "episode": 14, + "bundle_hash": "c93b93752e6f1d3c0220522a3334dc54ff68dfee6347fcf6fd8541f54e8b76c9", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 15, + "bundle_hash": "c93b93752e6f1d3c0220522a3334dc54ff68dfee6347fcf6fd8541f54e8b76c9", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 16, + "bundle_hash": "c93b93752e6f1d3c0220522a3334dc54ff68dfee6347fcf6fd8541f54e8b76c9", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "c93b93752e6f1d3c0220522a3334dc54ff68dfee6347fcf6fd8541f54e8b76c9", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "c93b93752e6f1d3c0220522a3334dc54ff68dfee6347fcf6fd8541f54e8b76c9", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "c93b93752e6f1d3c0220522a3334dc54ff68dfee6347fcf6fd8541f54e8b76c9", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "c93b93752e6f1d3c0220522a3334dc54ff68dfee6347fcf6fd8541f54e8b76c9", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..ef10d0f8f0334b6f8d16149c7647fce1a5c097b1 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/handoff.md @@ -0,0 +1,7 @@ +# Runnable candidate handoff + +Entry points: controller.reset_episode() and controller.act(obs). Required runtime files: controller.py, kinematics.py, paths.npz. Python, NumPy and cv2 are available offline. The extra legacy demo_memory.npz/features.py preserve the earlier draft but are not used by this controller. No worker API, simulator, network, external model or neural weights are used at inference. + +The runner supplies legal RGB/proprioception with step_id, the verified demo manifest, readonly demos and common environment lock. Initial hold is runner-owned and consumes step1. The controller enforces the500-native-step horizon. No completion or abstention is presented as success. + +All memory derives from this task's20 authorized D20 demos. Historical inspection is in ../demo_analysis.md; E20 logs and versions are in ../exploration/. Earlier yaw-aware pose tracking obtained1/2 independent native successes. This feedforward-plus-pose version obtained native success in interactive episode7 at457; independent tests follow. Freeze selection is runner-owned among exact independently rehearsed versions. No guarantee of task success is made. diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/kinematics.py b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/kinematics.py new file mode 100644 index 0000000000000000000000000000000000000000..e815225a846428d781146e54d57d9972777aecde --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/kinematics.py @@ -0,0 +1,8 @@ +"""Panda rigid-chain forward kinematics only; no physics/environment.""" +import numpy as np + +def xyz(q): + q=np.asarray(q);single=q.ndim==1;q=np.atleast_2d(q);n=len(q);T=np.broadcast_to(np.eye(4),(n,4,4)).copy() + for i,(a,d,al) in enumerate(zip([0,0,0,.0825,-.0825,0,.088,0],[.333,0,.316,0,.384,0,0,.2104],[0,-np.pi/2,np.pi/2,np.pi/2,-np.pi/2,np.pi/2,np.pi/2,0])): + th=q[:,i] if i<7 else np.zeros(n);c=np.cos(th);s=np.sin(th);ca=np.cos(al);sa=np.sin(al);M=np.zeros((n,4,4));M[:,0,0]=c;M[:,0,1]=-s;M[:,0,3]=a;M[:,1,0]=s*ca;M[:,1,1]=c*ca;M[:,1,2]=-sa;M[:,1,3]=-d*sa;M[:,2,0]=s*sa;M[:,2,1]=c*sa;M[:,2,2]=ca;M[:,2,3]=d*ca;M[:,3,3]=1;T=T@M + return T[0,:3,3] if single else T[:,:3,3] diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c12e8da05e4c6341de159b7c318bc163de0ecb48 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,95 @@ +{ + "schema": "offline-preparation-tool-manifest-v1", + "task": "PivotBook-v1", + "stage": "D20_E20_compiled", + "status": "runnable_independent_validation", + "coding_model": { + "identity": "Codex, GPT-6 family per session instructions", + "exact_checkpoint": "not exposed", + "weights": "unchanged; no fine-tuning" + }, + "pretrained_tool_weights": [], + "frozen_weight_references": [], + "non_neural_data_artifacts": [ + { + "path": "demo_memory.npz", + "provenance": "Fixed RGB descriptors and legal qpos/qvel/action labels from all 20 authorized demonstrations", + "rows": 7180, + "optimization": "none; no learned parameters or neural fitting" + }, + { + "path": "paths.npz", + "provenance": "Initial top-camera RGB and FK-transformed joint positions from exactly the same 20 authorized demos", + "optimization": "No neural fitting; fixed registration and path tracking" + } + ], + "authorized_demo_ids": [ + "demo_00", + "demo_01", + "demo_02", + "demo_03", + "demo_04", + "demo_05", + "demo_06", + "demo_07", + "demo_08", + "demo_09", + "demo_10", + "demo_11", + "demo_12", + "demo_13", + "demo_14", + "demo_15", + "demo_16", + "demo_17", + "demo_18", + "demo_19" + ], + "versions": { + "python": "3.10.20", + "numpy": "2.2.6", + "opencv": "4.12.0", + "h5py": "3.16.0", + "scipy": "1.15.2" + }, + "tools_used": [ + "functions.exec shell/Python orchestration", + "exec_command and write_stdin", + "view_image for four contact sheets", + "worker_api.API.read_demo (local sanctioned reads)", + "Python standard library: pathlib,json,hashlib,importlib,platform", + "NumPy: descriptors, statistics, action retrieval, synthetic checks", + "OpenCV: image resizing, contact sheets", + "h5py: API.read_demo HDF5 dependency", + "SciPy: version metadata only", + "worker_api.API next_episode/latest_observation/execute_actions/finish_episode; rigid-chain matrix arithmetic" + ], + "runtime_dependencies": [ + "Python 3.10.20", + "numpy 2.2.6", + "opencv-python compatible cv2 4.12.0" + ], + "preparation_only_dependencies": [ + "h5py 3.16.0", + "scipy 1.15.2 (version query only)", + "worker_api.py supplied standalone module" + ], + "torch_used": false, + "internet": { + "used": false, + "constraint": "restricted to audited provider proxy", + "verification": "not tested; no downloads/searches" + }, + "environment_calls": "See exploration logs; prior count zero described offline stage", + "exploration_episodes": "API budget is authoritative", + "validation": [ + "Episode7 interactive native success at457 for feedforward-plus-pose controller", + "Independent rehearsals tracked externally by exact API bundle hash" + ], + "manifest_and_environment_lock": "Verified demonstration manifest and common environment lock supplied separately by runner", + "limitations": [ + "Initial image registration can mismatch object pose", + "No ongoing force or book-pose feedback", + "Reference paths can lose contact or encounter workspace limits" + ] +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/policy_runner.py @@ -0,0 +1,25 @@ +"""Frozen-program entry point; no development agent and no reset capability.""" +import importlib.util +import sys + +sys.path.insert(0,'/artifact') +sys.path.insert(0,'/') +from worker_api import API + + +def main(): + spec=importlib.util.spec_from_file_location('controller','/artifact/controller.py') + module=importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + module.reset_episode() + api=API() + result=api.latest_observation() + while not (result['terminated'] or result['truncated'] or result['horizon_reached']): + obs=dict(result['observation'],step_id=result['step_id']) + action=module.act(obs) + if action is None:break + response=api.execute_actions([action]) + result=response['steps'][-1] + + +if __name__=='__main__':main() diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..31182bc8727ee51cd53a414f165a3d5b50b12885 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/skills.md @@ -0,0 +1,7 @@ +# Control skills + +Initial top-camera RGB localizes the platform and book with fixed image operations. Initial demo images are registered near the measured platform y shift. Wall quadrant is chosen by visible image similarity; within that quadrant book major-axis angle penalizes unsuitable references. Initial book-centroid residual adjusts approach poses, bounded to8cm and faded before later wall motion. No seed, episode identity, hidden object pose, network or neural model is used. + +Each action combines the selected demonstration's translation command with gain6 feedback from measured qpos, transformed by rigid-chain Panda forward kinematics, toward the adjusted recorded pose. Nominal reference frames advance one per action. Translation bounds are x +/-0.20, y +/-0.25, z -0.15/+0.18; all native normalized bounds remain respected. Rotation stays zero and closed-gripper target stays -1, exactly as in the demonstration labels. The demonstrated skills are approach, x push, lift/reposition, y push and pivot; some longer references include further contact correction. + +This is online robot-pose feedback with initial visual object localization. It is not ongoing force or book-pose feedback. Wrong reference, occlusion, loss of contact, and robot workspace limits remain possible failures. The controller stops at reference length+20 or native step500. Neither stop condition asserts success. Native API feedback is the authority when present. diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/synthetic_checks.py b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/synthetic_checks.py new file mode 100644 index 0000000000000000000000000000000000000000..2a98887fbc2192beec9119a95127514b0052d5b7 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/synthetic_checks.py @@ -0,0 +1,34 @@ +"""Interface and dependency checks only; no environment and no demo rollout.""" +import importlib.util +from pathlib import Path +import numpy as np +p=Path(__file__).resolve().parent +s=importlib.util.spec_from_file_location('controller',p/'controller.py');c=importlib.util.module_from_spec(s);s.loader.exec_module(c) + +def observation(batched=False): + rng=np.random.default_rng(7) + rgb={k:rng.integers(0,256,(240,320,3),dtype=np.uint8) for k in c._features.CAMERAS} + if batched: rgb={k:v[None] for k,v in rgb.items()} + return {'rgb':rgb,'proprioception':{'agent/qpos':np.array([0,-.5,0,-2,0,1.5,.7,.02,.02]),'agent/qvel':np.zeros(9)},'instruction':'Push the book to the wall and pivot upright.','step_id':1} + +def legal(a): + assert a is None or (a.shape==(7,) and a.dtype==np.float32 and np.isfinite(a).all() and np.all(np.abs(a)<=1)) +# Exercise full packaged memory lookup with synthetic (out-of-distribution) RGB. +c.reset_episode();o=observation();legal(c.act(o)) +c.reset_episode();legal(c.act(observation(True))) +# Synthetic table drives normal lookup branch; not a task simulation. +saved=c._memory +f=c._features.visual_feature(o['rgb']);n=12 +q=o['proprioception']['agent/qpos'].astype(np.float32);v=np.zeros(9,dtype=np.float32) +x=np.tile(f,(n,1));a=np.tile(np.array([.1,-.1,.05,0,0,0,-1],np.float32),(n,1)) +c._memory={'visual':x,'visual_norm':np.einsum('ij,ij->i',x,x),'qpos':np.tile(q,(n,1)),'qvel':np.tile(v,(n,1)),'actions':a} +c.reset_episode();actual=c.act(o);legal(actual);assert np.allclose(actual,a[0]) +# Same state, changed synthetic RGB changes retrieval/abstention. +c.reset_episode();o2=observation();o2['rgb']={k:np.zeros_like(v) for k,v in o2['rgb'].items()};altered=c.act(o2);legal(altered);assert not np.allclose(altered,actual) +c.reset_episode();o3=observation();o3['proprioception']['agent/qpos'][:7]=100;legal(c.act(o3)) +c.reset_episode();o4=observation();o4['rgb']={} +for step in range(1,21):o4['step_id']=step;result=c.act(o4);legal(result) +assert result is None +c.reset_episode();o['step_id']=499;legal(c.act(o));o['step_id']=500;assert c.act(o) is None +c._memory=saved;c.reset_episode() +print('PASS: syntax, packaged memory, flat/batched RGB, legal actions, synthetic RGB/proprio response, missing camera abstention, reset, horizon boundary. No real task tests.') diff --git a/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/PivotBook-v1/frozen/worker_api.py @@ -0,0 +1,81 @@ +"""Standalone worker client; safe to mount without the runner package.""" +import base64 +import json +import socket +import struct +import uuid +import os +from pathlib import Path + +import numpy as np + + +def array_hook(value): + if value.get('__array__') is True: + dtype=np.dtype(value['dtype']) + if dtype.kind not in 'bifu':raise ValueError('non-numeric array from service') + raw=base64.b64decode(value['data'],validate=True) + return np.frombuffer(raw,dtype=dtype).reshape(value['shape']).copy() + return value + + +class API: + def __init__(self,socket_path='/rpc/control.sock',demo_root='/demonstrations',manifest='/demo_manifest.json'): + self.socket_path=socket_path + self.demo_root=Path(demo_root) + self.manifest=Path(manifest) + + def call(self,method,arguments=None,request_id=None): + # Caller can persist a request ID before sending. Never automatically retry. + request_id=request_id or str(uuid.uuid4()) + request={'request_id':request_id,'method':method,'arguments':arguments or {}} + if os.environ.get('AGENT_E20_RPC_TOKEN'): + request['token']=os.environ['AGENT_E20_RPC_TOKEN'] + payload=json.dumps(request,allow_nan=False).encode() + if len(payload)>65536:raise ValueError('request too large') + with socket.socket(socket.AF_UNIX,socket.SOCK_STREAM) as s: + s.settimeout(1810);s.connect(self.socket_path) + s.sendall(struct.pack('!I',len(payload))+payload) + def exact(n): + chunks=[] + while n: + chunk=s.recv(min(n,1024*1024)) + if not chunk:raise RuntimeError('RPC interrupted; do not replay action with a new ID') + chunks.append(chunk);n-=len(chunk) + return b''.join(chunks) + length=struct.unpack('!I',exact(4))[0] + if length>64*1024*1024:raise RuntimeError('response too large') + result=json.loads(exact(length),object_hook=array_hook) + if not result['ok']:raise RuntimeError(result['error']) + return result['result'] + + def next_episode(self,request_id=None):return self.call('next_episode',request_id=request_id) + def latest_observation(self):return self.call('latest_observation') + def execute_actions(self,actions,request_id=None): + return self.call('execute_actions',{'actions':np.asarray(actions).tolist()},request_id) + def finish_episode(self):return self.call('finish_episode') + def budget_status(self):return self.call('budget_status') + def rehearse(self,candidate='candidate',request_id=None): + return self.call('rehearse',{'candidate':candidate},request_id) + def score_rehearsal(self,episode,visible_success,evidence): + return self.call('score_rehearsal',{'episode':episode,'visible_success':visible_success,'evidence':evidence}) + def freeze(self):return self.call('freeze') + + def read_demo(self,demo_id,start=0,stop=None,fields=None): + import h5py + manifest=json.loads(self.manifest.read_text()) + if manifest.get('status') not in ('released','released_for_offline_analysis'): + raise RuntimeError('demonstrations not released by trusted preflight') + entries={e['demo_id']:e for e in manifest['episodes']} + if demo_id not in entries:raise ValueError('unauthorized demo ID') + entry=entries[demo_id] + allowed={f['path'] for f in entry['fields']} + fields=sorted(allowed) if fields is None else fields + if not set(fields)<=allowed:raise ValueError('unauthorized demo field') + stop=entry['length']+1 if stop is None else stop + if not isinstance(start,int) or not isinstance(stop,int) or not 0<=start1.55*f[:,:,1])&(f[:,:,1]>1.4*f[:,:,2])&(f[:,:,0]>40)&(f[:,:,1]>15) + y,x=np.where(m) + if len(x)0]) if np.any(widths>0) else 0. + return np.array([np.polyval(fit,.8),np.quantile(yn,.98),fit[0],width],dtype=np.float32) + +def target(rgb): + a=np.asarray(rgb) + if a.ndim==4:a=a[0] + h,w=a.shape[:2] + m=((a.min(2)>160)&((a.max(2).astype(float)-a.min(2))<50)).astype('uint8') + n,l,st,cent=cv2.connectedComponentsWithStats(m) + ids=[i for i in range(1,n) if .001.45*w] + if not ids:return None + i=max(ids,key=lambda i:st[i,4]);y,x=np.where(l==i);cov=np.cov(np.stack([x/w,y/h]));_,vec=np.linalg.eigh(cov);v=vec[:,-1] + if v[0]<0:v=-v + return np.array([cent[i,0]/w,cent[i,1]/h,v[0],v[1]],np.float32) +def layout(rgb): + a=np.asarray(rgb) + if a.ndim==4:a=a[0] + h,w=a.shape[:2];f=a.astype(float);m=(f[:,:,0]>1.55*f[:,:,1])&(f[:,:,1]>1.4*f[:,:,2])&(f[:,:,0]>50)&(f[:,:,1]>20) + y,x=np.where(m);keep=(x>.35*w)&(y>.2*h);x=x[keep]/w;y=y[keep]/h + t=target(a) + if t is None:t=np.full(4,np.nan) + if len(x)<30:return np.r_[t,np.nan,np.nan] + coef=np.polyfit(x,y,1) + return np.r_[t,np.polyval(coef,.65),coef[0]] + + +CAMERAS = ('front_camera', 'left_camera', 'robot_camera', 'top_camera') +_db = None +_trans = None +_progress = None +_closed = False +_alignment_wait = 0 +_scene = None +_recovery = 0 +_last_demo = None +_insert = 0 +last_diagnostic = {} + + +def image_feature(rgb): + a = np.asarray(rgb) + if a.ndim == 4 and a.shape[0] == 1: + a = a[0] + if a.ndim != 3 or a.shape[2] != 3 or a.dtype != np.uint8: + raise ValueError('RGB must be uint8 HWC or 1HWC') + small = cv2.resize(a, (16, 12), interpolation=cv2.INTER_AREA).astype(np.float32)/255. + # Fixed color heuristic, not a learned segmenter. Wood can be a false positive. + f = a.astype(np.float32)/255. + orange = ((f[:,:,0] > 1.35*f[:,:,1]) & (f[:,:,1] > 1.25*f[:,:,2]) & (f[:,:,0] > .3)).astype(np.float32) + mask = cv2.resize(orange, (16, 12), interpolation=cv2.INTER_AREA) + return np.concatenate([small.reshape(-1), mask.reshape(-1)]) + + +def reset_episode(): + global _progress, _closed, _alignment_wait, _scene, _recovery, _last_demo, _insert, last_diagnostic + _progress = None + _scene = None + _recovery = 0 + _last_demo = None + _insert = 0 + _alignment_wait = 0 + _closed = False + last_diagnostic = {'status': 'reset; initial hold belongs to runner'} + + +def act(obs): + global _db, _trans, _progress, _closed, _alignment_wait, _scene, _recovery, _last_demo, _insert, last_diagnostic + if int(obs['step_id']) >= 530: + last_diagnostic = {'status': 'native horizon; no success inference'} + return None + try: + q = np.asarray(obs['proprioception']['agent/qpos'], dtype=np.float32).reshape(-1) + v = np.asarray(obs['proprioception']['agent/qvel'], dtype=np.float32).reshape(-1) + if q.size != 9 or v.size != 9 or not np.isfinite(q).all() or not np.isfinite(v).all(): + raise ValueError('invalid proprioception') + x = np.stack([image_feature(obs['rgb'][c]) for c in CAMERAS]) + except (KeyError, ValueError, TypeError): + last_diagnostic = {'status': 'invalid legal observation; stop'} + return None + if _db is None: + with np.load(Path(__file__).with_name('reference_bank.npz'), allow_pickle=False) as z: + _db = {k: z[k] for k in z.files} + if _trans is None: + with np.load(Path(__file__).with_name('transitions.npz')) as z: + _trans = {k:z[k] for k in z.files} + d = _db + if _scene is None: + initial = layout(obs['rgb']['top_camera']) + refs = np.load(Path(__file__).with_name('scene_features.npy')) + diff = (refs-initial)/np.array([.08,.08,.2,.2,.08,.2]) + _scene = .15*np.nanmean(diff**2,axis=1) + _scene = np.nan_to_num(_scene,nan=.5) + rope = locate(obs['rgb']['robot_camera']) + align_hold = False + if _closed and _progress is not None and 110 < _progress < 170 and np.mean(q[7:]) < .002 and _recovery == 0: + _closed = False + _progress = 74. + _alignment_wait = 0 + _recovery = 1 + _insert = 0 + # Always compare CURRENT robot state and CURRENT images across all demos. + # The index is a broad motion-phase prior, never a live scene/seed identity. + eligible = np.ones(len(d['q']), dtype=bool) + if _progress is None: + eligible &= d['frame'] <= 75 + else: + eligible &= (d['frame'] >= _progress-3) & (d['frame'] <= _progress+4) + if _closed: + eligible &= d['a'][:,6] < 0 + elif _progress is not None and _progress < 90: + eligible &= d['a'][:,6] > 0 + ids = np.flatnonzero(eligible) + if not len(ids): + last_diagnostic = {'status': 'no reference support; stop'} + return None + scale = np.array([.20]*7+[.025,.025], dtype=np.float32) + dq = np.mean(((d['q'][ids]-q)/scale)**2, axis=1) + dv = np.mean(((d['v'][ids]-v)/1.0)**2, axis=1) + continuity = .3*(d['demo'][ids] != _last_demo) if _closed and _last_demo is not None else np.zeros(len(ids)) + pre = dq + .03*dv + _scene[d['demo'][ids]] + continuity + shortlist = np.argsort(pre)[:128] + ids, dq, dv = ids[shortlist], dq[shortlist], dv[shortlist] + delta = d['visual'][ids]-x[None] + # Give wrist view stronger influence on rope proximity at grasp. + per_cam = np.mean(delta**2, axis=2) + visual = per_cam @ np.array([1.,1.,2.,1.],dtype=np.float32)/5. + score = dq + .03*dv + 100.*visual + _scene[d['demo'][ids]] + if _closed and _last_demo is not None: + score += .3*(d['demo'][ids] != _last_demo) + if _progress is not None: + score += .015*((d['frame'][ids]-_progress)/20.)**2 + rank = np.argsort(score) + best = rank[0] + if dq[best] > 9. or visual[best] > .12: + # Stop rather than synthesize task actions without observational support. + last_diagnostic = {'status': 'out of support; stop', 'q_distance': float(dq[best]), 'visual_distance':float(visual[best])} + return None + # Do not average opening and closing labels; nearest observed mode wins. + grip = d['a'][ids[best],6] + selected = np.array([j for j in rank if d['a'][ids[j],6] == grip][:1]) + w = np.exp(-(score[selected]-score[selected[0]])/.12) + w /= w.sum() + action = w @ d['a'][ids[selected]] + # Local linear differential map compiled only from authorized demo transitions. + near = ids[np.argsort(dq)[:64]] + X = _trans['dq'][near] + Y = _trans['a'][near] + J = np.linalg.solve(X.T @ X + 1e-5*np.eye(7), X.T @ Y) + error = d['q'][ids[best],:7]-q[:7] + correction = np.clip(0.15 * (error @ J), -.05, .05) + correction[3:5] = 0 + if not _closed: + correction[:2] = 0 + action[:6] += correction + if not _closed and _progress is not None and 20 <= _progress <= 98 and rope is not None: + features = np.load(Path(__file__).with_name('rope_features.npy')) + target = features[ids[best]] + if not np.isfinite(target).all(): + target = np.array([.5,.98,0.,.22]) + error_px = np.array([(.5-rope[0])*640, (target[1]-rope[1])*480]) + Jimage = np.array([[33.,154.],[145.,-25.]]) + servo = np.clip(.12*np.linalg.solve(Jimage,error_px),-.07,.07) + action[:2] += servo + action[5] = np.clip(-.3*rope[2],-.05,.05) + if not _closed and _progress is not None and _progress >= 90 and _alignment_wait < 35: + ready = rope is not None and abs(rope[0]-.5)<.065 and rope[1]>.90 and rope[3]>.205 and abs(rope[2])<.15 + if not ready: + grip = 1. + action[2] = -.08 if rope is None or rope[3]<.205 else 0. + align_hold = True + _alignment_wait += 1 + elif _insert < 6: + grip = 1. + action[:3] = [0.04,0.,0.] + align_hold = True + _insert += 1 + if _closed: + action[:3] = np.clip(action[:3],-.105,.105) + action[5] = np.clip(action[5],-.05,.05) + _last_demo = int(d['demo'][ids[best]]) + action[6] = grip + _closed = _closed or grip < 0 + phase = float(w @ d['frame'][ids[selected]]) + _progress = phase if _progress is None else (_progress if align_hold else max(_progress+1.0, min(phase, _progress+1.2))) + last_diagnostic = {'status':'reference-supported draft action', 'phase':_progress, 'insertion_steps':_insert, 'recovery':_recovery, 'alignment_wait':_alignment_wait, 'rope':None if rope is None else rope.tolist(), 'reference_frame':int(d['frame'][ids[best]]), 'reference_demo':int(d['demo'][ids[best]]), 'correction':correction.tolist(), + 'q_distance':float(dq[best]), 'visual_distance':float(visual[best])} + return np.clip(action, -1., 1.).astype(np.float32).reshape(7) + +reset_episode() diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..2b86b6629c57085e61a8d6934161f3c8a421e2c2 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "WrapRope-v1", + "status": "released", + "selection_rule": "prefer existing pinned D20, otherwise numeric trajectory ID sort before reading data", + "lineage_status": "pinned_comparator", + "episodes": [ + { + "demo_id": "demo_00", + "file": "demo_00.h5", + "length": 514, + "fields": [ + { + "path": "actions", + "shape": [ + 514, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 515, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 515, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 515, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 515, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 515, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 515, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0df82ebd8c7e220ac4841bb12e8ab84f68446706a0a9a0c2d03df80ee00e154e", + "source_sha256": "a98825e7a5079c640fee814fc7c9c148ddd8a28cca5d0d1b22d3e1f6491e73dd", + "view_sha256": "56f6453006a33f1518ce3c52bacd9fe08945c2d883065655bae2f3988ba91d8f" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 534, + "fields": [ + { + "path": "actions", + "shape": [ + 534, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 535, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 535, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 535, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 535, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 535, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 535, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7fc80c25e724c8d0caf0bf6e8658e7cea175629e7be7dc162bba8796d67521f2", + "source_sha256": "ce27bcbdad5f9fd8c1b864cfa3f8b001e7713d178c58af58e600bd7a63235d11", + "view_sha256": "e29081a97cf671d823466cf1e76faa7233bff7e228b8a12d25101c86e8336b13" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 532, + "fields": [ + { + "path": "actions", + "shape": [ + 532, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 533, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 533, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 533, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 533, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 533, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 533, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "caa4f59845fab05814d1ab85807bbf33c4c68c83266d558e8f8b38d63ce400a5", + "source_sha256": "4b38d46144f129a7cd860e9cb7dfeb39556232b12fb29ddb92b24d594390930e", + "view_sha256": "f463f0dcbeaade4a2653311888f871ae2db4d2cddaac4fb0865df0484e21c588" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 531, + "fields": [ + { + "path": "actions", + "shape": [ + 531, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 532, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 532, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 532, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 532, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 532, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 532, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "cd8a2fb84bd34db3e6d41bb7fa45d695483956f39d16f354bf4716192b182c3b", + "source_sha256": "1fe5d2ec6af9ee9d9dc77f5adcd95f8482111c9463a3f14609a5c9addf4d8a23", + "view_sha256": "d417a02eb5a38e867790a66ec40600bc8e78bb332c2150322a452fbc0a6c9eed" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 532, + "fields": [ + { + "path": "actions", + "shape": [ + 532, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 533, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 533, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 533, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 533, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 533, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 533, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d9072daf4bb2ccf9f425c18e31b86224b22cc4aca6105acbc1f95c10f30c5770", + "source_sha256": "3e5daf345b6456c128d3f5c48f5a7eda6d65f091b57a033ad06355a216b5fbb3", + "view_sha256": "69618cd4908e44bedf35dc407200c867e1f4cfd1cf98ec296a91055b3c58f0d1" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 528, + "fields": [ + { + "path": "actions", + "shape": [ + 528, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 529, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 529, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 529, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 529, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 529, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 529, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "55afb59d588d55626fe8a06f8ebf07551390bd5ebe810c65541609bdabb07e41", + "source_sha256": "773c04fc82843046a2fa43e72fd5950c9d3f1294de29c799f1404cf4535334f5", + "view_sha256": "1dbd80bd0bbfbec23ac34d6714b58630468063a1aaa06de11a48a38dce8b34f3" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 518, + "fields": [ + { + "path": "actions", + "shape": [ + 518, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 519, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 519, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 519, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 519, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 519, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 519, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "bd5cfdfd1558c006f791cdb4e511953cd87b0743b56e0978571052d5d0207c53", + "source_sha256": "6c47392b88891a1d460f26d017c9338f0092c2e09c18b7d4adc03d94be05ff24", + "view_sha256": "358643c893093340f18169d0908a106fe2852df6b17df971f70c98ae92970477" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 508, + "fields": [ + { + "path": "actions", + "shape": [ + 508, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 509, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 509, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 509, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 509, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 509, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 509, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d9311ebae22afcb1fb2e59b6a84f2c8d22bf18368a7354209fa49f11dd2e57f3", + "source_sha256": "72a8eb245d2e5e93f5961f19fd76de403cf186ba31099528c05963faa5fe24d8", + "view_sha256": "644d007728398d14d9a57ece743b8f8c1db73da284a7412d4622150fc4327728" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 521, + "fields": [ + { + "path": "actions", + "shape": [ + 521, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 522, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 522, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 522, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 522, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 522, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 522, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ab0f80d4f60e012e5e1f0975473e4adde3a2889466340c6c625dc32059683d30", + "source_sha256": "474da79980b95c0fb08a0b421cb3b62881db141566bd78b09f52ffa32d5accbd", + "view_sha256": "5d111d283893dc1185220684620e6c0a1bcd20ee26d924eb7000660bb380e189" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 555, + "fields": [ + { + "path": "actions", + "shape": [ + 555, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 556, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 556, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 556, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 556, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 556, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 556, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "1b540928110da129492166327397fe3212385bde15cf0b99cd1452576d2785b0", + "source_sha256": "bf4fddb4f090fc90579762b4a9dcc59cf71b5725f63ac732f133e7ac935f56ee", + "view_sha256": "9cdb4acc257a13b5d14e9f896045f25911358b8172a90bbd9502a3628ac5bfdf" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 517, + "fields": [ + { + "path": "actions", + "shape": [ + 517, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 518, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 518, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 518, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 518, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 518, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 518, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9dea12b723a758c3809f56445938a56d0b40fe04b7bebb3382aa1cb5625a835a", + "source_sha256": "7b82862b29fadb6b2d76d946afc3627d6fee2ec0174dc38f771179f42bdc8088", + "view_sha256": "5613f3199f5254d54008b7f5f064766c80e57d778c081518f5710fc77c337b29" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 519, + "fields": [ + { + "path": "actions", + "shape": [ + 519, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 520, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 520, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 520, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 520, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 520, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 520, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ff542e47bd4f0d836916abeb1a4b792441dd13a4ce5da1e97620232e634a922c", + "source_sha256": "163f38c0cd57927a965667e6d51d38ee982b1cc6e2ea8d62c2d3d60c0f8223c2", + "view_sha256": "dd5d2d5835543d4a784eb2b61516ed64db1df0260d0a6713f59b18bf012d629b" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 538, + "fields": [ + { + "path": "actions", + "shape": [ + 538, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 539, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 539, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 539, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 539, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 539, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 539, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8d9c09275c2b8d6c1d5ad0a778506e51dd0eb1ace0d8d7d1b12715ab624503b5", + "source_sha256": "5b58250b058d82a2b742cfa780813da141fe849618962572736482563cf9c34f", + "view_sha256": "60c1ecc4733a2029e10cd24d5d3b9672893e6ec3746f17ad24572b17c9c861ff" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 522, + "fields": [ + { + "path": "actions", + "shape": [ + 522, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 523, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 523, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 523, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 523, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 523, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 523, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "3966d30c6538a00dc184276474ef97bacfbc8c6c0b9f0045411442c192ead24e", + "source_sha256": "24dec93f49c7b53a3cf649813ed99c0aba766a3a28be70c4c4c506aa6363c0f8", + "view_sha256": "a9d662ebe0b2d456ce01741a9038112be7ccba7e0c1b14ae328cb57c1f9ff96d" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 524, + "fields": [ + { + "path": "actions", + "shape": [ + 524, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 525, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 525, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 525, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 525, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 525, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 525, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "4816276596f118318994d725be5edae76aa5804f3788dff59ca0a3a0db9828a2", + "source_sha256": "b7555d8d89b0cd82e691523192cabe870128924995c0b7c35ccc41b801e78c09", + "view_sha256": "fb232d5261d2c67af722623966753b0d13f4b4dc4f3b4179b44e7b4a01abed60" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 514, + "fields": [ + { + "path": "actions", + "shape": [ + 514, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 515, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 515, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 515, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 515, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 515, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 515, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e46b92e3ac4183e6df1c0455e2d5fdded9ca73b006e480292cf281fe612e2722", + "source_sha256": "37749320ea6a411d165109d8487de51ba803335f6a92f1564cc987f8cc00926a", + "view_sha256": "0c712401cd86e31ce6616a597280be1f3433b5905c65fac360f1558db63c4f1e" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 513, + "fields": [ + { + "path": "actions", + "shape": [ + 513, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 514, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 514, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 514, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 514, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 514, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 514, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c2f440f5fdc401e6f3117918ef12ee78294052bb688a06031b69c08745c77b3b", + "source_sha256": "fb4ec1a274d96e6130934975f1378a51dc44b92f60196013652372a83259018f", + "view_sha256": "eb4e99bbdf02186dc6daa734c2f999be34f8356912fb554246a6f2c9f12e2a7b" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 523, + "fields": [ + { + "path": "actions", + "shape": [ + 523, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 524, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 524, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 524, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7f5f105cf345aff2de39b3fa269f917471b7f4e56aa9ec6e67f0b25810e661ad", + "source_sha256": "b185b6f5d0e67d6c3031b99909b08285af45217fb54ef660a6fc836c2ac76cea", + "view_sha256": "96ab9ba5bbb103d5c03d7bf74a4b4c320361c58c4a9482d64d035b0ac7fc1422" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 511, + "fields": [ + { + "path": "actions", + "shape": [ + 511, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 512, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 512, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 512, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 512, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 512, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 512, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6358deb67c8ddf6f3da1998313a6914c2320bfb4b28b418406fc3997f7232567", + "source_sha256": "6dfe91847d95dd6fb122e3bcfdf2c73e3763436119cc51e811ecd044368bb252", + "view_sha256": "e7daa51d8c16077dbe58b040e1ec71e59f5d6c980d6387f0b54ead6a8205fcd4" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 523, + "fields": [ + { + "path": "actions", + "shape": [ + 523, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 524, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 524, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 524, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 524, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c4b9b4430f44a9617f0252857787c6f3c4b0506cc470f03e427b07bb971588c7", + "source_sha256": "2d9d30e652f64d388e7b7ef8c53b691594cbf373dd6a677da7f41035c0672402", + "view_sha256": "e5289a9bd619e3bfb86bf1776c626aa6e0added10965ebb23fde602c4025d428" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/environment.lock @@ -0,0 +1,249 @@ +absl-py==2.4.0 +accelerate==1.13.0 +addict==2.4.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.13.5 +aiosignal==1.4.0 +annotated-types==0.7.0 +anyio==4.13.0 +anytree==2.13.0 +asttokens==3.0.1 +async-timeout==5.0.1 +attrs==26.1.0 +av==15.1.0 +blinker==1.9.0 +casadi==3.7.2 +certifi==2026.4.22 +cffi==2.0.0 +charset-normalizer==3.4.7 +click==8.3.3 +cloudpickle==3.1.2 +cmake==4.1.3 +coacd==1.0.11 +colorama==0.4.6 +colorlog==6.10.1 +comm==0.2.3 +ConfigArgParse==1.7.5 +contourpy==1.3.2 +cuda-bindings==12.9.4 +cuda-pathfinder==1.5.4 +cycler==0.12.1 +dacite==1.9.2 +dash==4.1.0 +dataclasses-json==0.6.7 +datasets==4.8.5 +decorator==5.2.1 +deepdiff==8.6.2 +Deprecated==1.3.1 +diffusers==0.35.2 +dill==0.4.1 +docstring_parser==0.18.0 +draccus==0.10.0 +einops==0.8.2 +embreex==4.4.0 +etils==1.13.0 +evdev==1.9.3 +exceptiongroup==1.3.1 +executing==2.2.1 +Farama-Notifications==0.0.6 +fast_simplification==0.1.13 +fastjsonschema==2.21.2 +filelock==3.29.0 +Flask==3.1.3 +fonttools==4.63.0 +freetype-py==2.5.1 +frozenlist==1.8.0 +fsspec==2026.2.0 +genesis-world @ file:///data/gck/genesis-world +git-filter-repo==2.47.0 +gitdb==4.0.12 +GitPython==3.1.50 +glfw==2.10.0 +gs-madrona==0.0.5 +gstaichi==3.3.0 +gym==0.26.2 +gym-notices==0.1.0 +gymnasium==1.3.0 +h11==0.16.0 +h5py==3.16.0 +hf-xet==1.5.0 +hf_transfer==0.1.9 +httpcore==1.0.9 +httpx==0.28.1 +huggingface-hub==0.35.3 +idna==3.15 +ImageIO==2.37.3 +imageio-ffmpeg==0.6.0 +importlib_metadata==9.0.0 +importlib_resources==7.1.0 +inquirerpy==0.3.4 +ipython==8.39.0 +ipywidgets==8.1.8 +itsdangerous==2.2.0 +jedi==0.20.0 +Jinja2==3.1.6 +joblib==1.5.3 +jsonlines==4.0.0 +jsonschema==4.26.0 +jsonschema-specifications==2025.9.1 +jupyter_core==5.9.1 +jupyterlab_widgets==3.0.16 +kiwisolver==1.5.0 +lazy-loader==0.5 +lerobot==0.4.4 +libigl==2.6.2 +llvmlite==0.47.0 +loguru==0.7.3 +lxml==6.1.0 +manifold3d==3.4.1 +-e git+ssh://git@github.com/HeegerGao/maniladder.git@f6eed17496816bb41ce484f2d7580990a908d3e6#egg=maniladder +mapbox_earcut==2.0.0 +markdown-it-py==4.2.0 +MarkupSafe==3.0.3 +marshmallow==3.26.2 +matplotlib==3.10.9 +matplotlib-inline==0.2.2 +mdurl==0.1.2 +mergedeep==1.3.4 +moviepy==2.2.1 +mpmath==1.3.0 +msgspec==0.21.1 +mujoco==3.8.1 +multidict==6.7.1 +multiprocess==0.70.19 +mypy_extensions==1.1.0 +nbformat==5.10.4 +nest-asyncio==1.6.0 +networkx==3.4.2 +ninja==1.13.0 +nlopt==2.10.0 +numba==0.65.1 +numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1747544640217/work/dist/numpy-2.2.6-cp310-cp310-linux_x86_64.whl#sha256=d6d964caeef85d00073d27cd62b46883d275b3d8162f723f0fcabbd0b3cc3f9d +nvidia-cublas-cu12==12.8.4.1 +nvidia-cuda-cupti-cu12==12.8.90 +nvidia-cuda-nvrtc-cu12==12.8.93 +nvidia-cuda-runtime-cu12==12.8.90 +nvidia-cudnn-cu12==9.10.2.21 +nvidia-cufft-cu12==11.3.3.83 +nvidia-cufile-cu12==1.13.1.3 +nvidia-curand-cu12==10.3.9.90 +nvidia-cusolver-cu12==11.7.3.90 +nvidia-cusparse-cu12==12.5.8.93 +nvidia-cusparselt-cu12==0.7.1 +nvidia-nccl-cu12==2.27.5 +nvidia-nvjitlink-cu12==12.8.93 +nvidia-nvshmem-cu12==3.4.5 +nvidia-nvtx-cu12==12.8.90 +open3d==0.19.0 +opencv-python==4.13.0.92 +opencv-python-headless==4.12.0.88 +OpenEXR==3.4.11 +orderly-set==5.5.0 +packaging==25.0 +pandas==2.3.3 +parso==0.8.7 +pexpect==4.9.0 +pfzy==0.3.4 +pillow==11.3.0 +pin==4.0.0 +pip @ file:///home/task_177498883471825/croot/pip_1774988882575/work +platformdirs==4.9.6 +plotly==5.24.1 +polyscope==2.6.1 +proglog==0.1.12 +prompt_toolkit==3.0.52 +propcache==0.5.2 +protobuf==6.33.6 +psutil==7.2.2 +ptyprocess==0.7.0 +pure_eval==0.2.3 +py-cpuinfo==9.0.0 +py-spy==0.4.2 +pyarrow==24.0.0 +pycollada==0.9.3 +pycparser==3.0 +pydantic==2.13.4 +pydantic_core==2.46.4 +PyGEL3D==0.6.1 +pyglet==2.1.14 +pygltflib==1.16.0 +Pygments==2.20.0 +pymeshlab==2025.7.post1 +pynput==1.8.2 +PyOpenGL==3.1.10 +pyparsing==3.3.2 +pyperclip==1.11.0 +PyQt6==6.11.0 +PyQt6-Qt6==6.11.0 +PyQt6_sip==13.11.1 +pyquaternion==0.9.9 +pyserial==3.5 +pysplashsurf==0.12.0.2 +python-dateutil==2.9.0.post0 +python-dotenv==1.2.2 +python-xlib==0.33 +pytransform3d==3.15.0 +pytz==2026.2 +pyuipc @ file:///tmp/claude-1005/-mnt4-gck-maniladder/9f005e67-04f6-4368-bd0e-9f40896c7dbf/scratchpad/pyuipc_dl/pyuipc-0.0.25-cp310-cp310-manylinux_2_34_x86_64.whl#sha256=76ff13554e1971ea4401db2c875369cf32352ae3a5a4c398c45193231b5cbf00 +PyYAML==6.0.3 +pyyaml-include==1.4.1 +referencing==0.37.0 +regex==2026.5.9 +requests==2.34.2 +rerun-sdk==0.26.2 +retrying==1.4.2 +rich==14.3.4 +rpds-py==0.30.0 +rtree==1.4.1 +safetensors==0.7.0 +sapien==3.0.3 +scikit-image==0.25.2 +scikit-learn==1.7.2 +scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy-split_1739790642651/work/dist/scipy-1.15.2-cp310-cp310-linux_x86_64.whl#sha256=9e52bad6c3294d1a5b04a13632118ca2157130603c6c018c2d710162b223b27e +sentry-sdk==2.60.0 +setuptools==80.10.2 +shapely==2.1.2 +six==1.17.0 +smmap==5.0.3 +stack-data==0.6.3 +svg.path==7.0 +sympy==1.14.0 +tenacity==9.1.4 +termcolor==3.3.0 +tetgen==0.8.4 +threadpoolctl==3.6.0 +tifffile==2025.5.10 +timm==1.0.27 +toml==0.10.2 +torch==2.10.0 +torchaudio==2.11.0 +torchcodec==0.10.0 +torchvision==0.25.0 +tqdm==4.67.3 +traitlets==5.15.0 +transforms3d==0.4.2 +trimesh==4.12.2 +triton==3.6.0 +typeguard==4.5.2 +typing-inspect==0.9.0 +typing-inspection==0.4.2 +typing_extensions==4.15.0 +tyro==1.0.13 +tzdata==2026.2 +urllib3==2.7.0 +vhacdx==0.0.10 +viser==1.0.27 +vtk==9.6.1 +wandb==0.24.2 +wcwidth==0.7.0 +websockets==16.0 +Werkzeug==3.1.8 +wheel==0.46.3 +widgetsnbextension==4.0.15 +wrapt==2.1.2 +xxhash==3.7.0 +yarl==1.23.0 +yourdfpy==0.0.60 +z3-solver==4.16.0.0 +zipp==3.23.1 +zstandard==0.25.0 diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/feature_access_log.json b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/feature_access_log.json new file mode 100644 index 0000000000000000000000000000000000000000..83295a06a0e02b2d36165ae6586a17522ac5d6c4 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/feature_access_log.json @@ -0,0 +1,3892 @@ +[ + { + "demo_id": "demo_00", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513 + ], + "rgb_read_interval": [ + 0, + 515 + ] + }, + { + "demo_id": "demo_01", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522, + 525, + 528, + 531, + 533 + ], + "rgb_read_interval": [ + 0, + 535 + ] + }, + { + "demo_id": "demo_02", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522, + 525, + 528, + 531 + ], + "rgb_read_interval": [ + 0, + 533 + ] + }, + { + "demo_id": "demo_03", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522, + 525, + 528, + 530 + ], + "rgb_read_interval": [ + 0, + 532 + ] + }, + { + "demo_id": "demo_04", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522, + 525, + 528, + 531 + ], + "rgb_read_interval": [ + 0, + 533 + ] + }, + { + "demo_id": "demo_05", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522, + 525, + 527 + ], + "rgb_read_interval": [ + 0, + 529 + ] + }, + { + "demo_id": "demo_06", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 517 + ], + "rgb_read_interval": [ + 0, + 519 + ] + }, + { + "demo_id": "demo_07", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507 + ], + "rgb_read_interval": [ + 0, + 509 + ] + }, + { + "demo_id": "demo_08", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 520 + ], + "rgb_read_interval": [ + 0, + 522 + ] + }, + { + "demo_id": "demo_09", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522, + 525, + 528, + 531, + 534, + 537, + 540, + 543, + 546, + 549, + 552, + 554 + ], + "rgb_read_interval": [ + 0, + 556 + ] + }, + { + "demo_id": "demo_10", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516 + ], + "rgb_read_interval": [ + 0, + 518 + ] + }, + { + "demo_id": "demo_11", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 518 + ], + "rgb_read_interval": [ + 0, + 520 + ] + }, + { + "demo_id": "demo_12", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522, + 525, + 528, + 531, + 534, + 537 + ], + "rgb_read_interval": [ + 0, + 539 + ] + }, + { + "demo_id": "demo_13", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 521 + ], + "rgb_read_interval": [ + 0, + 523 + ] + }, + { + "demo_id": "demo_14", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522, + 523 + ], + "rgb_read_interval": [ + 0, + 525 + ] + }, + { + "demo_id": "demo_15", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513 + ], + "rgb_read_interval": [ + 0, + 515 + ] + }, + { + "demo_id": "demo_16", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 512 + ], + "rgb_read_interval": [ + 0, + 514 + ] + }, + { + "demo_id": "demo_17", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522 + ], + "rgb_read_interval": [ + 0, + 524 + ] + }, + { + "demo_id": "demo_18", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510 + ], + "rgb_read_interval": [ + 0, + 512 + ] + }, + { + "demo_id": "demo_19", + "feature_frames": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21, + 24, + 27, + 30, + 33, + 36, + 39, + 42, + 45, + 48, + 51, + 54, + 57, + 60, + 63, + 66, + 69, + 72, + 75, + 78, + 81, + 84, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 105, + 108, + 111, + 114, + 117, + 120, + 123, + 126, + 129, + 132, + 135, + 138, + 141, + 144, + 147, + 150, + 153, + 156, + 159, + 162, + 165, + 168, + 171, + 174, + 177, + 180, + 183, + 186, + 189, + 192, + 195, + 198, + 201, + 204, + 207, + 210, + 213, + 216, + 219, + 222, + 225, + 228, + 231, + 234, + 237, + 240, + 243, + 246, + 249, + 252, + 255, + 258, + 261, + 264, + 267, + 270, + 273, + 276, + 279, + 282, + 285, + 288, + 291, + 294, + 297, + 300, + 303, + 306, + 309, + 312, + 315, + 318, + 321, + 324, + 327, + 330, + 333, + 336, + 339, + 342, + 345, + 348, + 351, + 354, + 357, + 360, + 363, + 366, + 369, + 372, + 375, + 378, + 381, + 384, + 387, + 390, + 393, + 396, + 399, + 402, + 405, + 408, + 411, + 414, + 417, + 420, + 423, + 426, + 429, + 432, + 435, + 438, + 441, + 444, + 447, + 450, + 453, + 456, + 459, + 462, + 465, + 468, + 471, + 474, + 477, + 480, + 483, + 486, + 489, + 492, + 495, + 498, + 501, + 504, + 507, + 510, + 513, + 516, + 519, + 522 + ], + "rgb_read_interval": [ + 0, + 524 + ] + } +] \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..08fd8976031f2728d5b2adf142b6532150a76c6b --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/findings.md @@ -0,0 +1,8 @@ +# Findings through interactive episode16 +Only this task's20 authorized demonstrations and legal API exploration were used. Original detailed analysis is /workspace/demo_analysis.md; evidence and per-episode records are in /workspace/evidence and /workspace/exploration. No neural weights were trained, simulator constructed, reset requested, seed requested, benchmark implementation read, or other task artifact accessed. + +Episodes1-2: nearest-neighbor phase stalls; single-neighbor actions reduce cancellation but do not remove stalling. Episodes3-4: phase progression enables grasp/lift, but rope lost during wrapping; reference phase later runs ahead. Episode5: independent rehearsal valid, full530 steps, native success false. Episodes6-8: local demo-derived pose correction and narrow phase window can retain an early grasp in some scenes, but miss others. Episode9: small legal x/y probes establish a local wrist pixel/action Jacobian. Episodes10-11: visual servo improves centering; shadow and missing-view failures require lower brightness thresholds and top-camera layout cues. Episodes12-13: aligned image can still mean empty closure; one early recovery executed, but failed to preserve later grasp. Episode14: width/yaw close readiness retains rope through200, lost by240. Episode15: continuity penalty and motion caps plus recovery retain rope through200, lost by250; full530 native success false. Episode16: six-step pre-close insertion retains rope through200, lost by250/260; native success false. + +Localization: uncalibrated image features, fixed color masks and top-camera target/rope layout. Pose: current qpos/qvel and local ridge differential mapping from demo transitions. Grasp: center/extent/tilt/width readiness, bounded wait/insertion, closed target. Timing: bounded phase progression within native horizon; six demos exceed horizon and are not granted extra time. Recovery: one early empty-finger retry only, tested but not sufficient. Program failures: initial exploration harness unpacked the action result incorrectly after one action; fixed and resumed same slot. Some episode1 in-memory action diagnostics were lost on interruption; saved observations and available log are retained without inventing missing records. Independent episode5 completed as a valid runnable program. + +No successful wrap has been observed through16. Final exact bundle is intended for independent rehearsals17-20. Their hashes, native outcomes, final images and freeze response are recorded outside the bundle so repeated rehearsals use identical candidate bytes. Native success is authoritative when supplied; image ambiguity never counts true. The controller has no success detector and no late regrasp or tension control. diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..085be86e8f632fa7d060675a62ca9ac714ad609d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/freeze_manifest.json @@ -0,0 +1,101 @@ +{ + "files": { + "__pycache__/build_reference.cpython-310.pyc": "b12c46e0778916707c746f08b34b2123f8c850e49f61d918c1bf5d278ff84cd0", + "__pycache__/controller.cpython-310.pyc": "e23497981eabe80874b0013a241fd2b90e071be8541bd1f6b9ca90c3876676d1", + "__pycache__/rope_vision.cpython-310.pyc": "293803db736adb200723aba2488b8ed18f07a2a30b3fd64ed83808b67b6a6c47", + "__pycache__/scene_vision.cpython-310.pyc": "983048e16e095363119db983085ab8422bfd1d1bb576b72abe9870f6c8098d66", + "__pycache__/synthetic_checks.cpython-310.pyc": "2bfe2cfc25de1af2641445157883ade8e36387104f517129084c626f63c0ae15", + "build_reference.py": "0b5c52dcfc4c11fc40b9b156fce6413be8f18478111b9c77862d32141936371e", + "controller.py": "483108c28feef5bdfc7f66b55716febf93ebb2b598adfad65fec5b18593e9e47", + "demo_manifest.json": "4a723d8aa6ed7d2e21826ed12d0ecb914ed9e2bb3ded990acdd8c690daf530ab", + "demonstrations_readonly/demo_00.h5": "56f6453006a33f1518ce3c52bacd9fe08945c2d883065655bae2f3988ba91d8f", + "demonstrations_readonly/demo_01.h5": "e29081a97cf671d823466cf1e76faa7233bff7e228b8a12d25101c86e8336b13", + "demonstrations_readonly/demo_02.h5": "f463f0dcbeaade4a2653311888f871ae2db4d2cddaac4fb0865df0484e21c588", + "demonstrations_readonly/demo_03.h5": "d417a02eb5a38e867790a66ec40600bc8e78bb332c2150322a452fbc0a6c9eed", + "demonstrations_readonly/demo_04.h5": "69618cd4908e44bedf35dc407200c867e1f4cfd1cf98ec296a91055b3c58f0d1", + "demonstrations_readonly/demo_05.h5": "1dbd80bd0bbfbec23ac34d6714b58630468063a1aaa06de11a48a38dce8b34f3", + "demonstrations_readonly/demo_06.h5": "358643c893093340f18169d0908a106fe2852df6b17df971f70c98ae92970477", + "demonstrations_readonly/demo_07.h5": "644d007728398d14d9a57ece743b8f8c1db73da284a7412d4622150fc4327728", + "demonstrations_readonly/demo_08.h5": "5d111d283893dc1185220684620e6c0a1bcd20ee26d924eb7000660bb380e189", + "demonstrations_readonly/demo_09.h5": "9cdb4acc257a13b5d14e9f896045f25911358b8172a90bbd9502a3628ac5bfdf", + "demonstrations_readonly/demo_10.h5": "5613f3199f5254d54008b7f5f064766c80e57d778c081518f5710fc77c337b29", + "demonstrations_readonly/demo_11.h5": "dd5d2d5835543d4a784eb2b61516ed64db1df0260d0a6713f59b18bf012d629b", + "demonstrations_readonly/demo_12.h5": "60c1ecc4733a2029e10cd24d5d3b9672893e6ec3746f17ad24572b17c9c861ff", + "demonstrations_readonly/demo_13.h5": "a9d662ebe0b2d456ce01741a9038112be7ccba7e0c1b14ae328cb57c1f9ff96d", + "demonstrations_readonly/demo_14.h5": "fb232d5261d2c67af722623966753b0d13f4b4dc4f3b4179b44e7b4a01abed60", + "demonstrations_readonly/demo_15.h5": "0c712401cd86e31ce6616a597280be1f3433b5905c65fac360f1558db63c4f1e", + "demonstrations_readonly/demo_16.h5": "eb4e99bbdf02186dc6daa734c2f999be34f8356912fb554246a6f2c9f12e2a7b", + "demonstrations_readonly/demo_17.h5": "96ab9ba5bbb103d5c03d7bf74a4b4c320361c58c4a9482d64d035b0ac7fc1422", + "demonstrations_readonly/demo_18.h5": "e7daa51d8c16077dbe58b040e1ec71e59f5d6c980d6387f0b54ead6a8205fcd4", + "demonstrations_readonly/demo_19.h5": "e5289a9bd619e3bfb86bf1776c626aa6e0added10965ebb23fde602c4025d428", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "feature_access_log.json": "309235d91b63e474fe4ff5d5e83a244707c541816f66f65ab08d8c24a2d7259a", + "findings.md": "0c5c2fac4033efa92101c4a8ea971196b5f06c38a6dc6d45443c5fd84c2ee96b", + "handoff.md": "1314229eab11787ab02e5c3040411e3ba599a5cbf3d9f5c915d2d4ff351bbfa0", + "model_tool_manifest.yaml": "e4e4263ba055fb0477d5b4a1217922b0776648cc00c1bde435c99e42cf9676e9", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "reference_bank.npz": "06fa4e676ebef46366fb4acd8b625ef4e1a75e659541df270f3da279e3169401", + "rope_features.npy": "9f99c7ff13e4b2318f09e0ba159dd34e6f51adbfcdc36fd249a3c1735a949382", + "rope_vision.py": "08c130b50b93145f5c55f4627741ce6a49380a64c4df5675b1be392e69aad09a", + "scene_features.npy": "90f8e545a7487dad4315c9e8120f21b21398499aa1a6fc46b8f74bd1292aff6b", + "scene_vision.py": "ec3a689c57218a2fd4432e43a561d0448cfdc19a93d68400bf2e436abf67e2cf", + "skills.md": "0225066527fc3b084a9102bd43ca563a4e6106294b3ba1ece7ef020c29e30926", + "synthetic_check_results.json": "5bfd205666b3ce93d7ed62574820afc5d6dc072eeeaf78bfead54856444fc4aa", + "synthetic_checks.py": "35d945b5a516dd93a62d793a3bfb3040bd9441573155936f89b6cd581e96ac2f", + "transitions.npz": "05480f040bb834c00d95c5e7aadfe38b5a5108aba940e27e11e7064c88320105", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "a869a9bd1cba8de34794a56a3ce3caa2370f94e76ec7347a34961c91d440552d", + "exploration_ledger_hash": "c25f1b2db3c4b1f411f51f0c32bc6459b23fc68c682d1b373f05c0b046c29985", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "episode": 5, + "bundle_hash": "dac11636fd44eff0f505d27ea96da5ccf1aceeae76f6e55211fc88b133bee8a4", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "a869a9bd1cba8de34794a56a3ce3caa2370f94e76ec7347a34961c91d440552d", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "a869a9bd1cba8de34794a56a3ce3caa2370f94e76ec7347a34961c91d440552d", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "a869a9bd1cba8de34794a56a3ce3caa2370f94e76ec7347a34961c91d440552d", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "a869a9bd1cba8de34794a56a3ce3caa2370f94e76ec7347a34961c91d440552d", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..69a08decd8f1857147d9291b7ac6b92cf09c2f53 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/handoff.md @@ -0,0 +1,6 @@ +# Compiled controller handoff +Task: WrapRope-v1, Agent-D20-E20-Compiled. Load controller.py, call reset_episode(), then act(obs) once per legal post-hold observation. Required runtime assets are reference_bank.npz, transitions.npz, rope_features.npy and scene_features.npy beside controller.py. NumPy and OpenCV are the only non-stdlib dependencies. Helper Python files are included. No network, API, simulator, agent or model download is needed by the frozen program. Runner supplies verified demonstration files/manifest and common environment lock. + +All sources are this task's20 authorized demonstrations and legal API exploration. Original analysis is /workspace/demo_analysis.md; task-local evidence is /workspace/evidence and /workspace/exploration. Exact rehearsed versions are selected by the trusted runner using its stated ranking. Native sparse success takes precedence. Where absent, only unambiguous legal-image evidence may establish visible success; ambiguity is false. + +Known limitations: grasp and retention failures, local-only visual calibration, heuristic color segmentation, phase/scene mismatch, a single early recovery, and no late recovery or geometric completion detector. Required horizon and action bounds are enforced. No stop diagnostic claims completion. Rehearsal hashes/outcomes and freeze response are saved outside the bundle so the exact candidate can remain unchanged across final rehearsals. diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd586253e48e6925cf2ea056473aaba718f836a6 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,104 @@ +{ + "stage": "Agent-D20-E20-Compiled", + "status": "candidate_for_independent_rehearsal", + "task_id": "WrapRope-v1", + "agent_model": { + "identity": "Codex (exact deployed model revision not exposed)", + "weights_modified": false, + "external_weight_references": [] + }, + "runtime_dependencies": { + "numpy": "2.2.6", + "opencv-python": "4.13.0.92", + "python": "3.10.20" + }, + "preparation_dependencies": { + "h5py": "3.16.0", + "worker_api": "/worker_api.py standalone API.read_demo", + "stdlib": [ + "json", + "pathlib", + "importlib", + "hashlib", + "platform", + "sys", + "py_compile", + "subprocess", + "importlib.metadata" + ] + }, + "tools_used": [ + "functions.exec", + "exec_command: bash and Python", + "view_image: legal demo contact sheets" + ], + "source_provenance": { + "contract": "/task_contract.json", + "demo_manifest": "/demo_manifest.json", + "authorized_demo_ids": [ + "demo_00", + "demo_01", + "demo_02", + "demo_03", + "demo_04", + "demo_05", + "demo_06", + "demo_07", + "demo_08", + "demo_09", + "demo_10", + "demo_11", + "demo_12", + "demo_13", + "demo_14", + "demo_15", + "demo_16", + "demo_17", + "demo_18", + "demo_19" + ], + "data": "RGB, qpos, qvel, expert actions only", + "reference_bank": "deterministic descriptors and unmodified action samples from authorized demonstrations", + "weights": "No external or pretrained tool weights loaded; no neural finetuning", + "input_sha256": { + "/task_contract.json": "e8fbc8410fe0f6ef42d3970155b4b2494d3b6a86bbdd425aa3958b2ed7c46da5", + "/demo_manifest.json": "61a607200f7f6ec8ee4184a1920bceed7a8a7ae80c0b31a1a79648e1b4155204", + "/worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "additional_features": "Joint/action transition map, wrist rope features and initial top scene features from the same20 authorized demos via API.read_demo. Local image Jacobian from legal exploration episode9; no other tasks.", + "neural_training": "None" + }, + "network": { + "used": false, + "limitation": "Internet restricted to audited provider proxy; not needed" + }, + "environment_calls": "API only; see /workspace/exploration", + "exploration_episodes": "See API persistent budget and task-local exploration records", + "validation": "Legal interactive exploration and independently snapshotted API.rehearse only. Native sparse success when returned; no invented official success.", + "known_limitations": [ + "Local visual calibration only", + "Grasp, retention and wrap failures in exploration", + "No reliable geometric success detector", + "One early recovery only", + "Native530-step horizon may truncate longer demo phases" + ], + "runner_supplied_separately": [ + "verified demo manifest", + "common environment lock" + ], + "tool_versions": { + "bash": "GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)", + "view_image": "platform tool; version not exposed", + "functions.exec": "platform tool; version not exposed", + "exec_command": "platform tool; version not exposed" + }, + "runtime_assets": [ + "controller.py", + "reference_bank.npz", + "transitions.npz", + "rope_features.npy", + "scene_features.npy", + "rope_vision.py", + "scene_vision.py" + ] +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/policy_runner.py @@ -0,0 +1,25 @@ +"""Frozen-program entry point; no development agent and no reset capability.""" +import importlib.util +import sys + +sys.path.insert(0,'/artifact') +sys.path.insert(0,'/') +from worker_api import API + + +def main(): + spec=importlib.util.spec_from_file_location('controller','/artifact/controller.py') + module=importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + module.reset_episode() + api=API() + result=api.latest_observation() + while not (result['terminated'] or result['truncated'] or result['horizon_reached']): + obs=dict(result['observation'],step_id=result['step_id']) + action=module.act(obs) + if action is None:break + response=api.execute_actions([action]) + result=response['steps'][-1] + + +if __name__=='__main__':main() diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/rope_vision.py b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/rope_vision.py new file mode 100644 index 0000000000000000000000000000000000000000..b605174ed9b97d086f829dd8698dd61de8124481 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/rope_vision.py @@ -0,0 +1,12 @@ +import numpy as np +def locate(rgb): + a=np.asarray(rgb) + if a.ndim==4:a=a[0] + f=a.astype(np.float32);m=(f[:,:,0]>1.55*f[:,:,1])&(f[:,:,1]>1.4*f[:,:,2])&(f[:,:,0]>40)&(f[:,:,1]>15) + y,x=np.where(m) + if len(x)0]) if np.any(widths>0) else 0. + return np.array([np.polyval(fit,.8),np.quantile(yn,.98),fit[0],width],dtype=np.float32) diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/scene_vision.py b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/scene_vision.py new file mode 100644 index 0000000000000000000000000000000000000000..26af6fffe12565c08608143fe8ef70a85592b027 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/scene_vision.py @@ -0,0 +1,22 @@ +import cv2,numpy as np +def target(rgb): + a=np.asarray(rgb) + if a.ndim==4:a=a[0] + h,w=a.shape[:2] + m=((a.min(2)>160)&((a.max(2).astype(float)-a.min(2))<50)).astype('uint8') + n,l,st,cent=cv2.connectedComponentsWithStats(m) + ids=[i for i in range(1,n) if .001.45*w] + if not ids:return None + i=max(ids,key=lambda i:st[i,4]);y,x=np.where(l==i);cov=np.cov(np.stack([x/w,y/h]));_,vec=np.linalg.eigh(cov);v=vec[:,-1] + if v[0]<0:v=-v + return np.array([cent[i,0]/w,cent[i,1]/h,v[0],v[1]],np.float32) +def layout(rgb): + a=np.asarray(rgb) + if a.ndim==4:a=a[0] + h,w=a.shape[:2];f=a.astype(float);m=(f[:,:,0]>1.55*f[:,:,1])&(f[:,:,1]>1.4*f[:,:,2])&(f[:,:,0]>50)&(f[:,:,1]>20) + y,x=np.where(m);keep=(x>.35*w)&(y>.2*h);x=x[keep]/w;y=y[keep]/h + t=target(a) + if t is None:t=np.full(4,np.nan) + if len(x)<30:return np.r_[t,np.nan,np.nan] + coef=np.polyfit(x,y,1) + return np.r_[t,np.polyval(coef,.65),coef[0]] diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..523fcbb9b089c5365a83e5dd77b12f2aef900d60 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/skills.md @@ -0,0 +1,6 @@ +# Runtime procedure and failure boundaries +The program uses current four-camera RGB, qpos and qvel, all legal observations. Initial top-camera cylinder center/axis and rope line provide a scene-layout prior over all20 authorized demos. Each step retrieves a reference action from current image and joint correspondence within a narrow motion-phase window. A local ridge differential map from authorized demo joint transitions adds bounded pose correction. Current observations affect action; this is not fixed action replay. + +Before closure, a fixed orange mask estimates wrist-image rope center, lower extent, tilt and apparent width. A local pixel/action Jacobian measured in legal episode9 supplies bounded x/y alignment correction. Yaw direction was checked against authorized demo image/action changes. Readiness can delay closure35steps. Shadow-aware thresholds reduce missed rope pixels but are not a learned detector. A single early empty-finger recovery reopens and returns to alignment. Closed-grip actions penalize switching references and cap translation/yaw corrections. + +Return one flat7-vector per native control step. Runner owns the initial hold. Native horizon530 includes that hold. Missing inputs, unsupported states or horizon return None; this is never a success claim. No force/tension sensing, calibrated metric geometry, reliable completion detector, or late regrasp exists. Image cues can be wrong under occlusion and perspective. No neural weights were trained or changed. diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/synthetic_check_results.json b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/synthetic_check_results.json new file mode 100644 index 0000000000000000000000000000000000000000..0dd598ef2c441bf2ca1a218f32241648c5eee415 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/synthetic_check_results.json @@ -0,0 +1,19 @@ +{ + "status": "passed", + "checks": [ + "syntax", + "importlib import", + "actual reference artifact load and all 20 demo membership", + "flat finite float32 action within native bounds on synthetic supported inputs", + "RGB changes action using fabricated bank", + "qpos changes action using fabricated bank", + "HWC and 1HWC equivalence", + "reset clears episode memory", + "step 529 allowed and step 530 ends", + "missing RGB and NaN proprioception stop" + ], + "real_task_tests": 0, + "simulator_calls": 0, + "demo_rollouts": 0, + "success_claim": false +} diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/synthetic_checks.py b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/synthetic_checks.py new file mode 100644 index 0000000000000000000000000000000000000000..693a75c29fb967fd196a5ae57614e743b39235e4 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/synthetic_checks.py @@ -0,0 +1,35 @@ +"""Synthetic interface checks only; no simulator, demo rollout, or task score.""" +import importlib.util,json,py_compile +from pathlib import Path +import numpy as np +p=Path(__file__).parent +py_compile.compile(str(p/'controller.py'),doraise=True) +s=importlib.util.spec_from_file_location('controller_under_test',p/'controller.py');c=importlib.util.module_from_spec(s);s.loader.exec_module(c) +black={cam:np.zeros((240,320,3),np.uint8) for cam in c.CAMERAS} +white={cam:np.full((240,320,3),255,np.uint8) for cam in c.CAMERAS} +q=np.zeros(9,np.float32);v=np.zeros(9,np.float32) +obs={'rgb':black,'proprioception':{'agent/qpos':q,'agent/qvel':v},'instruction':'synthetic only','step_id':1} +# Actual archive load and shape sanity, with a wholly fabricated observation. +c.act(obs) +assert c._db['visual'].shape==(3710,4,768) +assert len(np.unique(c._db['demo']))==20 +actual=c._db +# Replace bank with artificial examples to verify data flow independent of task. +b=np.stack([c.image_feature(black[x]) for x in c.CAMERAS]);w=np.stack([c.image_feature(white[x]) for x in c.CAMERAS]) +c._db={'q':np.zeros((10,9),np.float32),'v':np.zeros((10,9),np.float32),'visual':np.stack([b]*5+[w]*5),'a':np.array([[.08,0,0,0,0,0,1]]*5+[[-.08,0,0,0,0,0,1]]*5,np.float32),'frame':np.zeros(10,int)} +c.reset_episode();a=c.act(obs);assert a.shape==(7,) and a.dtype==np.float32 and np.isfinite(a).all() and np.max(abs(a))<=1 +c.reset_episode();other=dict(obs,rgb=white);a2=c.act(other);assert a[0]>.07 and a2[0]<-.07 +c.reset_episode();batched=dict(obs,rgb={k:v[None] for k,v in black.items()});assert np.allclose(c.act(batched),a) +# Identical visuals but disjoint synthetic joint states change the action. +c._db['visual'][:]=b;c._db['q'][5:,:7]=.8 +c.reset_episode();a3=c.act(obs) +q2=np.r_[np.full(7,.8),0.,0.].astype(np.float32) +c.reset_episode();a4=c.act(dict(obs,proprioception={'agent/qpos':q2,'agent/qvel':v}));assert a3[0]>.07 and a4[0]<-.07 +c.reset_episode();assert c._progress is None and not c._closed +assert c.act(dict(obs,step_id=529)) is not None +assert c.act(dict(obs,step_id=530)) is None +assert c.act(dict(obs,rgb={})) is None +assert c.act(dict(obs,proprioception={'agent/qpos':np.full(9,np.nan),'agent/qvel':v})) is None +c._db=actual;c.reset_episode() +result={'status':'passed','checks':['syntax','importlib import','actual reference artifact load and all 20 demo membership','flat finite float32 action within native bounds on synthetic supported inputs','RGB changes action using fabricated bank','qpos changes action using fabricated bank','HWC and 1HWC equivalence','reset clears episode memory','step 529 allowed and step 530 ends','missing RGB and NaN proprioception stop'],'real_task_tests':0,'simulator_calls':0,'demo_rollouts':0,'success_claim':False} +(p/'synthetic_check_results.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2)) diff --git a/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/WrapRope-v1/frozen/worker_api.py @@ -0,0 +1,81 @@ +"""Standalone worker client; safe to mount without the runner package.""" +import base64 +import json +import socket +import struct +import uuid +import os +from pathlib import Path + +import numpy as np + + +def array_hook(value): + if value.get('__array__') is True: + dtype=np.dtype(value['dtype']) + if dtype.kind not in 'bifu':raise ValueError('non-numeric array from service') + raw=base64.b64decode(value['data'],validate=True) + return np.frombuffer(raw,dtype=dtype).reshape(value['shape']).copy() + return value + + +class API: + def __init__(self,socket_path='/rpc/control.sock',demo_root='/demonstrations',manifest='/demo_manifest.json'): + self.socket_path=socket_path + self.demo_root=Path(demo_root) + self.manifest=Path(manifest) + + def call(self,method,arguments=None,request_id=None): + # Caller can persist a request ID before sending. Never automatically retry. + request_id=request_id or str(uuid.uuid4()) + request={'request_id':request_id,'method':method,'arguments':arguments or {}} + if os.environ.get('AGENT_E20_RPC_TOKEN'): + request['token']=os.environ['AGENT_E20_RPC_TOKEN'] + payload=json.dumps(request,allow_nan=False).encode() + if len(payload)>65536:raise ValueError('request too large') + with socket.socket(socket.AF_UNIX,socket.SOCK_STREAM) as s: + s.settimeout(1810);s.connect(self.socket_path) + s.sendall(struct.pack('!I',len(payload))+payload) + def exact(n): + chunks=[] + while n: + chunk=s.recv(min(n,1024*1024)) + if not chunk:raise RuntimeError('RPC interrupted; do not replay action with a new ID') + chunks.append(chunk);n-=len(chunk) + return b''.join(chunks) + length=struct.unpack('!I',exact(4))[0] + if length>64*1024*1024:raise RuntimeError('response too large') + result=json.loads(exact(length),object_hook=array_hook) + if not result['ok']:raise RuntimeError(result['error']) + return result['result'] + + def next_episode(self,request_id=None):return self.call('next_episode',request_id=request_id) + def latest_observation(self):return self.call('latest_observation') + def execute_actions(self,actions,request_id=None): + return self.call('execute_actions',{'actions':np.asarray(actions).tolist()},request_id) + def finish_episode(self):return self.call('finish_episode') + def budget_status(self):return self.call('budget_status') + def rehearse(self,candidate='candidate',request_id=None): + return self.call('rehearse',{'candidate':candidate},request_id) + def score_rehearsal(self,episode,visible_success,evidence): + return self.call('score_rehearsal',{'episode':episode,'visible_success':visible_success,'evidence':evidence}) + def freeze(self):return self.call('freeze') + + def read_demo(self,demo_id,start=0,stop=None,fields=None): + import h5py + manifest=json.loads(self.manifest.read_text()) + if manifest.get('status') not in ('released','released_for_offline_analysis'): + raise RuntimeError('demonstrations not released by trusted preflight') + entries={e['demo_id']:e for e in manifest['episodes']} + if demo_id not in entries:raise ValueError('unauthorized demo ID') + entry=entries[demo_id] + allowed={f['path'] for f in entry['fields']} + fields=sorted(allowed) if fields is None else fields + if not set(fields)<=allowed:raise ValueError('unauthorized demo field') + stop=entry['length']+1 if stop is None else stop + if not isinstance(start,int) or not isinstance(stop,int) or not 0<=start