diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/artifact_hashes.json b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/artifact_hashes.json new file mode 100644 index 0000000000000000000000000000000000000000..76cfec1d26457195977914b6daa11b9a8b2ea513 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/artifact_hashes.json @@ -0,0 +1,15 @@ +{ + "/task_contract.json": "6f6a43c9bd0c58e4401b9d76e328acc1b7715e5e3765470016c8bd263a588bd6", + "/demo_manifest.json": "54f9f171b26a3e8952df28e02e6e08192206b38b2f1e550c2e54c47fea4ca1eb", + "/worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e", + "/workspace/candidate/synthetic_checks.py": "a872ea56b1cf8c6bd1a6242c8c51b9a0868e2bb77e8ca305224dfd31b31741fc", + "/workspace/candidate/findings.md": "15518b532bcdbe49b7516b97fbf164d178f6b4782772e043441b9ac47b22a420", + "/workspace/candidate/handoff.md": "16efc672303e44ddaf41896a9bb19450a34418cf5147e5d33a3f132e5d79f81a", + "/workspace/candidate/reference_bank.npz": "229463850426e2d1d4d6022c2420cef2b3be14bc12389171c87958fe70ae8cb5", + "/workspace/candidate/bank_provenance.json": "89c9cfe9d87c6fe74991af56e3a213d0c619585dd983bc334b29e3b748a28154", + "/workspace/candidate/build_bank.py": "b07e3d43646e09064fad9e7f4b0a5b91c4a556a4950ad3469b8d6370a92f1ab1", + "/workspace/candidate/controller.py": "b5e049e3e1182e3c2c1d4b19fc9b0a5fca51b6df8a4a8e73ce853fb2df9e1efa", + "/workspace/candidate/model_tool_manifest.yaml": "05aafa50ca731142fb8dcc9e54f428d2c776ac3c5fabaf17c6f99ac5420f3d60", + "/workspace/candidate/skills.md": "d569f3a232ca60c195b0041e16ef10c07dbff0c1d6f37f3e4bb2f8762a857739", + "/workspace/candidate/synthetic_check_results.json": "ef827300a1a2ec2d5931847e3ed1c9e2f0401e50586b02619f7ca3d3493b9150" +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/bank_provenance.json b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/bank_provenance.json new file mode 100644 index 0000000000000000000000000000000000000000..68ad69946a6785ecf674f2be7ebdc4fd428d7329 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/bank_provenance.json @@ -0,0 +1,127 @@ +{ + "method": "deterministic observation/action table, stride 2, labels clipped to contract bounds", + "episodes": [ + { + "demo_id": "demo_00", + "numeric_frames": "actions 0..576; proprioception 0..577", + "rgb_read": "front_camera, top_camera: 0..576", + "rgb_features": "every even index from 0 through 576" + }, + { + "demo_id": "demo_01", + "numeric_frames": "actions 0..556; proprioception 0..557", + "rgb_read": "front_camera, top_camera: 0..556", + "rgb_features": "every even index from 0 through 556" + }, + { + "demo_id": "demo_02", + "numeric_frames": "actions 0..591; proprioception 0..592", + "rgb_read": "front_camera, top_camera: 0..591", + "rgb_features": "every even index from 0 through 590" + }, + { + "demo_id": "demo_03", + "numeric_frames": "actions 0..593; proprioception 0..594", + "rgb_read": "front_camera, top_camera: 0..593", + "rgb_features": "every even index from 0 through 592" + }, + { + "demo_id": "demo_04", + "numeric_frames": "actions 0..573; proprioception 0..574", + "rgb_read": "front_camera, top_camera: 0..573", + "rgb_features": "every even index from 0 through 572" + }, + { + "demo_id": "demo_05", + "numeric_frames": "actions 0..551; proprioception 0..552", + "rgb_read": "front_camera, top_camera: 0..551", + "rgb_features": "every even index from 0 through 550" + }, + { + "demo_id": "demo_06", + "numeric_frames": "actions 0..573; proprioception 0..574", + "rgb_read": "front_camera, top_camera: 0..573", + "rgb_features": "every even index from 0 through 572" + }, + { + "demo_id": "demo_07", + "numeric_frames": "actions 0..576; proprioception 0..577", + "rgb_read": "front_camera, top_camera: 0..576", + "rgb_features": "every even index from 0 through 576" + }, + { + "demo_id": "demo_08", + "numeric_frames": "actions 0..579; proprioception 0..580", + "rgb_read": "front_camera, top_camera: 0..579", + "rgb_features": "every even index from 0 through 578" + }, + { + "demo_id": "demo_09", + "numeric_frames": "actions 0..559; proprioception 0..560", + "rgb_read": "front_camera, top_camera: 0..559", + "rgb_features": "every even index from 0 through 558" + }, + { + "demo_id": "demo_10", + "numeric_frames": "actions 0..553; proprioception 0..554", + "rgb_read": "front_camera, top_camera: 0..553", + "rgb_features": "every even index from 0 through 552" + }, + { + "demo_id": "demo_11", + "numeric_frames": "actions 0..598; proprioception 0..599", + "rgb_read": "front_camera, top_camera: 0..598", + "rgb_features": "every even index from 0 through 598" + }, + { + "demo_id": "demo_12", + "numeric_frames": "actions 0..599; proprioception 0..600", + "rgb_read": "front_camera, top_camera: 0..599", + "rgb_features": "every even index from 0 through 598" + }, + { + "demo_id": "demo_13", + "numeric_frames": "actions 0..595; proprioception 0..596", + "rgb_read": "front_camera, top_camera: 0..595", + "rgb_features": "every even index from 0 through 594" + }, + { + "demo_id": "demo_14", + "numeric_frames": "actions 0..555; proprioception 0..556", + "rgb_read": "front_camera, top_camera: 0..555", + "rgb_features": "every even index from 0 through 554" + }, + { + "demo_id": "demo_15", + "numeric_frames": "actions 0..556; proprioception 0..557", + "rgb_read": "front_camera, top_camera: 0..556", + "rgb_features": "every even index from 0 through 556" + }, + { + "demo_id": "demo_16", + "numeric_frames": "actions 0..553; proprioception 0..554", + "rgb_read": "front_camera, top_camera: 0..553", + "rgb_features": "every even index from 0 through 552" + }, + { + "demo_id": "demo_17", + "numeric_frames": "actions 0..554; proprioception 0..555", + "rgb_read": "front_camera, top_camera: 0..554", + "rgb_features": "every even index from 0 through 554" + }, + { + "demo_id": "demo_18", + "numeric_frames": "actions 0..573; proprioception 0..574", + "rgb_read": "front_camera, top_camera: 0..573", + "rgb_features": "every even index from 0 through 572" + }, + { + "demo_id": "demo_19", + "numeric_frames": "actions 0..571; proprioception 0..572", + "rgb_read": "front_camera, top_camera: 0..571", + "rgb_features": "every even index from 0 through 570" + } + ], + "source_manifest_sha256": "54f9f171b26a3e8952df28e02e6e08192206b38b2f1e550c2e54c47fea4ca1eb", + "rows": 5730 +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/build_bank.py b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/build_bank.py new file mode 100644 index 0000000000000000000000000000000000000000..5b303de7918972a89b9add0ef7c5878ade379c74 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/build_bank.py @@ -0,0 +1,27 @@ +"""Offline compilation of authorized observations and labels; no neural training.""" +import importlib.util,json,hashlib +from pathlib import Path +import numpy as np +from controller import visual_features, KEYS, CAMERAS +spec=importlib.util.spec_from_file_location('worker_api','/worker_api.py') +m=importlib.util.module_from_spec(spec);spec.loader.exec_module(m);api=m.API() +manifest=json.load(open('/demo_manifest.json')) +assert len(manifest['episodes'])==20 +out={k:[] for k in ['qpos','qvel','visual','actions','phase','demo_index','frame']} +access=[] +for di,e in enumerate(manifest['episodes']): + n=e['length']; fields=['actions/'+k for k in KEYS]+['obs/agent/'+k+'/'+v for v in ('qpos','qvel') for k in KEYS] + d=api.read_demo(e['demo_id'],fields=fields) + for start in range(0,n,32): + stop=min(n,start+32) + rgb=api.read_demo(e['demo_id'],start,stop,['obs/sensor_data/'+c+'/rgb' for c in CAMERAS]) + for t in range(start,stop,2): + for kind in ('qpos','qvel'):out[kind].append(np.concatenate([d['obs/agent/'+k+'/'+kind][t] for k in KEYS])) + out['visual'].append(visual_features({c:rgb['obs/sensor_data/'+c+'/rgb'][t-start] for c in CAMERAS}).astype(np.float16)) + out['actions'].append(np.clip(np.concatenate([d['actions/'+k][t] for k in KEYS]),-1,1)) + out['phase'].append(t/n);out['demo_index'].append(di);out['frame'].append(t) + access.append({'demo_id':e['demo_id'],'numeric_frames':f'actions 0..{n-1}; proprioception 0..{n}', 'rgb_read':f'front_camera, top_camera: 0..{n-1}', 'rgb_features':f'every even index from 0 through {2*((n-1)//2)}'}) + print(e['demo_id'],flush=True) +root=Path(__file__).parent +np.savez_compressed(root/'reference_bank.npz',**{k:np.asarray(v,dtype=(np.int32 if k in ('demo_index','frame') else np.float16 if k=='visual' else np.float32)) for k,v in out.items()}) +(root/'bank_provenance.json').write_text(json.dumps({'method':'deterministic observation/action table, stride 2, labels clipped to contract bounds','episodes':access,'source_manifest_sha256':hashlib.sha256(Path('/demo_manifest.json').read_bytes()).hexdigest(),'rows':len(out['phase'])},indent=2)) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/controller.py b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/controller.py new file mode 100644 index 0000000000000000000000000000000000000000..cfc1380fdb339c8e7e81a734e1aa49710019b7ad --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/controller.py @@ -0,0 +1,117 @@ +"""Unrehearsed D20 draft: observation-conditioned nonparametric action retrieval. +No environment, kinematics, hidden state, neural model, or online weight updates. +""" +from pathlib import Path +import numpy as np +import cv2 + +KEYS = ('panda_leaphand-1', 'panda_leaphand_left-0') +CAMERAS = ('front_camera', 'top_camera') +_BANK = None +_phase = None +_last_step = 0 +_last_action = None + + +def visual_features(rgb): + result = [] + for camera in CAMERAS: + im = np.asarray(rgb[camera]) + 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('RGB must be uint8 HWC or 1HWC') + # Fixed fractional crop includes the tabletop, dish, hands and clay. + h, w = im.shape[:2] + im = im[int(.25*h):int(.94*h), int(.12*w):int(.91*w)] + small = cv2.resize(im, (24, 24), interpolation=cv2.INTER_AREA) + hsv = cv2.cvtColor(im, cv2.COLOR_RGB2HSV) + # Color-independent clay occupancy; avoids treating a color as an arm ID. + mask = ((hsv[..., 1] > 120) & (hsv[..., 2] > 45)).astype(np.float32) + mask = cv2.resize(mask, (24, 24), interpolation=cv2.INTER_AREA) + result.append(np.r_[small.reshape(-1).astype(np.float32)/255., mask.reshape(-1)]) + return np.stack(result) + + +def proprio_features(proprio): + values = [] + for kind in ('qpos', 'qvel'): + parts = [] + for key in KEYS: + v = np.asarray(proprio['agent/'+key+'/'+kind], dtype=np.float32).reshape(-1) + if v.size != 23 or not np.isfinite(v).all(): + raise ValueError('Expected 23 finite joint values per robot') + parts.append(v) + values.append(np.concatenate(parts)) + return values + + +def _bank(): + global _BANK + if _BANK is None: + with np.load(Path(__file__).with_name('reference_bank.npz'), allow_pickle=False) as f: + _BANK = {k: f[k] for k in f.files} + return _BANK + + +def reset_episode(): + global _phase, _last_step, _last_action + _phase, _last_step, _last_action = None, 0, None + + +def act(obs): + global _phase, _last_step, _last_action + step = int(obs['step_id']) + # Runner already owns the charged hold. At most 599 subsequent native actions. + if step >= 600: + return None + if step < 1: + raise ValueError('step_id starts at 1 after the runner hold') + if step < _last_step: + reset_episode() + if step == _last_step and _last_action is not None: + return _last_action.copy() + try: + q, v = proprio_features(obs['proprioception']) + visual = visual_features(obs['rgb']) + except (KeyError, ValueError, TypeError): + # Missing/invalid observations cannot establish safe task progression. + return None + b = _bank() + p = b['phase'] + if _phase is None: + valid = p <= .12 + else: + # Observation-selected progression, with bounded local recovery. + clock = (step-1)/575. + lower = max(0., _phase-.02, clock-.018) + upper = min(1., max(_phase+.04, clock+.025)) + valid = (p >= lower) & (p <= upper) + ix = np.flatnonzero(valid) + scale = np.tile(np.r_[np.full(7,.18),np.full(16,.35)],2) + dq = (b['qpos'][ix]-q)/scale + joint_d = .7*np.mean(dq[:,np.r_[0:7,23:30]]**2,axis=1) + .3*np.mean(dq[:,np.r_[7:23,30:46]]**2,axis=1) + velocity_d = np.mean(((b['qvel'][ix]-v)/1.2)**2,axis=1) + # Proprioception narrows candidates; RGB then chooses scene-compatible states. + ix = ix[np.argsort(joint_d + .04*velocity_d)[:min(160,len(ix))]] + dq = (b['qpos'][ix]-q)/scale + joint_d = .7*np.mean(dq[:,np.r_[0:7,23:30]]**2,axis=1) + .3*np.mean(dq[:,np.r_[7:23,30:46]]**2,axis=1) + dv = b['visual'][ix].astype(np.float32)-visual + image_d = np.mean(dv[:,:,:1728]**2,axis=(1,2))/.08**2 + clay_d = np.mean(dv[:,:,1728:]**2,axis=(1,2))/.10**2 + cost = joint_d + .35*image_d + .35*clay_d + .04*np.mean(((b['qvel'][ix]-v)/1.2)**2,axis=1) + if _phase is not None: + cost += .05*((p[ix]-_phase)/.04)**2 + best = int(np.argmin(cost)) + # Never blend different phases (e.g., descend and retract). + compatible = np.flatnonzero(np.abs(p[ix]-p[ix[best]])<.012) + chosen = compatible[np.argsort(cost[compatible])[:5]] + weight = np.exp(-(cost[chosen]-cost[chosen].min())/.10) + weight /= weight.sum() + action = weight @ b['actions'][ix[chosen]] + _phase = float(weight @ p[ix[chosen]]) + action = np.clip(action, -1., 1.).astype(np.float32) + if action.shape != (44,) or not np.isfinite(action).all(): + return None + _last_step, _last_action = step, action.copy() + return action diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..0dd6df7d990dc336494b19b3ebd3dd9a3f6b33d4 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/demo_manifest.json @@ -0,0 +1,2168 @@ +{ + "task_id": "DualArmLayerClayInDish-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": 577, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 577, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 577, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 578, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 578, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 578, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 578, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 578, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 578, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 578, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 578, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 578, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6c19dd3ea220a35425c48501d180d55bae6956a361b1d096b0ff03024153c62b", + "source_sha256": "ce138e916dd6a46096c2f647a289a0045a49b181505e747f00d63c04fe60078e", + "view_sha256": "cc6904b79fa9d0ba2fd46f41fb6a57d4b71387ff4c8695aa9001bb88c5f397c0" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 557, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 557, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 557, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 558, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 558, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 558, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 558, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 558, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 558, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 558, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 558, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 558, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "5739428704770f18beb674f9a98fbe906785c85eba774b18b6c6b37addb782ea", + "source_sha256": "80b3dd1baa02efd05b0d4f9c32c3b0c21c81293313edba86eec4ecf21153e699", + "view_sha256": "e2126a3381fdcca89ea013e5363d26e55d299e90b7666ff55add85ecbf9b935e" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 592, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 592, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 592, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 593, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 593, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 593, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 593, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 593, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 593, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 593, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 593, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 593, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "885e6bde77b5c81f5b8bc47d9cfc0e6f8bf770c0e17756bd2cea049a33f09240", + "source_sha256": "935c0474ae505a94db7d6030bca62141a142c141a204441c831b8f37cb82405c", + "view_sha256": "2eedd380282f088b8bc6741d21aacd1eeced834e8440006fd2c7f3aa33ebf2e7" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 594, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 594, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 594, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 595, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 595, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 595, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 595, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 595, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 595, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 595, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 595, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 595, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e915b41cc1616d53868ce32efe58e572c0a256989eb849ec5c0263229f394c73", + "source_sha256": "9983a72bfaaa9574d6f99135c504a9d095681f0bd4a5e9d38f444222689e249a", + "view_sha256": "13bf7716cb6fea598cec85bccd5b1474dc6126eb751e9e18053a8c93c7c1a27a" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 574, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 574, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 574, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 575, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "cf23bd8811457174e01ace6ac16664bf640c6c16a0dbafb7fa0f8aba8533f570", + "source_sha256": "aea5b5d9e9116f16d7aa92494a380c24805213cb3737a702bead92051d4ed673", + "view_sha256": "411ea28f7e947803caf8550195b5f45c7f15b666af6fe02310b62d62c6097efb" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 552, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 552, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 552, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 553, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 553, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 553, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/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_0/rgb", + "shape": [ + 553, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 553, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 553, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2449f751a8c6f2c37e65d8b2a5598728536a2ab73f7a8582e2570e28f4b5bca3", + "source_sha256": "6fb42ddbd997d1ce5809501e511e54b64f079d78acf6fcfe34b8904a6b055fb6", + "view_sha256": "9eb591d5afa61a52919b666222bf8acffc760f98b813282486cb0cdf483b331f" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 574, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 574, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 574, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 575, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "5c3b2209bced7724274258d26645ac35d65a2379733f785d8180169e39bb67aa", + "source_sha256": "5eb12a7200e0c67f188d427dffe32344a3cf7eefc45194b58e9f2e1612c73eef", + "view_sha256": "adc29edd50bb66a4bbccd83f3fd33707d83fa2960a15ff228d3f88e41e5c1b98" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 577, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 577, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 577, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 578, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 578, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 578, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 578, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 578, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 578, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 578, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 578, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 578, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e8a7b380dc86330b532b6ed0b0fe2b56e170fabd5e10984183475470203a3fbf", + "source_sha256": "eb98028ad8e2166c203b12429f340e2bfed92c46feed1614bf39a8b780cd3bf8", + "view_sha256": "f5b997d9c04b149efdc391327ce48ed77a3073b3f6c8ec493728f35fd8975d99" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 580, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 580, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 580, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 581, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 581, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 581, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 581, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 581, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 581, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 581, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 581, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 581, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8f19dff57c0d66da2859f776bdf1cf73289c072a6552051e983e97de12cdd03c", + "source_sha256": "e4c68f5c0c656ecb50de854c7ee1ccbea21a1a3f2202475d6bbd7e3de4c3da66", + "view_sha256": "82bce05f16b6a888df37a0d502d0146ec0e7faa5b8d381b9669b81ae00938e1b" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 560, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 560, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 560, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 561, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 561, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 561, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8ff66d2dc86aab5590c58f198d68d2e01759a1da58f54941b1d500f823a0f086", + "source_sha256": "a297bb9b4aa5bb4e658f8245aea3d104c03b4ffef14d8f0fe2f4a55ba9065ad0", + "view_sha256": "43f6e8c1727a739c980cd5ba8d93eddf0ef3fcd5b93500eef2c016ae698318fc" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 554, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 554, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 554, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 555, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 555, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 555, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 555, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 555, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 555, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 555, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 555, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 555, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "47e4fadc1943760a050fea332bdc555c54d413e7b2c22cc4af436d8f4bfcfdb8", + "source_sha256": "f675a99354695ba4f516dbf5cb62e3fecb8ca4129898e17433b43bb265200ce0", + "view_sha256": "7cb9721a9a88ccc935ea738e7b02d9153a8a373aa5a328a078110233c7841b95" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 599, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 599, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 599, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 600, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 600, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 600, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 600, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 600, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 600, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 600, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 600, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 600, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "dd5a86f3a9ceb06901823410641f29a42860e991ca7b43b085944c6189f0dff5", + "source_sha256": "47e13242b6854e667ced4d430bdef1f40b186c33d7f5787e2484c2eaacd1b82e", + "view_sha256": "40df553d8c9ef3d2ef9453172d59480b9384f67258faebd2cdbb75078bd4f34b" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 600, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 600, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 600, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 601, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 601, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 601, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 601, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 601, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 601, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 601, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 601, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 601, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c5d794bf3d259aca0b4686cd9f597693aa1ac41c6f080e8db6dba563463258d6", + "source_sha256": "4fa67dfcdd30a4ef1d95d3401af76a8353e87c4946108919b48b9fbdf66a0842", + "view_sha256": "d3e9567d1cb420cb75cd86b816efe7e4cb9bb2a85c1320667e3d4e4528bcd140" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 596, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 596, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 596, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 597, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 597, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 597, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 597, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 597, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 597, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 597, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 597, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 597, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "f37a83a9c6b2b0bb9d048ead342d8f997be03461fdd21c99f02af00130616dbc", + "source_sha256": "4960bcc8680a4fd1bef97569a0c49fe13955a0fab10cf3f5df011b009b600c65", + "view_sha256": "69c103db93ae71b3221b8fdd06232d847c9d8cc3677ed384bc9ff4b3d20ac8f8" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 556, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 556, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 556, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 557, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 557, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 557, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 557, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 557, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 557, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 557, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 557, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 557, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e6ae81f5089027a66d2fd91e82752305f0dfcabd86ec5ea568004902adf4d2d3", + "source_sha256": "9a1156cbde46476879048ea0939903a8b340e8757191decf90e2619d40b9fb54", + "view_sha256": "cc118572b4a4d4ce4ce1a8673d0b5bbce061c17fd9ad2682c91cbdd4de1fe5bd" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 557, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 557, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 557, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 558, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 558, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 558, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 558, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 558, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 558, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 558, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 558, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 558, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7efa501c4248045d0e2ec773c322dce5b2f875e8e6514a376d61781a1b40eb2e", + "source_sha256": "006a188b4479e06f631037a218d9a51ee2b75977ef98f2175004d5f38d5ead41", + "view_sha256": "c801b13d8e1195cd46da1db2737cecd4aa2a9e789ba2fd61660d31b0c678451c" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 554, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 554, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 554, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 555, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 555, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 555, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 555, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 555, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 555, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 555, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 555, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 555, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "50f9f79b579d9d680b43abb8abbc32cd1a79253921749aaa1e75fdfb0ffaebed", + "source_sha256": "488b0560901115782416902d27be946216ac71d172a59922abff11c547645f86", + "view_sha256": "373bdc3b273be751570a20cf46a54c35a4e379d8270f7d68e4322fd938820a6c" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 555, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 555, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 555, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 556, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 556, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 556, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 556, + 23 + ], + "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_0/rgb", + "shape": [ + 556, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 556, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 556, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ff71c4007be6f3993319ae228a172e4ae0ee3d7cdf1947e33dfea1f619dce30c", + "source_sha256": "71445ede71d94047a98676454a0f9188c2c60ee87519e8da67e3ed0823733975", + "view_sha256": "c8df1c07e37bd96fd9d3af5b75f09e2be464af64abbf320657f987d850090588" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 574, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 574, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 574, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 575, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 575, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 575, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "16c09cbe53b047f200eaffae12bfbbb85e1fafaad8a8413518d49d30d6908034", + "source_sha256": "32a07b2cfe146ab5f5a57b3deadc6817d28c413270da0a7346f6abd5afb44305", + "view_sha256": "26e89b74fb08f8ab58a1cd9247d69ca934120202075d64e069c66ade0f3b459f" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 572, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 572, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 572, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 573, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 573, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 573, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 573, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 573, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 573, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 573, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 573, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 573, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "09e391f81690ab9f8d61cc9c12a27836ab081bd23c3bf768cdc86fc202b7ea97", + "source_sha256": "5e02269e95db68f30ffcb0fd1d4fed8dd5bc10df4cd10f0b67e1cd3c29cfeb30", + "view_sha256": "95d33e8fb4e6b7f9ecddea83e543a6a45eafe017ddd50e21d32de84667baf3d9" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-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/DualArmLayerClayInDish-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..5f0d78b12f472e87c067dad1beb0b48934984a5a --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/findings.md @@ -0,0 +1,14 @@ +# Findings + +All 20 authorized demonstrations were analyzed: 11,454 action labels; representative front/top images at five indices each, plus ten five-camera views from demo_00. Exact indices and per-demo evidence are in ../demo_analysis.md and ../evidence/visual_inspection.json. + +Two sequential tool-assisted clay transfers are visible. Initial colors and positions vary; final images show both colors in the dish region, without proving vertical layer order or success. Demo lengths span 552–600; demo_12 may be horizon-truncated. Initial joint configurations are identical across demos, but the live scene must still be observed. + +All 20 demos contain 110 scalar hand labels above the native upper bound during action indices 38–46. The draft clips stored labels to [-1,1]. The underlying demonstrator execution semantics and impact of clipping are unknown. Rotation uses the contract's negative 0.5-radian scale. Output ordering differs from robot_uids order. + +Draft limitations: coarse visual matching, unknown camera/root geometry and joint naming, no contact sensor or success signal, phase ambiguity, potential retrieval stalls, no calibrated recovery or out-of-distribution gate. No actual task performance has been measured. + +## Authorized live continuation +Episode 1 (original retrieval): tools visibly lifted by step 100, then phase stalled near 0.177 through step 150 and the final observation at step 163. Both clay patches remained outside. Ended diagnostic episode; native success false. The standalone interactive logging adapter initially failed on the API wrapper after one action; corrected by unwrapping `steps[-1].observation` and copying step_id. A later explicit finish caused the running driver to reject its next action as inactive; no retry was made. Actions through the last periodic checkpoint and start/end observations are retained. This was a driver issue, not an independently rehearsed program issue. +Episode 2 modification: bounded time-based lower phase floor at (step-1)/575 - .018, retaining current image and proprioceptive action retrieval. This addresses phase stalling; efficacy pending. +Episode 2: progression floor resolved the observed stationary grasp stall. First tool visibly approached red clay by step 150 and red clay was visibly in dish region at step 200; yellow remained outside. Diagnostic episode deliberately ended after first-transfer evidence, not marked successful. Exact final observation and full actions/log are in evidence/ep02. No claim of complete layering. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..7d95a3a6233d996fdd5d71798438d33f4cad8212 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/freeze_manifest.json @@ -0,0 +1,122 @@ +{ + "files": { + "__pycache__/build_bank.cpython-310.pyc": "8f0836dc3cec331055f4208e67958e677dc06d0fbe514e4e64b9aeddef4b00d3", + "__pycache__/controller.cpython-310.pyc": "9a8d5bba2186b90a691e3d741debc86e7c76eaef23a2258f92ce62aab8b20457", + "__pycache__/synthetic_checks.cpython-310.pyc": "2d6fa356b2328735dddcb739507f4f222ae10c7c8873bb87f7e0808757046774", + "artifact_hashes.json": "6e458133651b0de9602efa387710cb3706f5f5db24137a451876aaccb3d79ec7", + "bank_provenance.json": "89c9cfe9d87c6fe74991af56e3a213d0c619585dd983bc334b29e3b748a28154", + "build_bank.py": "b07e3d43646e09064fad9e7f4b0a5b91c4a556a4950ad3469b8d6370a92f1ab1", + "controller.py": "31ad0c78a9dd5f135380a2a1cb7512dfa79afd9a68f23888275c2ec04ca6815a", + "demo_manifest.json": "073ed6fd24d1a2ef3cd7c16b25eb30331ee18e4e5493ef2b4e018a8e24a89205", + "demonstrations_readonly/demo_00.h5": "cc6904b79fa9d0ba2fd46f41fb6a57d4b71387ff4c8695aa9001bb88c5f397c0", + "demonstrations_readonly/demo_01.h5": "e2126a3381fdcca89ea013e5363d26e55d299e90b7666ff55add85ecbf9b935e", + "demonstrations_readonly/demo_02.h5": "2eedd380282f088b8bc6741d21aacd1eeced834e8440006fd2c7f3aa33ebf2e7", + "demonstrations_readonly/demo_03.h5": "13bf7716cb6fea598cec85bccd5b1474dc6126eb751e9e18053a8c93c7c1a27a", + "demonstrations_readonly/demo_04.h5": "411ea28f7e947803caf8550195b5f45c7f15b666af6fe02310b62d62c6097efb", + "demonstrations_readonly/demo_05.h5": "9eb591d5afa61a52919b666222bf8acffc760f98b813282486cb0cdf483b331f", + "demonstrations_readonly/demo_06.h5": "adc29edd50bb66a4bbccd83f3fd33707d83fa2960a15ff228d3f88e41e5c1b98", + "demonstrations_readonly/demo_07.h5": "f5b997d9c04b149efdc391327ce48ed77a3073b3f6c8ec493728f35fd8975d99", + "demonstrations_readonly/demo_08.h5": "82bce05f16b6a888df37a0d502d0146ec0e7faa5b8d381b9669b81ae00938e1b", + "demonstrations_readonly/demo_09.h5": "43f6e8c1727a739c980cd5ba8d93eddf0ef3fcd5b93500eef2c016ae698318fc", + "demonstrations_readonly/demo_10.h5": "7cb9721a9a88ccc935ea738e7b02d9153a8a373aa5a328a078110233c7841b95", + "demonstrations_readonly/demo_11.h5": "40df553d8c9ef3d2ef9453172d59480b9384f67258faebd2cdbb75078bd4f34b", + "demonstrations_readonly/demo_12.h5": "d3e9567d1cb420cb75cd86b816efe7e4cb9bb2a85c1320667e3d4e4528bcd140", + "demonstrations_readonly/demo_13.h5": "69c103db93ae71b3221b8fdd06232d847c9d8cc3677ed384bc9ff4b3d20ac8f8", + "demonstrations_readonly/demo_14.h5": "cc118572b4a4d4ce4ce1a8673d0b5bbce061c17fd9ad2682c91cbdd4de1fe5bd", + "demonstrations_readonly/demo_15.h5": "c801b13d8e1195cd46da1db2737cecd4aa2a9e789ba2fd61660d31b0c678451c", + "demonstrations_readonly/demo_16.h5": "373bdc3b273be751570a20cf46a54c35a4e379d8270f7d68e4322fd938820a6c", + "demonstrations_readonly/demo_17.h5": "c8df1c07e37bd96fd9d3af5b75f09e2be464af64abbf320657f987d850090588", + "demonstrations_readonly/demo_18.h5": "26e89b74fb08f8ab58a1cd9247d69ca934120202075d64e069c66ade0f3b459f", + "demonstrations_readonly/demo_19.h5": "95d33e8fb4e6b7f9ecddea83e543a6a45eafe017ddd50e21d32de84667baf3d9", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "findings.md": "8b83572c84b64c9509842ce15c20ecf2d506089c4b3b969789037d4c0d57c0f8", + "handoff.md": "16efc672303e44ddaf41896a9bb19450a34418cf5147e5d33a3f132e5d79f81a", + "model_tool_manifest.yaml": "fd25f845724cb9aae24a4d7e114485719aad2ae6fd65f604c781b59428c57843", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "reference_bank.npz": "229463850426e2d1d4d6022c2420cef2b3be14bc12389171c87958fe70ae8cb5", + "skills.md": "d569f3a232ca60c195b0041e16ef10c07dbff0c1d6f37f3e4bb2f8762a857739", + "synthetic_check_results.json": "ef827300a1a2ec2d5931847e3ed1c9e2f0401e50586b02619f7ca3d3493b9150", + "synthetic_checks.py": "a872ea56b1cf8c6bd1a6242c8c51b9a0868e2bb77e8ca305224dfd31b31741fc", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "3626f977ff5b8ca9b6457ed8c5e6ce80da762661208a7f9b89b18730e0da2a3e", + "exploration_ledger_hash": "4ff14e341109a836b406cbfb36f74268d1a1c0d7848961252e7be4266e1b85c3", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "bundle_hash": "3626f977ff5b8ca9b6457ed8c5e6ce80da762661208a7f9b89b18730e0da2a3e", + "episode": 3, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "episode": 14, + "bundle_hash": "5aef7e085730b499aadd41af6fad765e3c78886d49bd058b57ac640f27724174", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 15, + "bundle_hash": "5aef7e085730b499aadd41af6fad765e3c78886d49bd058b57ac640f27724174", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 16, + "bundle_hash": "5aef7e085730b499aadd41af6fad765e3c78886d49bd058b57ac640f27724174", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "5aef7e085730b499aadd41af6fad765e3c78886d49bd058b57ac640f27724174", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "5aef7e085730b499aadd41af6fad765e3c78886d49bd058b57ac640f27724174", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "5aef7e085730b499aadd41af6fad765e3c78886d49bd058b57ac640f27724174", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "5aef7e085730b499aadd41af6fad765e3c78886d49bd058b57ac640f27724174", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..b0d74f19448001a15afdd9623282c87b36f3b929 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/handoff.md @@ -0,0 +1,13 @@ +# Offline preparation handoff + +Status: unrehearsed draft, not frozen, no success claim. No exploration episodes spent. All 20 demos analyzed. Required analysis and candidate files are present. + +Entry point: controller.py, exposing reset_episode() and act(obs). Keep reference_bank.npz adjacent to controller.py. Runtime dependencies: Python, NumPy, OpenCV. No /demonstrations or worker_api dependency at inference. build_bank.py is an offline reproducibility helper requiring the authorized mounted demos, manifest, h5py, and /worker_api.py; it is not called by the controller. + +Call reset_episode once before each episode. Supply RGB uint8 HWC or singleton-batch HWC for front_camera and top_camera, all four contract proprioception arrays, instruction, and step_id. The runner performs and charges the initial hold; do not call act for that hold. Action order is panda_leaphand-1 then panda_leaphand_left-0. act returns float32 shape (44,) in [-1,1], or None on invalid/missing observations or at step_id >= 600. None does not assert success. The draft has no early visual completion detector. + +Evidence: ../demo_analysis.md, ../evidence/stats.json, ../evidence/action_details.json, ../evidence/visual_inspection.json and contact sheets. bank_provenance.json identifies legal source and exact computational sampling; artifact_hashes.json records generated artifact hashes. Runner supplies its verified demo manifest and common environment lock separately; neither is fabricated here. + +Validation is syntax and synthetic-input only; see synthetic_check_results.json. No environment has been imported or contacted. No models or pretrained weights were changed. No internet request was made. + +Before any later authorized rehearsal, review the hand-label bound discrepancy (1.2 in source versus 1.0 legal), observation wiring, phase stalling risk, and budget handling. Environment behavior, live efficacy, success criterion, and recovery remain blocked on a later authorized environment stage. This preparation itself has no missing-data blocker. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..35aee60c455ea8ea46c97004d74f1fb357083985 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,104 @@ +stage: authorized_E20_continuation +status: candidate_under_authorized_exploration +task_id: DualArmLayerClayInDish-v1 +worker_role: single_task_local_coding_worker +exploration_budget: 20 +real_task_tests: recorded_by_trusted_API +rehearsals: recorded_by_trusted_API +simulator_created_or_imported: false +task_specific_expert_or_controller_invoked: false +hidden_state_access: false +other_task_data_access: false +network_requests: 0 +neural_finetuning: false +pretrained_weights_modified: false +models: + coding_model: + identity: Codex as identified by session instructions + exact_checkpoint: not_exposed_to_worker + provenance: provider_supplied_session + updates: none + frozen_weight_reference: provider_managed_not_locally_accessible + runtime_neural_models: [] + pretrained_tool_models: [] + downloaded_weights: [] +controller: + entrypoint: controller.py + interface: reset_episode() and act(obs) + method: nonparametric_observation_conditioned_action_retrieval + learned_neural_parameters: none + data_asset: reference_bank.npz + data_asset_kind: deterministic_table_of_authorized_RGB_features_proprioception_and_action_labels + bank_builder: build_bank.py + table_sampling: every_even_action_aligned_observation_index_in_each_of_20_demos + label_transform: componentwise_clipping_to_contract_minus_one_plus_one + output_order: [panda_leaphand-1, panda_leaphand_left-0] + output_width: 44 + native_horizon: 600 + control_hz: 20 + initial_hold: runner_owned_one_native_step + runtime_cameras: [front_camera, top_camera] + runtime_proprioception: all_four_contract_qpos_qvel_paths + live_demo_id_or_seed_matching: false + step_id_use: budget_guard_duplicate_cache_and_bounded_phase_progression + terminal_condition: budget_or_invalid_input_only_no_success_claim +provenance: + contract: /task_contract.json + demo_manifest: /demo_manifest.json + demo_root: /demonstrations + access: /worker_api.py_API.read_demo + 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] + computational_access_log: bank_provenance.json + actual_visual_inspection_log: ../evidence/visual_inspection.json + analysis: ../demo_analysis.md + artifact_and_source_hashes: artifact_hashes.json + verified_demo_manifest: supplied_separately_by_runner + common_environment_lock: supplied_separately_by_runner +actual_tools: + - name: functions.exec_with_exec_command_and_write_stdin + purpose: local_file_reads_writes_and_Python_execution + version: provider_tool_version_not_exposed + - name: view_image + purpose: display_legal_demo_contact_sheets + version: provider_tool_version_not_exposed + - name: worker_API.read_demo + purpose: manifest_allowlisted_HDF5_and_authorized_live_API + version: mounted_standalone_module_hash_in_artifact_hashes + - name: Python + version: 3.10.20 + provenance: preinstalled_environment + purpose: compilation_analysis_checks_and_runtime + - name: NumPy + version: 2.2.6 + provenance: preinstalled_environment + purpose: numeric_analysis_feature_table_and_runtime + - name: OpenCV + version: 4.12.0 + provenance: preinstalled_environment + purpose: RGB_resizing_color_conversion_contact_sheets_and_runtime + - name: h5py + version: 3.16.0 + hdf5_version: 2.0.0 + provenance: preinstalled_environment + purpose: authorized_demo_reads_via_worker_API + - name: Python_standard_library + version: bundled_with_Python_3.10.20 + modules: [importlib.util, json, pathlib, hashlib, py_compile, sys, platform] + purpose: standalone_imports_IO_provenance_and_syntax_checks +runtime_dependencies: [Python, NumPy, OpenCV] +offline_build_additional_dependencies: [h5py, worker_api.py, authorized_demonstrations, demo_manifest.json] +unused_available_libraries: [SciPy, torch] +validation: + scope: authorized_interactive_exploration_and_independent_rehearsals + script: synthetic_checks.py + result: synthetic_check_results.json + task_performance: see_findings_and_trusted_rehearsal_results +known_limitations: + - Only_trusted_worker_API_environment_access_is_used. + - Internet_permitted_only_through_audited_provider_proxy_no_network_access_attempted_or_validated. + - No_camera_calibration_root_transforms_joint_names_or_hidden_success_signal. + - Hand_labels_exceed_native_upper_bound_in_all_20_demos_clipping_effect_unverified. + - Coarse_RGB_and_proprioceptive_retrieval_can_stall_alias_phases_or_mix_contact_modes. + - No_verified_layer_order_completion_detector_or_failure_recovery. + - Frozen_coding_model_checkpoint_identifier_not_exposed. + - Synthetic_changed_input_case_returned_same_action_and_does_not_establish_policy_sensitivity_or_efficacy. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-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/DualArmLayerClayInDish-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..f6dcf9d61d5b6920c3e00ed8fda4219810b5240d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/skills.md @@ -0,0 +1,9 @@ +# Draft controller skills + +- Observe both robots via the four legal proprioception paths; preserve contract action-part order. +- Extract deterministic front/top RGB thumbnails and saturation occupancy from current observations. +- Retrieve locally phase-compatible actions from the authorized D20 observation table, using both current visual evidence and joint state. +- Preserve native 44-dimensional bounds and account for the runner-owned initial hold. +- Reset phase/action cache between episodes; stop on missing input or exhausted native horizon. + +These are implemented mechanisms, not demonstrated task skills. Tool pickup, clay transfer, layer ordering, recovery, and successful completion remain unverified. No simulator, expert controller, neural finetuning, or additional skill/plugin was used. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/synthetic_check_results.json b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/synthetic_check_results.json new file mode 100644 index 0000000000000000000000000000000000000000..7648ba6e10c1893288b0db60ae0444f53607725c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/synthetic_check_results.json @@ -0,0 +1,17 @@ +{ + "kind": "syntax and synthetic input only", + "environment_calls": 0, + "checks": [ + "unbatched RGB and proprioception produce finite legal float32[44]", + "singleton-batched and unbatched inputs agree", + "duplicate step returns cached action without advancing phase", + "reset is deterministic", + "altered synthetic RGB/proprioception remains legal", + "step 599 accepts action, step 600 stops: runner hold budget respected", + "missing camera and nonfinite proprioception stop", + "non-uint8 RGB stops" + ], + "synthetic_joint_and_image_change_action_l2": 0.0, + "syntax": "passed", + "status": "passed; not evidence of task performance" +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/synthetic_checks.py b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/synthetic_checks.py new file mode 100644 index 0000000000000000000000000000000000000000..f0621bf3a086285933796509ac034da2bdd0be9c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/synthetic_checks.py @@ -0,0 +1,46 @@ +"""Interface checks on fabricated arrays only; not a task rollout or replay.""" +import json,py_compile +from pathlib import Path +import numpy as np +import controller as c +root=Path(__file__).parent +for name in ('controller.py','build_bank.py','synthetic_checks.py'): + py_compile.compile(str(root/name),doraise=True) +results={'kind':'syntax and synthetic input only','environment_calls':0,'checks':[]} + +def obs(batch=False, variant=0, step=1): + rgb={} + for camera in c.CAMERAS: + h,w=(320,240) if camera=='top_camera' else (240,320) + im=np.full((h,w,3),145,np.uint8) + im[h//2:h//2+20,w//3:w//3+20]=[30,50,220] if variant==0 else [220,40,30] + rgb[camera]=im[None] if batch else im + prop={} + for r,key in enumerate(c.KEYS): + q=np.zeros(23,np.float32);q[:7]=[.15,-.2,.1,-2.0,(-1 if r else 1)*1.3,1.4,.5] + q += variant*.04 + prop['agent/'+key+'/qpos']=q[None] if batch else q + prop['agent/'+key+'/qvel']=np.zeros((1,23) if batch else 23,np.float32) + return {'rgb':rgb,'proprioception':prop,'step_id':step,'instruction':'Dual-arm dexterous clay layering task.'} + +c.reset_episode();a=c.act(obs());assert a.shape==(44,) and a.dtype==np.float32 and np.isfinite(a).all() and (abs(a)<=1).all() +results['checks'].append('unbatched RGB and proprioception produce finite legal float32[44]') +c.reset_episode();ab=c.act(obs(batch=True));assert np.array_equal(a,ab) +results['checks'].append('singleton-batched and unbatched inputs agree') +assert np.array_equal(c.act(obs(batch=True)),ab) +results['checks'].append('duplicate step returns cached action without advancing phase') +c.reset_episode();assert np.array_equal(c.act(obs()),a) +results['checks'].append('reset is deterministic') +c.reset_episode();alt=c.act(obs(variant=1));assert np.isfinite(alt).all() and (abs(alt)<=1).all() +results['checks'].append('altered synthetic RGB/proprioception remains legal') +results['synthetic_joint_and_image_change_action_l2']=float(np.linalg.norm(alt-a)) +c.reset_episode();end=c.act(obs(step=599));assert end is not None and end.shape==(44,) +assert c.act(obs(step=600)) is None +results['checks'].append('step 599 accepts action, step 600 stops: runner hold budget respected') +c.reset_episode();bad=obs();del bad['rgb']['top_camera'];assert c.act(bad) is None +bad=obs();bad['proprioception']['agent/'+c.KEYS[0]+'/qpos'][0]=np.nan;assert c.act(bad) is None +results['checks'].append('missing camera and nonfinite proprioception stop') +bad=obs();bad['rgb']['front_camera']=bad['rgb']['front_camera'].astype(np.float32);assert c.act(bad) is None +results['checks'].append('non-uint8 RGB stops') +results['syntax']='passed';results['status']='passed; not evidence of task performance' +(root/'synthetic_check_results.json').write_text(json.dumps(results,indent=2));print(json.dumps(results,indent=2)) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmLayerClayInDish-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= 400 or _calls >= 399: + return None + _calls += 1 + try: + prop = obs['proprioception'] + q = np.concatenate([np.asarray(prop[f'agent/{r}/qpos'], dtype=np.float32).reshape(-1) for r in ROBOTS]) + v = np.concatenate([np.asarray(prop[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(): + return np.zeros(44, dtype=np.float32) + visuals = [visual_features(obs['rgb'][c]) for c in CAMERAS] + except (KeyError, ValueError, TypeError): + return np.zeros(44, dtype=np.float32) + if _pull == 0: + im = np.asarray(obs['rgb']['top_camera']).squeeze().astype(np.float32) + ys,xs = np.where((im[:,:,2]-im[:,:,0]>25)&(im[:,:,2]-im[:,:,1]>15)) + if len(xs)>20: + xy=np.column_stack((xs,ys)); vals,vecs=np.linalg.eigh(np.cov(xy.T)); direction=vecs[:,-1] + if direction[1]>0: direction=-direction + _axis=np.array([direction[0],-direction[1]],dtype=np.float32) + bank = _load() + scale = np.tile(np.r_[np.full(7,.15),np.full(16,.3)],2) + d = np.mean(((bank['q']-q)/scale)**2,axis=1) + d += .005 * np.mean(((bank['v']-v)/.5)**2,axis=1) + for i,f in enumerate(visuals): + diff = bank[f'image_{i}']-f + d += .6*np.mean((diff[:,:1728]/.15)**2,axis=1) + d += 2.*np.mean((diff[:,1728:]/.04)**2,axis=1) + if 'pose' not in bank: bank['pose']=blue_pose(bank['image_1']) + d += .5*np.mean(((bank['pose']-blue_pose(visuals[1]))/[.1,.1,.3,.15])**2,axis=1) + # Re-select from all observations at every step. No demo ID/time/seed lookup. + idx = np.argpartition(d, 4)[:5] + idx = idx[np.argsort(d[idx])] + # Avoid blending contradictory modes of coordinated bimanual action. + aa = bank['actions'][idx] + compatible = np.linalg.norm(aa-aa[0],axis=1) < .2 + idx = idx[compatible] + weights = np.exp(-(d[idx]-d[idx[0]])/.08) + action = np.sum(bank['actions'][idx]*weights[:,None],axis=0)/weights.sum() + if not np.isfinite(action).all(): + return np.zeros(44,dtype=np.float32) + # Faster approach remains re-localized from current observations every step. + action *= 2.0 + arm_ids = [0,1,2,22,23,24] + closed = min(np.mean(q[7:23]),np.mean(q[30:46])) > .55 + _still = _still + 1 if closed and np.linalg.norm(action[arm_ids]) < .02 else 0 + if _still >= 5 and _pull == 0: + _pull = 1 + if _pull: + action[arm_ids] = 0. + if _pull <= 35: + action[:2] = .12 * _axis + action[22:24] = -.12 * _axis + _pull += 1 + if _pull > 41: + return None + return np.clip(action,-1.,1.).astype(np.float32) + +def blue_pose(f): + f=np.atleast_2d(f) + yy,xx=np.mgrid[:32,:32];xy=np.column_stack((xx.ravel()/31,yy.ravel()/31)) + w=np.maximum(f[:,1728:]-.015,0);w=w/(w.sum(-1,keepdims=True)+1e-8) + c=w@xy;dx=xy[None,:,:]-c[:,None,:] + cov=np.einsum('ni,nij,nik->njk',w,dx,dx); vals,vecs=np.linalg.eigh(cov) + v=vecs[:,:,-1];v*=np.where(v[:,1:2]<0,-1,1) + return np.column_stack((c,v[:,0],np.sqrt(np.maximum(0,vals[:,-1])))) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..7b08e1d3f95fa112fb965e46964b568b718cb533 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/demo_manifest.json @@ -0,0 +1,2168 @@ +{ + "task_id": "DualArmOpenPen-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": 327, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 327, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 327, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 328, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 328, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 328, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 328, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 328, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 328, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 328, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 328, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 328, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "55c949f1baa81f0879149cd0ba79ba7579ad7eba9a0d46767d2fe165ff2a4538", + "source_sha256": "b26d7470cfbd8716304094c8482e6cbfdff90f31b5613c8fc8e5dbc085fc69db", + "view_sha256": "dec889fa131d3e76291d6fa33297a92fe399ebf8c8e639cccf889e37549ed5b5" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 289, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 289, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 289, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 290, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 290, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 290, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 290, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 290, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 290, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 290, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 290, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 290, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "4dcbbabc16bed4849317ad40b5cdf54c4787a020d4f11efaeea488558a5c6b10", + "source_sha256": "054e0db96106c066b3328cfd9bf5c78f24a1411ff2426aa283fdab6887de114e", + "view_sha256": "16ea7cf04783050e0d08a07bb999a9a3bc535dafadccd835de2139884ce084b3" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 294, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 294, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 294, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 295, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 295, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 295, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 295, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 295, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 295, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 295, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 295, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 295, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8108732ea1292016c7a75da31c8b821fbbe08d1d18b90c8e002f145f189df5c4", + "source_sha256": "a5e223e254f81537d527e8c6b64f2ee0c9ca31eb087b036394656f85f4ec57d9", + "view_sha256": "27d2a8988bb49a2a7feae13b306bc80544d195db5ac719252f404deb250ec375" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 286, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 286, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 286, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 287, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 287, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 287, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 287, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 287, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 287, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 287, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 287, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 287, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "092fb5b06c2d6c53c1632864ff252d729dbbff4aba72e61197072dbfdf01d16c", + "source_sha256": "83d1f118f56e3861b0c8403042bc728506ef3fcacd67296d8390289f712aa7e5", + "view_sha256": "aa0bb714415ae664bf0b41d617f5bf8895d1fd06d5e5b1ad2b86d65aefd43a59" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 306, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 306, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 306, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 307, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 307, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 307, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 307, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 307, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 307, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 307, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 307, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 307, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "eaee5eeb2dd6a7897ce11adeddece91965dfd932b834392c23c4530cbb699d57", + "source_sha256": "7a18122fb0842c807995dd7b85193b867fa2d05d6d30b569820da5c4b023e0e4", + "view_sha256": "480e703b2c71fd49d80fb35df15a18669e80b78b90079fb0949a376897c8e680" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 206, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 206, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 206, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 207, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 207, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 207, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 207, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 207, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 207, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 207, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 207, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 207, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ebdb082ac9823d6cccb3b83b7443c00de30e02754d4b925e4baef66bd236875d", + "source_sha256": "0c39445f2d8893729a1bb26e969a4bb5a11d0074ffae4ee2ce81b065060b57a7", + "view_sha256": "af1c267b4137075e12649aaba198fe55adc3ea59f51e0e65e36d759bcef4d3ca" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 203, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 203, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 203, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 204, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 204, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 204, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 204, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 204, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 204, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 204, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 204, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 204, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ded13e3d823f78c088fddf14eabda2d07738099d3fac9bb82fa76af6151bfb40", + "source_sha256": "f65ed45c7306d9c70a598d91ce425cbaeeed92af90520ffd8ece55dbf30222e6", + "view_sha256": "eef4c947d55a674af2ca15a900e02bdbce7af6d0e7d600fd993ea78bc2d339d6" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 297, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 297, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 297, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 298, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 298, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 298, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 298, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 298, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 298, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 298, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 298, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 298, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "94506a595c8c770d4ebc5bd5b28b64f8489d4d37dd3ae6ec6ad8d16be4fc0703", + "source_sha256": "dfac7f144e80dcfecc7f1fca3922423cf6d625a0228c058b26e948b254eca699", + "view_sha256": "b953b3f95c4e210e7d0bfe0a0d42e88f605e76ca71437ce3b79eff6be1736f0b" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 277, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 277, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 277, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 278, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 278, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 278, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 278, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 278, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 278, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 278, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 278, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 278, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "010d2e0dbbe3b4ca9f772e6ed92fe91eba43804a125b91305e8d8a4b898a32f3", + "source_sha256": "a9fbe29a4141d235beb04b9ae8b0e143887668462774bc7fcc51ef6f2e857986", + "view_sha256": "75b0ee5ea901fefb00711cc73e29471ed170c96c7079e349fc336fbb9abb924f" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 300, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 300, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 300, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 301, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 301, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 301, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 301, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 301, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 301, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 301, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 301, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 301, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6debd05c892d42a11aeb4dc9ad20effab78af7da02e206da719c5f9b16acf058", + "source_sha256": "97bd4d7f5d748080a8f48d2da7de975145eca9c74c75c610f24851d8dad9ad86", + "view_sha256": "149ac2a8dc691151b5737abcdaac8ebc474db648e63279aab4135921b9416031" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 343, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 343, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 343, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 344, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 344, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 344, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 344, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 344, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 344, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 344, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 344, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 344, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d44fa2aede3afcb217cf9413a972b0846166827c8d33439c6cd587b46861ac55", + "source_sha256": "64921018d0acfe719a3112926545d80b920937a14295609499933e6e9fbb8755", + "view_sha256": "df199c5cc4008ecdd23b6af58a2501a9196374fff99b773c35d961334d039fe6" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 233, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 233, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 233, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 234, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 234, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 234, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 234, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 234, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 234, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 234, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 234, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 234, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "29a81872491a27620e8581c60163e5eddf80330388a45ebf63ddc0c256bf575a", + "source_sha256": "286cd42783a57bdbcfcb08ec59bb5e6101995b761a3aa3bcb93529a3bf5e9789", + "view_sha256": "167b1b54b55129380b3e5d8dc7ae21691ddb9370c462f34fe40468690fbe1a3a" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 202, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 202, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 202, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 203, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 203, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 203, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 203, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 203, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 203, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 203, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 203, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 203, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "fa310779c9433139ab669f4bfd634f5ce7771a91aca6812bec0e75ea5726fa37", + "source_sha256": "45cad03c9c16828af7bfd9a4b67adcd8af2464bbf0619c5cb385ddcb520914c7", + "view_sha256": "c960c75d12c22fcd2a6bc0f556a82b1a4931cf19458056d3020ca2beb5f96da0" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 271, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 271, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 271, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 272, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 272, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 272, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 272, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 272, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 272, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 272, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 272, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 272, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "524fe336c86a1b7c30838f258a455f0cca7d506690d1f6234f7260e83d2576ce", + "source_sha256": "cc45f614b5ac570e131c0e014157299e395519a519db9114765571a830496a94", + "view_sha256": "f91abc022ba26823d86a05b122c9b020e0cb4ff08e4bae17cd1974ce1ebbe11b" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 318, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 318, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 318, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 319, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 319, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 319, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 319, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 319, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 319, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 319, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 319, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 319, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7560aa9f157d95e068e266f87ac13fc188838c6c3d98678d4a36c77a519a72a2", + "source_sha256": "1fdf49010ab5f1e0fb1668419092bcaea13f0c86ef5601021822a8f50620fe0b", + "view_sha256": "b96390fd235c2489e5e355b4612c41282b7f297b763272efb24ed30b652b56aa" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 257, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 257, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 257, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 258, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 258, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 258, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 258, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 258, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 258, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 258, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 258, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 258, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "f3eb818034f2eb672b7eb3aae6ff5d43c883ff5d9c81fbd4b86f4acdfc5b0119", + "source_sha256": "c5ecb1875e14a5d85405ccb56eb6573d930f39679f319136cfbc092e8efdaae9", + "view_sha256": "0b49456b55d8a917c973d2ff772b6e40b8b8114efaf5a1f74f05f874c621d673" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 280, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 280, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 280, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 281, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 281, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 281, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 281, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 281, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 281, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 281, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 281, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 281, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7ce34bf23fceb4df30b488d93c26bf044a2fab773a453f806f9d7bfcf82c3a2d", + "source_sha256": "2de57137e77c654c77f14a83a23bab0b70c02e47238def6419fc22e7ab961ede", + "view_sha256": "5bbfa3bb2f9e83ed51650786dae69f3dfe624915b75918694bbbab016ac2238a" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 227, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 227, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 227, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 228, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 228, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 228, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 228, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 228, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 228, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 228, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 228, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 228, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "b5719f519bab8085693eba59d9e4c8e6e400da197aef0a3bfcda81044843651e", + "source_sha256": "da1b0511b4706d9021c4bc6d4e5032b56abd3ba1b3406c1c3062913e9b933a37", + "view_sha256": "127e902da5efcdd732e69505a2ab6c5e2fb8b72d4808f0b7c1ba52b6c9189465" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 333, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 333, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 333, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 334, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 334, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 334, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 334, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 334, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 334, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 334, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 334, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 334, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ecbd9000ad0d145e9d4edda4fe5c400890767d06da4f2fb75e8f2273d1579464", + "source_sha256": "a17525dbeb4f46444ea0fbfcddf9f756b0bb9bd44667c8fa302f6cdd654f24ec", + "view_sha256": "4095b5fe0d098f0f3d5678d19f1daac5154ab9901aeb5c7f2b1696ecf4582626" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 246, + "fields": [ + { + "path": "actions/panda_leaphand-1", + "shape": [ + 246, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-0", + "shape": [ + 246, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qpos", + "shape": [ + 247, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-1/qvel", + "shape": [ + 247, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qpos", + "shape": [ + 247, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-0/qvel", + "shape": [ + 247, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 247, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 247, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 247, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 247, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 247, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e64d7ec1ce7775fe62411d5bbd1794af5de27fec018a13e46185c241ef98f8ba", + "source_sha256": "0fb9b233eedb28f9b9531554cde9c1c86e69c4d6b5e21f403e6f52ec4d00d901", + "view_sha256": "03d9ed7c33f0be78ef2f57338778090ac2b88e116febf386c349bb2008fe30c9" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-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/DualArmOpenPen-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..13b073d3d1db887b36c6b49411c85b6d0a702ff7 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/findings.md @@ -0,0 +1,18 @@ +# E20 live exploration ledger + +Only the trusted worker API is used for environment interaction. Budget initially 0/20. The original D20 preparation remains in demo_analysis.md; versions/v0 preserves the original candidate. + +Episode 1: baseline nonparametric closed-loop policy ran to native step 400. Native success false throughout recorded steps. Images at 50-step intervals show approach, finger closure, then a stable joined pen. Nearest terminal reference actions have exactly zero arm translations, so retrieval alone cannot escape the terminal posture. No visible success claimed. Program harness initially misunderstood execute_actions response as a single observation; one legal action was executed, saved in the initial actions file before resume. The response is a list under steps. The resumed run starts at native step 2 and has 398 recorded actions; the first action is reconstructible from ep01_initial.pkl and versions/v0. No reset or extra slot was used. + +Plan for episodes 2–4: 10 positive and 10 negative x/y/z translation commands per arm, 0.1 normalized, from the held initial observation. Record all commands and endpoint cameras to establish image-space direction and avoid assuming root transforms. + +Episodes 2, 3, 4: completed 40 actions each (native step 41), native success false. Reversible root x/y/z probes; all endpoint images and action arrays retained. Optical flow on initial wrist-circle patches in top view gives per +0.1 × 10 commands: first arm x=(19.67,0.02), y=(-0.16,-19.85), z=(-0.98,-2.52) pixels; second arm x=(19.55,0.05), y=(-0.36,-19.44), z=(-0.91,2.90). Positive x maps right and positive y maps up for both arms. Top RGB is 640×480 in live observations versus 320×240 in demos, a consistent factor of two; descriptor resampling remains compatible. Probes do not establish grasp or success. + +Episode 5 variant v1: doubled retrieved action magnitude, reduced velocity-distance weight from .05 to .005 to accommodate changed speed, and added a 35-step opposed-y pull after both hand mean joint angles exceed .55 and five consecutive arm-command norms fall below .02. This is a posture heuristic, not a contact detector. Ten subsequent settle steps precede return None. Bounded recovery counters are not success claims. + +Prepared v2: use PCA of blue-dominant top-camera pixels at first held observation to estimate pen-axis orientation; map it to root xy using episodes 2–3. Axis estimation remains vulnerable to occlusion; unchanged fallback is opposed y. No neural weights modified. + +Episode 5 completed native step 150+ (exact final in returns.json), no native success. Pull moved hands outward but images show a long connected/overlapping pen and ambiguous cap junction. Speed increase does permit grasp-like closure earlier. Initial pen orientation changed substantially during approach/grasp, exposing stale-axis risk. Episode 6 tests v2 with initial-axis pull. Prepared v3 refreshes visible blue-axis PCA until pull begins and increases bounded pull from .06×35 to .12×60, with 15 settling steps. This is an empirical parameter change, not a guarantee of grasp force/contact. + + +Variant v5: Add analytic blue center/orientation distance, weight .5. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..097249f7e62b5cdeb5194d9cef88a2f73a33efeb --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/freeze_manifest.json @@ -0,0 +1,174 @@ +{ + "files": { + "__pycache__/build_bank.cpython-310.pyc": "c5b110cf4533740338d10d1c9443725b755f1e7963298b4eeca1ed9edd7349a9", + "__pycache__/controller.cpython-310.pyc": "0192c6b40bda16232deff499604b5ff45d84c6a9b5a2e8480f7ca4c39f0d408d", + "__pycache__/synthetic_checks.cpython-310.pyc": "e523281c0e7f672b21763ecbeeb299f3d04aa31655fcde36cf026653b7b8ae31", + "build_bank.py": "d3de183745a280f102358572fda477ea9f3616bfe6e9e1af406bb335af7857aa", + "controller.py": "9e90a854769c78e8baff55b8efae54b28e32cab6da8a0a261688c848402d6853", + "demo_manifest.json": "4b899f5af6e744f1df541f665e6aa148f7a4426bd63eeeaccbf4136c484f42cc", + "demonstrations_readonly/demo_00.h5": "dec889fa131d3e76291d6fa33297a92fe399ebf8c8e639cccf889e37549ed5b5", + "demonstrations_readonly/demo_01.h5": "16ea7cf04783050e0d08a07bb999a9a3bc535dafadccd835de2139884ce084b3", + "demonstrations_readonly/demo_02.h5": "27d2a8988bb49a2a7feae13b306bc80544d195db5ac719252f404deb250ec375", + "demonstrations_readonly/demo_03.h5": "aa0bb714415ae664bf0b41d617f5bf8895d1fd06d5e5b1ad2b86d65aefd43a59", + "demonstrations_readonly/demo_04.h5": "480e703b2c71fd49d80fb35df15a18669e80b78b90079fb0949a376897c8e680", + "demonstrations_readonly/demo_05.h5": "af1c267b4137075e12649aaba198fe55adc3ea59f51e0e65e36d759bcef4d3ca", + "demonstrations_readonly/demo_06.h5": "eef4c947d55a674af2ca15a900e02bdbce7af6d0e7d600fd993ea78bc2d339d6", + "demonstrations_readonly/demo_07.h5": "b953b3f95c4e210e7d0bfe0a0d42e88f605e76ca71437ce3b79eff6be1736f0b", + "demonstrations_readonly/demo_08.h5": "75b0ee5ea901fefb00711cc73e29471ed170c96c7079e349fc336fbb9abb924f", + "demonstrations_readonly/demo_09.h5": "149ac2a8dc691151b5737abcdaac8ebc474db648e63279aab4135921b9416031", + "demonstrations_readonly/demo_10.h5": "df199c5cc4008ecdd23b6af58a2501a9196374fff99b773c35d961334d039fe6", + "demonstrations_readonly/demo_11.h5": "167b1b54b55129380b3e5d8dc7ae21691ddb9370c462f34fe40468690fbe1a3a", + "demonstrations_readonly/demo_12.h5": "c960c75d12c22fcd2a6bc0f556a82b1a4931cf19458056d3020ca2beb5f96da0", + "demonstrations_readonly/demo_13.h5": "f91abc022ba26823d86a05b122c9b020e0cb4ff08e4bae17cd1974ce1ebbe11b", + "demonstrations_readonly/demo_14.h5": "b96390fd235c2489e5e355b4612c41282b7f297b763272efb24ed30b652b56aa", + "demonstrations_readonly/demo_15.h5": "0b49456b55d8a917c973d2ff772b6e40b8b8114efaf5a1f74f05f874c621d673", + "demonstrations_readonly/demo_16.h5": "5bbfa3bb2f9e83ed51650786dae69f3dfe624915b75918694bbbab016ac2238a", + "demonstrations_readonly/demo_17.h5": "127e902da5efcdd732e69505a2ab6c5e2fb8b72d4808f0b7c1ba52b6c9189465", + "demonstrations_readonly/demo_18.h5": "4095b5fe0d098f0f3d5678d19f1daac5154ab9901aeb5c7f2b1696ecf4582626", + "demonstrations_readonly/demo_19.h5": "03d9ed7c33f0be78ef2f57338778090ac2b88e116febf386c349bb2008fe30c9", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "findings.md": "4fa0f6bbbe1ce064f15929f392a38233aff7999c5f24d69df657a83fbda86015", + "handoff.md": "95b2f63e68b54a52c3109aaf9c105e5b73c392efdef436d56854d47cea4d402e", + "model_tool_manifest.yaml": "ed2320d75262bf53e3e91a2a3b64f1cbbfb331b5ad08e75e16db7ef28e5877c0", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "reference_bank.npz": "88738c67d3061865c5237986583e71318f2d2de6e153f68f7571fbe64965aa73", + "skills.md": "05d647f41a308eb717c2b88298e52c4d407f7adf245b6d722263d66a7b99ac6c", + "synthetic_checks.py": "2706a5aa88ac665f0251dda4534e5bed1866942b1618817a6070c4a99b7012f9", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "1b2ed6675745e61793981d6ed3d2d75d83401ce1ac77614e3517c52f3202b44a", + "exploration_ledger_hash": "500776d9ef184156f16c71da3a944a19f4310fe4826f74a36b0c30b558281f17", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "bundle_hash": "d28f662e2e102ea4a2546a9526b4791f8b53486444813a872e4059557d6a54a1", + "episode": 7, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "d28f662e2e102ea4a2546a9526b4791f8b53486444813a872e4059557d6a54a1", + "episode": 8, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "1240d5cb285ad031471b8b1f3c06070b645367464e03652609b71599489bc0f8", + "episode": 9, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "1240d5cb285ad031471b8b1f3c06070b645367464e03652609b71599489bc0f8", + "episode": 10, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "1b2ed6675745e61793981d6ed3d2d75d83401ce1ac77614e3517c52f3202b44a", + "episode": 11, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "1b2ed6675745e61793981d6ed3d2d75d83401ce1ac77614e3517c52f3202b44a", + "episode": 12, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "a38890354b240d33737795de73d57fe79bf25e546eeaf86430693b9241b93c7f", + "episode": 13, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "a38890354b240d33737795de73d57fe79bf25e546eeaf86430693b9241b93c7f", + "episode": 14, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "9d229d608f8cf631bbae9c4d05017337138f588825191d49b80bb253ff844ebf", + "episode": 15, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "9d229d608f8cf631bbae9c4d05017337138f588825191d49b80bb253ff844ebf", + "episode": 16, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "1b2ed6675745e61793981d6ed3d2d75d83401ce1ac77614e3517c52f3202b44a", + "episode": 17, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "1b2ed6675745e61793981d6ed3d2d75d83401ce1ac77614e3517c52f3202b44a", + "episode": 18, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "1b2ed6675745e61793981d6ed3d2d75d83401ce1ac77614e3517c52f3202b44a", + "episode": 20, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "episode": 19, + "bundle_hash": null, + "independent": true, + "valid": false, + "status": "infrastructure_interrupted", + "success": false, + "score_source": "interrupted_no_score", + "recovery": "durable_rehearsal_request_and_charged_episode; no replay" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..ef40a8019fec9ef327aa3df231ba48968bf8ab1e --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/handoff.md @@ -0,0 +1,7 @@ +# E20 candidate handoff + +Entry point controller.py: reset_episode() and act(obs). Dependencies: Python, NumPy, OpenCV, reference_bank.npz in this bundle. The fixed bank contains legal D20 descriptors, proprioception and action labels. No neural weights are trained or loaded. build_bank.py is an offline provenance helper and is never called at runtime. + +Input: current rgb mapping and proprioception mapping at the exact contract paths; optional step_id. Output: bounded float32 44-vector in panda_leaphand-1 then panda_leaphand_left-0 order, or None. The runner's charged initial hold consumes native step 1. Controller counts at most 399 actions. + +Development: baseline stalled at terminal reference states. Reversible x/y/z probes established camera directions. Closed-loop retrieval is accelerated, with a bounded posture-triggered axis pull. Closure and axis detection remain uncertain; success must come from native step returns or the preregistered unambiguous-image rule. No success is inferred from controller termination. See findings.md and workspace evidence for outcomes. Independent rehearsal/freeze status is owned by the trusted API ledger. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9b9add86eca43add6942a5c811e2d25bd648fa0a --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,80 @@ +{ + "stage": "E20_EXPLORATION", + "status": "developing_not_frozen", + "task_id": "DualArmOpenPen-v1", + "model": { + "identity": "coding worker model supplied by host; precise checkpoint identifier not exposed", + "weights_modified": false, + "finetuning": false + }, + "pretrained_tool_weights": [], + "neural_dependencies_used": [], + "runtime_dependencies": { + "python": "3.10.20", + "numpy": "2.2.6", + "opencv-python": "4.13.0.92" + }, + "offline_dependencies": { + "h5py": "3.16.0", + "worker_api.py": { + "path": "/worker_api.py", + "sha256": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + } + }, + "tools_used": [ + "functions.exec orchestration", + "exec_command bash/filesystem/Python", + "write_stdin process completion", + "view_image legal contact-sheet inspection", + "worker_api.API.read_demo local HDF5 reads", + "Python standard library including importlib, json, pathlib, hashlib, importlib.metadata", + "NumPy numerical analysis and nearest-neighbor interpolation", + "OpenCV image resizing, blue cue, contact sheets", + "h5py via API.read_demo", + "Trusted API interactive exploration and independent rehearsal", + "OpenCV optical flow on legal calibration images" + ], + "data_provenance": { + "contract_sha256": "1683be6c7c0fa838ae085285cee7d5e340a21922e1db3ed66ec23e7fa1993837", + "demo_manifest_sha256": "f5f690d1fe369cb08db73fefe5b1f6b26eebedb6029fd1506cbc04a5568876ac", + "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" + ], + "source": "only /demonstrations sanitized HDF5 fields authorized by /demo_manifest.json", + "reference_bank": "fixed descriptors plus original legal action/proprioception labels; no trained parameters", + "reference_bank_sha256": "88738c67d3061865c5237986583e71318f2d2de6e153f68f7571fbe64965aa73", + "reference_rows": 5495, + "verified_manifest_and_common_lock": "supplied separately by runner" + }, + "checks": [ + "py_compile passed", + "synthetic_checks.py passed; only fabricated observations" + ], + "internet_access": "none attempted; audited proxy restriction respected", + "limitations": [ + "No contact/force observations", + "Blue PCA axis can be occluded", + "Joint closure is only a grasp proxy", + "Bounded pull completion does not imply success" + ], + "frozen_weight_references": "none loaded or modified; host model checkpoint unavailable" +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-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/DualArmOpenPen-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..6613febc6f0bdd5dbe96fd885e5e42bfadad8368 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/skills.md @@ -0,0 +1,7 @@ +# Controller capabilities and limits + +Retrieve coordinated bimanual actions from the 20 authorized demonstrations using current front/top RGB, qpos and qvel. Use all 44 native action components in contract order. Recompute neighbors at every step; no seed lookup or timed demonstration replay. + +Estimate the pen axis from blue-dominant top-camera pixels. Calibration episodes 2–4 established root x→image right and root y→image up for both arms. After sustained joint closure and stalled retrieved arm motion, execute a bounded opposed-axis pull and settle. Axis is refreshed until pulling starts. These are geometric/posture heuristics, not contact verification or success detection. Missing observations yield legal holds. Return None means bounded-program completion or horizon exhaustion, never success. + +No network, model weights, external skills, agent delegation, simulator access, or online model-development agent is required at runtime. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/synthetic_checks.py b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/synthetic_checks.py new file mode 100644 index 0000000000000000000000000000000000000000..0f50bd407327e978e9355330f4c20181b63c5c02 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/synthetic_checks.py @@ -0,0 +1,26 @@ +"""Interface checks only: fabricated observations, no environment or demo rollout.""" +import numpy as np +import controller as c + +def observation(batch=False): + rgb={k:np.zeros((240,320,3),np.uint8) for k in c.CAMERAS} + if batch: rgb={k:v[None] for k,v in rgb.items()} + return dict(rgb=rgb,proprioception={f'agent/{r}/{p}':np.zeros(23,np.float32) for r in c.ROBOTS for p in ('qpos','qvel')},instruction='Open the pen',step_id=1) + +def valid(a): + assert isinstance(a,np.ndarray) and a.shape==(44,) and np.isfinite(a).all() and np.max(np.abs(a))<=1 +c.reset_episode(); o=observation();a=c.act(o);valid(a) +c.reset_episode();b=c.act(observation(True));valid(b);assert np.allclose(a,b) +o['proprioception'][f'agent/{c.ROBOTS[0]}/qpos'][:]=.7 +valid(c.act(o)) +o['rgb']['front_camera'][:,:,2]=255 +valid(c.act(o)) +o['proprioception'][f'agent/{c.ROBOTS[0]}/qpos'][0]=np.nan +assert np.all(c.act(o)==0) +o=observation();del o['rgb']['top_camera'];assert np.all(c.act(o)==0) +o=observation();o['step_id']=399;valid(c.act(o));o['step_id']=400;assert c.act(o) is None +c.reset_episode();assert c._calls==0 +# Pure feature response; no claim about task performance. +f0=c.visual_features(np.zeros((240,320,3),np.uint8));im=np.zeros((240,320,3),np.uint8);im[50:100,60:90,2]=255 +assert not np.array_equal(f0,c.visual_features(im)) +print('PASS: synthetic shape, bounds, finite values, batch RGB, reset, feature response, invalid-input hold, horizon boundary. No environment used.') diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmOpenPen-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<=startr*1.25)&(b>g*1.05)&(b>70), (r>b*1.5)&(g>b*1.2)&(r>100)] + blocks.append(small.ravel()) + blocks.extend(cv2.resize(x.astype(np.float32),(24,24),interpolation=cv2.INTER_AREA).ravel() for x in masks) + return np.concatenate(blocks) + +class Controller: + def __init__(self): + with np.load(ROOT/'reference_bank.npz',allow_pickle=False) as z: + self.bank={k:z[k] for k in z.files} + self.feedback=np.load(ROOT/'feedback_bank.npz')['maps'] if (ROOT/'feedback_bank.npz').exists() else None + self.dense=np.load(ROOT/'trajectory_bank.npz') if (ROOT/'trajectory_bank.npz').exists() else None + self.reset_episode() + def reset_episode(self): + self.cursors=np.zeros(20,dtype=np.float32) + self.previous_step=0 + self.previous_phase_speed=1.0 + self.orange_first=None + self.locked=None + self.rotation_level=0.0 + self.last_action=np.zeros(44,dtype=np.float32) + self.diagnostic={} + def act(self,obs): + step=int(obs.get('step_id',self.previous_step+1)) + if 'observation' in obs: obs=obs['observation'] + if step>=CONFIG.get('development_stop',1000): return None + if step>=CONFIG['native_horizon']: return None + if step<1: raise ValueError('Runner-owned hold must precede act') + if step<=self.previous_step: self.reset_episode() + try: + q=np.concatenate([np.asarray(obs['proprioception'][p],dtype=np.float32).reshape(-1) for p in CONFIG['proprio_paths']]) + if q.shape!=(92,) or not np.isfinite(q).all(): raise ValueError('Invalid proprioception') + v=visual_features(obs['rgb']) + except (KeyError,ValueError,TypeError): + self.diagnostic={'reason':'missing or invalid legal observation'} + return np.zeros(44,dtype=np.float32) + if self.orange_first is None: + im=cv2.resize(np.asarray(obs['rgb']['top_camera']).squeeze(),(240,320)) + roi=im[172:236,145:205].astype(np.float32) + r,g,b=roi[:,:,0],roi[:,:,1],roi[:,:,2] + self.orange_first=bool(np.sum((b>1.2*r)&(b>1.05*g)&(b>45))>100) + bank=self.bank; elapsed=max(1,step-self.previous_step) + candidates=[]; scores=[] + phase_before_action=float(np.max(self.cursors)) + second_pour=bool(phase_before_action>=CONFIG.get('second_pour_phase',400)) + active_source_orange=(not self.orange_first) if second_pour else self.orange_first + speed_key='orange_phase_speed' if active_source_orange else 'blue_phase_speed' + speed=CONFIG.get(speed_key,CONFIG.get('phase_speed',1.0)) if step>40 else 1.0 + orange_return_phase=CONFIG.get('orange_return_phase_second',650) if second_pour else CONFIG.get('orange_return_phase_first',275) + if step>40 and active_source_orange and phase_before_action>=orange_return_phase: + speed=CONFIG.get('orange_return_speed',speed) + if step>40 and CONFIG.get('slow_rotation',False) and self.rotation_level>0.015: speed=min(speed,CONFIG.get('rotation_speed',1.5)) + for demo in range(20): + refs=CONFIG.get('preferred_refs') + if refs is not None and demo!=refs[1 if self.orange_first else 0]: continue + if self.locked is not None and demo!=self.locked: continue + if (demo in [1,2,6,7,11,13,14,16,17,19]) != self.orange_first: continue + advance_speed=self.previous_phase_speed if CONFIG.get('fixed_phase',False) else speed + expected=self.cursors[demo]+(elapsed*advance_speed if self.previous_step else 0) + ids=np.flatnonzero((bank['demo']==demo)&(bank['frame']>=max(0,expected-12))&(bank['frame']<=expected+20)) + if not len(ids): continue + dq=(bank['proprio'][ids]-q)/bank['scale'] + # Equalized joint groups, light velocity influence, visual cup emphasis. + qcost=np.mean(dq*dq,axis=1) + vcost=np.mean((bank['visual'][ids]-v)**2,axis=1) + cost=qcost+12*vcost+0.025*((bank['frame'][ids]-expected)/12)**2 + best=int(np.argmin(cost)) + if CONFIG.get('fixed_phase',False): + best=int(np.argmin(np.abs(bank['frame'][ids]-expected))) + self.cursors[demo]=expected + else: + self.cursors[demo]=max(self.cursors[demo]+0.9*elapsed*speed,bank['frame'][ids[best]]) + candidates.append(ids[best]);scores.append(cost[best]) + if not candidates: return None + candidates=np.asarray(candidates); scores=np.asarray(scores) + order=np.argsort(scores); anchor=candidates[order[0]] + if CONFIG.get('lock_reference',False) and step>=40 and self.locked is None: self.locked=int(bank['demo'][anchor]) + # Blend only nearby action directions; avoid averaging opposite pouring roles. + compatible=np.mean((bank['action'][candidates]-bank['action'][anchor])**2,axis=1)<0.04 + chosen=order[compatible[order]][:3] + weights=np.exp(-(scores[chosen]-scores[order[0]])/0.08); weights/=weights.sum() + action=np.sum(bank['action'][candidates[chosen]]*weights[:,None],axis=0) + target_q=bank['proprio'][anchor] + if self.dense is not None and CONFIG.get('dense_phase',False): + demo=int(bank['demo'][anchor]); phase=float(self.cursors[demo]) + aa=self.dense[f'a{demo}']; qq=self.dense[f'q{demo}'] + lo=min(int(phase),len(aa)-1); frac=phase-lo + target_q=qq[lo]*(1-min(frac,1))+qq[min(lo+1,len(qq)-1)]*min(frac,1) + end=min(phase+speed,float(len(aa))) + action=np.zeros(44,dtype=np.float32) + weight=0.0 + for t in range(lo,min(int(np.ceil(end)),len(aa))): + w=max(0.0,min(end,t+1)-max(phase,t)) + action+=aa[t]*w; weight+=w + if weight>0: action/=weight + self.rotation_level=max(float(np.linalg.norm(action[3:6])),float(np.linalg.norm(action[25:28]))) + if step>40 and CONFIG.get('slow_rotation',False) and self.rotation_level>0.015: speed=min(speed,CONFIG.get('rotation_speed',1.5)) + for arm,off,ao in [(0,0,0),(1,46,22)]: + action[ao:ao+6]*=speed + feedback_gain=CONFIG.get('orange_feedback_gain' if active_source_orange else 'blue_feedback_gain',CONFIG.get('feedback_gain',0)) + if self.feedback is not None and feedback_gain>0 and step>40: + error=target_q[off:off+7]-q[off:off+7] + correction=error@self.feedback[arm,anchor]*feedback_gain + action[ao:ao+6]+=np.clip(correction,-0.12,0.12) + if CONFIG.get('hand_feedback_gain',0)>0: + hand_error=target_q[off+7:off+23]-q[off+7:off+23] + action[ao+6:ao+22]+=CONFIG['hand_feedback_gain']*hand_error/0.1 + if scores[order[0]]>8: + action=np.zeros(44,dtype=np.float32) + self.previous_step=step + self.previous_phase_speed=speed + self.last_action=np.clip(action,CONFIG['action_low'],CONFIG['action_high']).astype(np.float32) + self.diagnostic={'match_cost':float(scores[order[0]]),'reference_demo':int(bank['demo'][anchor]),'reference_frame':int(bank['frame'][anchor]),'orange_first':self.orange_first,'status':'unverified observation match'} + # No success detector is claimed: let native horizon bound the attempt. + return self.last_action.copy() + +_controller=None + +def reset_episode(): + global _controller + if _controller is None: _controller=Controller() + else: _controller.reset_episode() + +def act(obs): + global _controller + if _controller is None: reset_episode() + return _controller.act(obs) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/demo_analysis.md b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/demo_analysis.md new file mode 100644 index 0000000000000000000000000000000000000000..46aa9188a164b8d36d4001c17abeaa66a499b53c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/demo_analysis.md @@ -0,0 +1,65 @@ +# Offline D20 demonstration analysis + +Status: original offline analysis retained below; exploration continuation is recorded in evidence/log_rules.md and candidate/findings.md. The zero-episode statements below describe preparation time only. All 20 authorized demonstrations were analyzed. No simulator, hidden state, task-specific controller, internet search, or neural fitting was used. + +## Evidence and access + +Read `/task_contract.json`, `/demo_manifest.json`, and standalone `/worker_api.py`. Data access uses only API.read_demo; no RPC methods were called. All action labels and all qpos/qvel rows were read for each trajectory. Visual inspection used seven exact observation indices per trajectory in both front_camera and top_camera. The two other robot cameras and left_camera were not visually inspected. Contact sheets are evidence/sheet_1.jpg through sheet_5.jpg. Images were resized for display; color and visible geometry judgments therefore have limited resolution. + +| Demo | Actions | Inspected observation indices (both cameras) | First raised/tilted cup | RMS translation / rotation / hand, robot 0; robot 1 | +|---|---:|---|---|---| +| demo_00 | 852 | 0, 142, 284, 426, 568, 710, 852 | Blue | 0.088/0.033/0.455; 0.105/0.042/0.482 | +| demo_01 | 757 | 0, 126, 252, 378, 504, 630, 757 | Orange | 0.091/0.036/0.449; 0.092/0.035/0.477 | +| demo_02 | 821 | 0, 136, 273, 410, 547, 684, 821 | Orange | 0.090/0.037/0.434; 0.097/0.039/0.488 | +| demo_03 | 940 | 0, 156, 313, 470, 626, 783, 940 | Blue | 0.083/0.031/0.430; 0.156/0.052/0.497 | +| demo_04 | 882 | 0, 147, 294, 441, 588, 735, 882 | Blue | 0.084/0.032/0.446; 0.113/0.042/0.486 | +| demo_05 | 882 | 0, 147, 294, 441, 588, 735, 882 | Blue | 0.084/0.032/0.443; 0.114/0.042/0.487 | +| demo_06 | 799 | 0, 133, 266, 399, 532, 665, 799 | Orange | 0.098/0.039/0.422; 0.095/0.038/0.487 | +| demo_07 | 781 | 0, 130, 260, 390, 520, 650, 781 | Orange | 0.100/0.039/0.455; 0.091/0.035/0.472 | +| demo_08 | 878 | 0, 146, 292, 439, 585, 731, 878 | Blue | 0.084/0.032/0.444; 0.113/0.042/0.487 | +| demo_09 | 882 | 0, 147, 294, 441, 588, 735, 882 | Blue | 0.086/0.032/0.449; 0.111/0.042/0.484 | +| demo_10 | 882 | 0, 147, 294, 441, 588, 735, 882 | Blue | 0.084/0.032/0.440; 0.112/0.042/0.492 | +| demo_11 | 757 | 0, 126, 252, 378, 504, 630, 757 | Orange | 0.092/0.036/0.447; 0.092/0.035/0.478 | +| demo_12 | 736 | 0, 122, 245, 368, 490, 613, 736 | Blue | 0.084/0.034/0.472; 0.095/0.035/0.453 | +| demo_13 | 714 | 0, 119, 238, 357, 476, 595, 714 | Orange | 0.097/0.037/0.431; 0.085/0.035/0.473 | +| demo_14 | 816 | 0, 136, 272, 408, 544, 680, 816 | Orange | 0.099/0.039/0.453; 0.093/0.036/0.470 | +| demo_15 | 731 | 0, 121, 243, 365, 487, 609, 731 | Blue | 0.083/0.034/0.470; 0.096/0.035/0.456 | +| demo_16 | 757 | 0, 126, 252, 378, 504, 630, 757 | Orange | 0.091/0.036/0.449; 0.091/0.035/0.475 | +| demo_17 | 713 | 0, 118, 237, 356, 475, 594, 713 | Orange | 0.096/0.038/0.425; 0.085/0.035/0.474 | +| demo_18 | 859 | 0, 143, 286, 429, 572, 715, 859 | Blue | 0.086/0.032/0.450; 0.120/0.043/0.479 | +| demo_19 | 706 | 0, 117, 235, 353, 470, 588, 706 | Orange | 0.096/0.038/0.428; 0.086/0.035/0.477 | + +Frame indexing is zero-based. For length N, action rows are 0..N-1 and observations 0..N. The conventional obs[t] -> action[t] alignment is used, but causal alignment has not been tested in an environment. Full numeric inspection results, including rotation peak indices and initial/final qpos, are in evidence/inspection.json. Descriptor compilation additionally reads front/top RGB in blocks covering frames 0..N-1; it processes every fourth frame plus N-1. Exact processed indices are in candidate/descriptor_indices.json; these additional frames were machine processed, not individually visually inspected. + +## Visible sequence and variation + +All 20 initial samples show an orange cup on the left of the front view and a blue cup on the right, with one dexterous hand near each handle. In top view the blue cup is above the orange cup. The first-third samples show one cup raised above the other and substantially tilted. Midpoint samples generally show both cups upright near the table. The later samples show the other cup raised/tilted over the first. Final samples show both cups upright at apparent table height. This supports two reciprocal pouring motions and use of both arms. It does not prove both cups have been released, stable support, liquid quantity transferred, absence of spills, or benchmark success. + +Blue-first demos: demo_00, demo_03, demo_04, demo_05, demo_08, demo_09, demo_10, demo_12, demo_15, demo_18. Orange-first demos: demo_01, demo_02, demo_06, demo_07, demo_11, demo_13, demo_14, demo_16, demo_17, demo_19. Cup contents are small/dark and sometimes occluded; first-moving cup is observed, while its initially-filled status remains uncertain. No seed, hidden scene ID, or success label is available or inferred. + +Lengths vary from 706 to 940 actions (35.30–47.00 seconds at 20 Hz), totaling 16145 labeled actions. Similar durations and appearances in several demos are not proof of duplicate scenes. Reach, tilt, return paths, receiving-cup motion and final arm poses vary. Demo_03 has especially high second-arm translational RMS (0.156) and a visibly extended orange-cup return at frame 783; demo_18 also shows extended return geometry at frame 715. + +## Actions and coordinate conventions + +Exactly 44 scalars: panda_leaphand-0 occupies [0:22], panda_leaphand_left-1 [22:44]. Each part is translation[0:3], rotation[3:6], dex hand joint deltas[6:22]. Every sequence is finite and spans -1 to +1; hand action RMS is much larger than arm RMS. All native component bounds are [-1,1]. Translation scales to +/-0.1 m in the corresponding robot root frame. Rotation is norm-clipped to one then multiplied by -0.5 radians and converted from Euler to quaternion in the root-aligned frame, per contract. The negative sign is significant; an intuitive positive-angle convention would be wrong. Hand deltas scale to +/-0.1 radians. Each robot has 23 qpos and 23 qvel values; exact joint names and camera-to-root transforms are not supplied. Do not equate image x/y directions with either root frame or assume roots share orientation. + +No Panda scalar gripper or mobile-base action is present in these 22-wide dex-hand parts. Zero deltas are legal; the initial hold belongs to the runner and consumes one of 1000 native steps. The controller starts at step_id=1 and stops before requesting step 1000; native 20 Hz, limits, and horizon remain unchanged. + +## Draft design and unresolved limitations + +candidate/controller.py implements nonparametric observation-conditioned action retrieval. It compares current front/top RGB descriptors and both robots’ qpos/qvel to descriptors compiled from every demonstration. A separate temporal cursor per reference limits phase ambiguity; actions are selected anew from current observations every call. Nearby compatible action vectors can be blended. It never selects a scene using seeds, assumes a stored scene is live, or plays a full stored trajectory unconditionally. It does retain temporal priors and reference action labels; this is an imitation draft, not calibrated visual servoing. + +Heuristic scales, color masks, temporal windows, neighbor compatibility and rejection threshold are unvalidated. Repeated poses can confuse phase; appearance shifts or hidden cup contents can select the wrong pouring order. Downsampled features may miss handles, fluid and slips. There is no explicit collision avoidance, grasp verification, metric cup tracking, kinematic inversion, liquid measurement, or reliable completion detector. Out-of-distribution observations yield zero deltas at a fixed heuristic threshold; that can stall. A reference cursor can exhaust candidates and end without establishing success. This draft must not be called successful or frozen. + +## Tool limitations + +No live environment is available in this stage. Only local Python/NumPy/OpenCV/h5py processing, shell file operations, and local image viewing were used. No internet requests were attempted; access is restricted to the audited provider proxy per task. No provider downloads or pretrained perception weights are needed. No real-task testing, score estimates, or invented rollouts are reported. + +## Preparation validation + +Syntax checks passed for candidate Python files. Artificial inputs verified finite bounded 44-element actions, HWC/1HWC equivalence, reset repeatability, horizon stopping and missing-input handling. An entirely synthetic reference bank verified that changing current RGB or proprioception changes action selection and preserves part order. These checks provide no evidence of real task performance. See candidate/synthetic_checks.json. + +## Continuation inspection +Additional authorized API.read_demo inspection: demo_19 observation 160, front_camera RGB, saved as evidence/demo19_step160.png and visually inspected. Source cup is tilted close over receiver. This is pose evidence, not proof of liquid transfer or official success. + +Additional continuation inspection: demo_19 observation 200, front/top RGB, via API.read_demo, saved as evidence/demo19_step200_*.png. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..e1d9597776bdb6c015c1837e32b8f5f916fcc7fe --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/demo_manifest.json @@ -0,0 +1,2168 @@ +{ + "task_id": "DualArmPouringTwoCups-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": 852, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 852, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 852, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 853, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 853, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 853, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 853, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 853, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 853, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 853, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 853, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 853, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "32ea09b7d1dda423c8cfd7c9ec7c43dd4b2d5b2b5f9b1d39a1428917d0c4287e", + "source_sha256": "bb30dcb70e35c54380f5e8c78890d591db07aa2c7e59586dec3cd4bc92c52542", + "view_sha256": "12f2ceb24c68fe64ab78e60a6b2466dd7e0a8b86d48aab0d9dbfb5a351b0bd8e" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 757, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 757, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 757, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 758, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "74607410ac23a380d89853f7c747b8d52d89e6faf372681b176b4b82ff3ed343", + "source_sha256": "8480051f9cf354b21f647868267c8db128acdca3770921fe170048f318383216", + "view_sha256": "fcc1235d7903e9d4ecc4fcd23258c807976e8e073330aa6e5cfbafbad5dca24e" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 821, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 821, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 821, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 822, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 822, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 822, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 822, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 822, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 822, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 822, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 822, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 822, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7ef7283a1c53a46bcc76a8b37e22bce77f30e79a3489353e85b8a6d1c68d9767", + "source_sha256": "556f4885e02a53ded50924e73d665a7159a3ef84362d0e97806bb5a1b7cf3a2d", + "view_sha256": "b8a2b8c2026081619960b5996e79665c3a21c24b9473f761cf5c4cbe3eb1b3df" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 940, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 940, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 940, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 941, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 941, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 941, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 941, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 941, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 941, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 941, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 941, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 941, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9e96d77c3b0536accb3f6b369f7f477b873745fcbdd866cf2bbcd9e09653e6a4", + "source_sha256": "e33968b01a974ba36e910cb74303c4a0779cc99f9702766a606af02e893bd0f7", + "view_sha256": "b0f8fb046d954e549da932d25d2ba77cbd71a315a01bc223fd484f9de5237d2c" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 882, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 882, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 882, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 883, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "350384d58e237c0a843289bf294eab6057b6cbe0ab005784d67d95b57e6801c4", + "source_sha256": "d52b104e8fb4f109e68efd9ca492d5e27297434c6607e0bee09b73388e78697b", + "view_sha256": "097ac3e372d626606b62e40730621e7e5b81a80c7f70cef155cd9027e3e4477b" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 882, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 882, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 882, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 883, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "38084d45df2301549faa27a8deb6b69968a202c7159ab91c99c5b62c8c2d286a", + "source_sha256": "fe8e020b94f9b3b00ba7e3813be6da51aea97a5dba5f2996d4ced50da16ed769", + "view_sha256": "ce60322509eda7c771b5b93e2b7c5d431f20234a7066e69be098f0f3b950dabc" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 799, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 799, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 799, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 800, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 800, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 800, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 800, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 800, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 800, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 800, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 800, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 800, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "3d8ba04bc6616b6ba701fa0bd04c06ddf89d97e0bdce0c96d259ca8e8841d2ea", + "source_sha256": "d537155bebec3feb7a669d723c93dc2a95f0bb19e45a62508f48b43f7fd278fe", + "view_sha256": "52414bcd34170267651e6af1c50c6abb9093791e5ab261107d63d4d3f87cf87a" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 781, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 781, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 781, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 782, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 782, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 782, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 782, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 782, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 782, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 782, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 782, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 782, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "de9fd4b0939bd0bd5f94b2618fd1d3f5b7c72e500e1aa25e68eae790b8db0666", + "source_sha256": "444ddf3ea1b6182ed19a0b054dbd83070345b48ca68f30dc90db223d48245337", + "view_sha256": "272884b09d4a508533ca46d5e29044d712ffd54f4c5dea09b6aec6185ac52529" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 878, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 878, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 878, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 879, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 879, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 879, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 879, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 879, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 879, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 879, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 879, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 879, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9849edf8cbcffd9bb6bf5971f500a2098eb3dd058c2e6867876679b65f6d302f", + "source_sha256": "717bb0acd1fff6b2dc2a82a7ed1951502defd438044268be9803da6ea6465448", + "view_sha256": "5954cf439241d30e0324ce4adc6a69b09319b55c6074036604b660544456a4be" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 882, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 882, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 882, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 883, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9683a3e1f46ae09bf5fcfbaebf3a2bf1323e34fa5203c25a8924a394c8c630e5", + "source_sha256": "c145b13186e432cc6fd42c22b2974800180b198dc54540bda47df58f8034df34", + "view_sha256": "b83dab85334483f5200e76dae3c802c73e329296bb8ead2fadde88d938ebad24" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 882, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 882, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 882, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 883, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 883, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 883, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "bf38dc117105142bbd183c79018725d9698af87245a06cca8e418593b004f61d", + "source_sha256": "17c57a845a4236afdd838988cf94be15d8dd2466e12f47154739dd8c63028d6f", + "view_sha256": "324b7237ce4fd47349a0b5880ff07dfd2776ece5543d70b929543b2e5fafaa4b" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 757, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 757, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 757, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 758, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "311959a6f5e570c74f385ea7bcc59bfd3933a60c6d36eb8c3a0bcad306a8b492", + "source_sha256": "e78d076a4be10c73adcbf7a1ff7f56dbed406ea8e91e2c8434b423c34186db6e", + "view_sha256": "985f4d9cece251151cce702298a04f462152fafa01207a43be9fc17310b80ea3" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 736, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 736, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 736, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 737, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 737, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 737, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 737, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 737, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 737, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 737, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 737, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 737, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d66677afd03e8dd050c1671000a492aec8e9d43057184aa5fcb50f59ecc36231", + "source_sha256": "6b8a8447f2b2bfc37ee0096d02662d4149713b0cc1f46019bfa1ced64baceac2", + "view_sha256": "c3118a789a394cc51ef00d65d76765ee5af6704599b4845cec120ea77576a6d3" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 714, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 714, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 714, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 715, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 715, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 715, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 715, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 715, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 715, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 715, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 715, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 715, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9fdb41a62472702347c9a16aa7cb59b30be3dbc64785696bb1339bfa7efae906", + "source_sha256": "84057325d70861bc091ee998d1ac436647d40d7fc267b51e8a1727ce1fd7ca94", + "view_sha256": "cb9e9f0e991ce17ad7a8319f1f0633c8d56af909e7766cc09e1b5fd94214bb55" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 816, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 816, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 816, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 817, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 817, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 817, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 817, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 817, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 817, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 817, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 817, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 817, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "aefbb95b26be49da3f24457c033070115b7fb275f22856f17b41844a0a935e55", + "source_sha256": "f4ebf103a7a516ddaf3906a5e285e7cc681f3ea793430e16177a2e6882ddc0b3", + "view_sha256": "d31769acfb20af4b2dc19c183c341a65622d8e91c312de156079cc771e0e70cc" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 731, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 731, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 731, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 732, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 732, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 732, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 732, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 732, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 732, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 732, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 732, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 732, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "3c78ba41935006861b4ed681dafec83adb0794aa69caa658a54c819f66c19bdf", + "source_sha256": "5c93cec7a1676986fe49b16d2cb64611b4fef957ee591c812ad7cd8353f67f81", + "view_sha256": "4f1065d63863788a2b343359f5b76d57bcbe6f2636172a494633e673b20909d8" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 757, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 757, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 757, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 758, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 758, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 758, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "65ce2c1695972964d34b7fa2af9cf60cddb8f2dea8c425d1ec6c0e8423bc323c", + "source_sha256": "727283b97381ccd54425c224321d2e029933a21eca9f3b6f8c88eb31443f55c8", + "view_sha256": "0f1198cd4d1082d57a8bbf734c2142a7c4e0207113f4a4b2390f673bd919fc8e" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 713, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 713, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 713, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 714, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 714, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 714, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 714, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 714, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 714, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 714, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 714, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 714, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "fbb2f0f292ac14c5d64ee0a0ef712e985c41c83643cd06600c5fab53800f1e28", + "source_sha256": "aa48d609d5209a65ca3f32ed3e84c35800ebd4cd871ca9bfa23656c963a5ce89", + "view_sha256": "acbacc7a4bff70ec8f534f10062e39c04f521066a4c3eedf1fcff11fb992924d" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 859, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 859, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 859, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 860, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 860, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 860, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 860, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 860, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 860, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 860, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 860, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 860, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "37bcd50dcec896629ceaf02270ce77e85186dc65c7c07676f360a93c4c664b08", + "source_sha256": "557b38165c7b82ccdba0c564b129313705127dffdda52f629384b5668657d24d", + "view_sha256": "e5b0758ac84f5e1755b2650a68924be0a7d262a816ae5694864936e5fa82e65c" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 706, + "fields": [ + { + "path": "actions/panda_leaphand-0", + "shape": [ + 706, + 22 + ], + "dtype": "float32" + }, + { + "path": "actions/panda_leaphand_left-1", + "shape": [ + 706, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qpos", + "shape": [ + 707, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand-0/qvel", + "shape": [ + 707, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qpos", + "shape": [ + 707, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda_leaphand_left-1/qvel", + "shape": [ + 707, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 707, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 707, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 707, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 707, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 707, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "221984a45971782f6e3f4970dad79a032099e1def485bbd3a02cf3a4967371a7", + "source_sha256": "d53cffd0eadffc791f598a971d6a09a48f64ac1b84c153d698787c2fe6463dd3", + "view_sha256": "fa02a6a7d4184baebe8396296514ee58babd1b752ae000a54015e756a6c3daf0" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/descriptor_indices.json b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/descriptor_indices.json new file mode 100644 index 0000000000000000000000000000000000000000..305ef387c64c3a5814a51cf1d70669fa811aeb0f --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/descriptor_indices.json @@ -0,0 +1 @@ +{"demo_00": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848, 851], "demo_01": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756], "demo_02": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820], "demo_03": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848, 852, 856, 860, 864, 868, 872, 876, 880, 884, 888, 892, 896, 900, 904, 908, 912, 916, 920, 924, 928, 932, 936, 939], "demo_04": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848, 852, 856, 860, 864, 868, 872, 876, 880, 881], "demo_05": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848, 852, 856, 860, 864, 868, 872, 876, 880, 881], "demo_06": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 798], "demo_07": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780], "demo_08": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848, 852, 856, 860, 864, 868, 872, 876, 877], "demo_09": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848, 852, 856, 860, 864, 868, 872, 876, 880, 881], "demo_10": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848, 852, 856, 860, 864, 868, 872, 876, 880, 881], "demo_11": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756], "demo_12": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 735], "demo_13": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 713], "demo_14": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 815], "demo_15": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 730], "demo_16": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756], "demo_17": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712], "demo_18": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 708, 712, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 808, 812, 816, 820, 824, 828, 832, 836, 840, 844, 848, 852, 856, 858], "demo_19": [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 200, 204, 208, 212, 216, 220, 224, 228, 232, 236, 240, 244, 248, 252, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 304, 308, 312, 316, 320, 324, 328, 332, 336, 340, 344, 348, 352, 356, 360, 364, 368, 372, 376, 380, 384, 388, 392, 396, 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 440, 444, 448, 452, 456, 460, 464, 468, 472, 476, 480, 484, 488, 492, 496, 500, 504, 508, 512, 516, 520, 524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564, 568, 572, 576, 580, 584, 588, 592, 596, 600, 604, 608, 612, 616, 620, 624, 628, 632, 636, 640, 644, 648, 652, 656, 660, 664, 668, 672, 676, 680, 684, 688, 692, 696, 700, 704, 705]} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-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/DualArmPouringTwoCups-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..dcb9ca42b0d4751e036e801eea2c91a961d6af0e --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/findings.md @@ -0,0 +1,27 @@ +# Findings before final independent rehearsals + +All 20 authorized D20 demonstrations were analyzed; see demo_analysis.md and descriptor_indices.json. References, dense actions/proprioception, and local non-neural kinematic maps derive only from those demos. No neural weights were trained. + +Sixteen E20 slots have been charged, including historical rehearsals 3 and 9. Episode 3 completed independently with native success false. Episode 9 has partial legal images but its original return did not survive restart; API rejected a conservative rescore because native or previous scores cannot be overwritten. Its official outcome is not invented here. + +Episodes 1–4 established response parsing, visible order classification, grasp engagement and initial tilt. Episode 1 was a response-envelope program failure. Episode 2 was interrupted with an incomplete action-array audit. Episodes 5–9 exposed spills under accelerated sparse action retrieval. Episode 10 retained the orange handle through a native-speed first tilt, with transfer uncertain. Episode 11 lost the orange grasp with fixed phase and sparse commands. Dense commands in episode 12 preserved the lift and above-receiver pose. Episode 13 used dense single-step control at speed 2 and showed a blue-to-orange particle stream near the receiving opening; no reverse pour was attempted. Higher arm gain in episode 14 gave an orange-cup pose displaced from its demonstrated target. Hand correction in episode 15 displaced the receiver; stronger hand correction in episode 16 dropped the blue cup and spilled particles. All returned native flags in episodes 10–16 were false; these were diagnostic partial sequences. + +Selected candidate: exact dense command integration; fixed continuous phase; fresh joint-error feedback each step; no hand correction; blue-first demo 15 at phase speed 2 with arm gain .15, orange-first demo 19 at speed 1.5 with arm gain .05. The first 40 native steps stay at speed 1 for grasping. This combines the retained blue grasp/first pour with more conservative orange motion. The order-dependent combination and corrected speed transition are first tested independently in episode 17. No full-task success is established before these rehearsals. + +Localization: fixed front/top descriptors and a top-camera blue-particle occupancy region identify initial pouring order. No camera extrinsics or calibrated metric cup pose are assumed. Pose: current measured arm qpos errors are mapped to normalized arm corrections using D20 local linear maps. Grasp: demonstrated hand commands, checked through visible cup/hand co-motion; no contact oracle. Timing: dense action integration avoids four-frame command aliasing; prior phase speed advances the cursor across speed changes. Recent measured latency was about 3 seconds per native step, so modest compression also preserves the 1800-second episode margin. Recovery: local pose feedback and zero actions on invalid inputs or very large matching error only. There is no verified regrasp, spill recovery, or completion detector. + +Success rule: use native sparse success when returned. Otherwise success requires legal images unambiguously showing initially filled cup to empty cup, back again, both arms used, and both cups returned to table. Ambiguity is false. A low pose cost, a tilt, or reference exhaustion never implies success. Final rehearsal outcomes and exact bundle hashes are runner records and external evidence/rehearsal_*.json; these notes remain unchanged across final rehearsals. + +## Revision after independent rehearsal 17 + +Rehearsal 17 supplied legal progress images through step 441. Initially orange contained particles; step 217 showed particles in blue and empty orange; step 420 showed particles back in orange and empty blue. Both transfers are visibly supported, but the last saved blue cup was still raised. API.rehearse reached its 1810-second client socket timeout without returning a bundle hash/result. The trusted budget subsequently showed episode 17 inactive, 3 remaining, and no latest observation. A conservative visible-false scoring attempt was rejected because native or previous scores cannot be overwritten. No official success, valid completion, or missing hash is invented. + +For remaining independent rehearsals 18–20, speed and arm-feedback gain follow the currently pouring cup rather than the initial order: orange speed 1.5/gain .05, blue speed 2.5/gain .15. The demonstrated role transition is near reference phase 400 for the selected references. The initial 40 native steps stay at speed 1. This preserves rehearsal 17's slower orange transfer while compressing the blue phase to bring the entire sequence to approximately 410 native steps and leave timeout margin. Blue speed 2.5 is not yet validated in this exact dense-feedback program; rehearsal 18 is its independent test. Hand correction remains disabled. Prior speed advances phase before the new speed is applied, avoiding skipped intervals at either transition. + +These revised notes and behavior remain unchanged during each subsequent exact independent rehearsal. Runner records and workspace evidence contain the actual outcomes. + +## Final revision after independent rehearsal 18 + +Episode 18 completed independently and validly at step 409. Returned exact bundle hash: 3f4c2d3a51aca9027c588f708fef063a9eda2db5fa4f04d7d1d5170cee187031. Native success was false. Legal images show the first transfer, the blue-to-orange return stream, particles returned to orange, and both cups upright at final table height; a substantial spill is visible beside orange. Wall time after the hold was about 1565 seconds, so this revision completed within the client deadline. + +For mandatory independent rehearsals 19 and 20, reduce blue motion from 2.5 to 2.0, retaining blue arm gain .15. Keep orange lift/pour at 1.5 with gain .05, and increase only its nominal post-pour restoration/return to speed 2.0 after reference phase 275 when orange is first, or 650 when orange is second. This trades some empty-cup return time for slower fluid-bearing blue motion. The phrase post-pour denotes demonstrated phase, not a measured liquid-state guarantee. The first 40 native steps remain speed 1; hand correction stays disabled. Expected full execution is about 420–435 native steps. This final behavior is first independently tested in episode 19 and is held unchanged for episode 20. Exact native outcomes remain runner records; no success is claimed in these immutable pre-rehearsal notes. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..9a645ebcd6f63264448dbd34b610eccb86545b2e --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/freeze_manifest.json @@ -0,0 +1,106 @@ +{ + "files": { + "build_bank.py": "b395fce968a54dedc23e31a5533004504e9b9c2c866fe8f1e8f6f50dbc8ff434", + "config.json": "6dfc19f69c0d86e9e4c384bc6e6ca6e2cd382767ad14ae15310609afa4b160f8", + "controller.py": "dcc26036650e073efe92e976a127e816593810e674e71d35693b9614853f6a54", + "demo_analysis.md": "c3e8e8896b4b33893e1e11bfb50eb0332fc632c686a6d23432e5bc0ab4e27c18", + "demo_manifest.json": "5cfda21611d5005933d7f558a9eb93adece19fcf706e55c03eb9bd40d76891bf", + "demonstrations_readonly/demo_00.h5": "12f2ceb24c68fe64ab78e60a6b2466dd7e0a8b86d48aab0d9dbfb5a351b0bd8e", + "demonstrations_readonly/demo_01.h5": "fcc1235d7903e9d4ecc4fcd23258c807976e8e073330aa6e5cfbafbad5dca24e", + "demonstrations_readonly/demo_02.h5": "b8a2b8c2026081619960b5996e79665c3a21c24b9473f761cf5c4cbe3eb1b3df", + "demonstrations_readonly/demo_03.h5": "b0f8fb046d954e549da932d25d2ba77cbd71a315a01bc223fd484f9de5237d2c", + "demonstrations_readonly/demo_04.h5": "097ac3e372d626606b62e40730621e7e5b81a80c7f70cef155cd9027e3e4477b", + "demonstrations_readonly/demo_05.h5": "ce60322509eda7c771b5b93e2b7c5d431f20234a7066e69be098f0f3b950dabc", + "demonstrations_readonly/demo_06.h5": "52414bcd34170267651e6af1c50c6abb9093791e5ab261107d63d4d3f87cf87a", + "demonstrations_readonly/demo_07.h5": "272884b09d4a508533ca46d5e29044d712ffd54f4c5dea09b6aec6185ac52529", + "demonstrations_readonly/demo_08.h5": "5954cf439241d30e0324ce4adc6a69b09319b55c6074036604b660544456a4be", + "demonstrations_readonly/demo_09.h5": "b83dab85334483f5200e76dae3c802c73e329296bb8ead2fadde88d938ebad24", + "demonstrations_readonly/demo_10.h5": "324b7237ce4fd47349a0b5880ff07dfd2776ece5543d70b929543b2e5fafaa4b", + "demonstrations_readonly/demo_11.h5": "985f4d9cece251151cce702298a04f462152fafa01207a43be9fc17310b80ea3", + "demonstrations_readonly/demo_12.h5": "c3118a789a394cc51ef00d65d76765ee5af6704599b4845cec120ea77576a6d3", + "demonstrations_readonly/demo_13.h5": "cb9e9f0e991ce17ad7a8319f1f0633c8d56af909e7766cc09e1b5fd94214bb55", + "demonstrations_readonly/demo_14.h5": "d31769acfb20af4b2dc19c183c341a65622d8e91c312de156079cc771e0e70cc", + "demonstrations_readonly/demo_15.h5": "4f1065d63863788a2b343359f5b76d57bcbe6f2636172a494633e673b20909d8", + "demonstrations_readonly/demo_16.h5": "0f1198cd4d1082d57a8bbf734c2142a7c4e0207113f4a4b2390f673bd919fc8e", + "demonstrations_readonly/demo_17.h5": "acbacc7a4bff70ec8f534f10062e39c04f521066a4c3eedf1fcff11fb992924d", + "demonstrations_readonly/demo_18.h5": "e5b0758ac84f5e1755b2650a68924be0a7d262a816ae5694864936e5fa82e65c", + "demonstrations_readonly/demo_19.h5": "fa02a6a7d4184baebe8396296514ee58babd1b752ae000a54015e756a6c3daf0", + "descriptor_indices.json": "f1b21ce1a3f8420721c814208f5c5b6402c1703bdc683672ef0530418c967781", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "feedback_bank.npz": "ce4d36b58c1ccf3b514b2b2572c674865a35f5b9bc0f4c061b7aa48bf4f76371", + "findings.md": "dd3402c6ac70edbebf7f22e0055829bcc652b68012e9814089d9f174513a01fc", + "handoff.md": "e69b151cc99102dc49dd30e9528c6264f95717498fa45c2536a7f7e7df0d82aa", + "model_tool_manifest.yaml": "86a5e63f61b718f20b686d73d4b971aafcd98647baa1e5dfcbeb43aeac31fa52", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "reference_bank.npz": "3e66284223b44dd5a42ce257e8a4d61835ef9e4fcc46523bf34b2f6a1e16232f", + "skills.md": "5ae3ba7f251dccc5cce3756c1d103536e4b7f71a9642b193c368b0b2bfa559da", + "synthetic_check.py": "692a2beaa1b8a7fb5733c7e7442fccb8002e13e4e2322a0f5ff9a22d8d5b2554", + "synthetic_checks.json": "aec8783f018d743129f49696f058b958516bf247c89fd7673fbace68628d3440", + "trajectory_bank.npz": "2a2eea7cd632a087f11850560017071cea05f628fcd716f0d91d568e8d72137b", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "e4030eebfd56b73b6b26b9bcf75b984b6dab3a847a482ef77537d52fde00229c", + "exploration_ledger_hash": "47b5f2ec56b3e2b34f75e5642c1360f6235a459dfdc233724b83333bf3973618", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "bundle_hash": "c7b894d7d60e4dd52844553485609b0f29af5f6c46ddaca37d77bea10b86d477", + "episode": 3, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "53d004521fc16d1010f969ff09d47ddc54d52ca60b15c990860ed7ce2e26c8dd", + "episode": 9, + "independent": true, + "recovery": "durable_rehearsal_request_and_charged_episode; no replay", + "score_source": "interrupted_no_score", + "status": "infrastructure_interrupted", + "success": false, + "valid": false + }, + { + "episode": 17, + "bundle_hash": "b3d3a825f920caf6433a7de15a3901478143706548a20e225e4aef610760d96d", + "independent": true, + "valid": false, + "status": "infrastructure_interrupted", + "success": false, + "score_source": "interrupted_no_score", + "recovery": "durable_rehearsal_request_and_charged_episode; no replay" + }, + { + "episode": 18, + "bundle_hash": "3f4c2d3a51aca9027c588f708fef063a9eda2db5fa4f04d7d1d5170cee187031", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "e4030eebfd56b73b6b26b9bcf75b984b6dab3a847a482ef77537d52fde00229c", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "e4030eebfd56b73b6b26b9bcf75b984b6dab3a847a482ef77537d52fde00229c", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..2813d465c32fd5b78ef7c9378fb4f1c58ed70123 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/handoff.md @@ -0,0 +1,9 @@ +# Offline compiled candidate handoff + +Call reset_episode(), then act(obs) once per legal observation. First call follows the runner-owned hold at native step 1. Returns float32 shape (44,), bounded [-1,1] in contract robot order, or None to stop. Native horizon is 1000. No simulator, reset, network, model-development agent, or worker API is used by the program. + +Runtime files: controller.py, config.json, reference_bank.npz, trajectory_bank.npz, feedback_bank.npz. Runtime dependencies: Python, NumPy and OpenCV. All data paths resolve beside controller.py. The runner supplies verified demo manifest, readonly D20 files and common environment lock; the controller requires no demo mount access. + +Inputs: front_camera/top_camera uint8 RGB, HWC or single-batch HWC, and the four public proprioception paths, each 23 entries. Initial visible contents select blue-first demo 15 or orange-first demo 19. Dense action integration supplies feedforward commands, current qpos supplies arm corrections, RGB/proprioception matching supplies the deviation guard. Hand commands are not corrected. The first 40 steps retain native phase speed; subsequent speed follows the currently pouring cup: 2.0 for blue and 1.5 for orange, switching roles near reference phase 400. Orange post-pour restoration/return uses speed 2.0 after reference phase 275 if first, or 650 if second. End-of-reference stops are not success claims. + +Episode 17 was an independent attempt whose RPC timed out before a result returned; final placement was not established. Episode 18 completed a valid exact predecessor with native success false and visible return-pour spill. Mandatory episodes 19–20 independently test this final slower-blue revision, unchanged between them. The trusted runner selects the submitted exact version by its specified success/count/recency rule at freeze. See findings.md for known failures and limitations, demo_analysis.md for actual D20 inspection, and workspace evidence for exploration/rehearsal audit. No full-task success is claimed in this pre-rehearsal handoff. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b4f24418d0c077d1d765f75902ead3f40f556d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,88 @@ +{ + "stage": "legal_E20_exploration", + "status": "ready_for_mandatory_final_rehearsals", + "neural_finetuning": false, + "pretrained_weight_references": [], + "tools_used": [ + "functions.exec shell/Python", + "local view_image", + "worker_api.API.read_demo", + "worker_api.API next_episode/latest_observation/execute_actions/finish_episode/rehearse/budget_status", + "worker_api.API.score_rehearsal", + "worker_api.API.freeze (planned after exactly 20 slots)" + ], + "versions": { + "python": "3.10.20", + "numpy": "2.2.6", + "opencv": "4.12.0", + "h5py": "3.16.0" + }, + "runtime_dependencies": [ + "Python", + "NumPy", + "OpenCV" + ], + "preparation_dependencies": [ + "h5py", + "worker_api.py", + "Python standard library" + ], + "sources": [ + "/task_contract.json", + "/demo_manifest.json", + "/worker_api.py", + "20 authorized /demonstrations/*.h5 via API.read_demo" + ], + "network": "No network used; audited provider proxy restriction applies", + "reference_bank_provenance": "D20 fixed RGB descriptors, raw proprioception and action labels; feedback bank is non-neural local ridge regression of demonstrated joint increments to arm actions.", + "limitations": [ + "No full-task success established before final rehearsals", + "Heuristic content localization and pose matching", + "No calibrated camera geometry, verified regrasp, spill recovery or completion detector" + ], + "runner_supplied": [ + "verified demo manifest", + "common environment lock" + ], + "source_sha256": { + "/task_contract.json": "38e88a1074ed03e5701d0fc30b8e0ab4c31caae42bf7bfd65f8065c026d82aa1", + "/demo_manifest.json": "5cfda21611d5005933d7f558a9eb93adece19fcf706e55c03eb9bd40d76891bf", + "/worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "model_policy": { + "assistant_weights": "Unmodified; exact provider checkpoint identifier unavailable in workspace", + "tool_weights": "No pretrained tool weights loaded or modified", + "draft_controller": "Exploration; runner chooses exact rehearsed bundle" + }, + "validation": "Historical interface checks; legal API explorations through episode 16; episode 3 completed an independent rehearsal with native success false. Final exact-version results are recorded by the runner.", + "exploration_episodes_at_resume": 9, + "authorized_episode_budget": 20, + "charged_slots_before_final_rehearsals": 16, + "final_rehearsal_slots": [ + 17, + 18, + 19, + 20 + ], + "runtime_files": [ + "controller.py", + "config.json", + "reference_bank.npz", + "trajectory_bank.npz", + "feedback_bank.npz" + ], + "charged_slots_before_this_revision": 17, + "remaining_rehearsal_slots": [ + 19, + 20 + ], + "rehearsal_17": "RPC timeout; no returned exact hash/result; conservative score rejected as non-overwritable. Progress images support both transfers but not final placement.", + "charged_slots_before_final_revision": 18, + "rehearsal_18": { + "bundle_hash": "3f4c2d3a51aca9027c588f708fef063a9eda2db5fa4f04d7d1d5170cee187031", + "independent": true, + "valid": true, + "native_success": false, + "final_step": 409 + } +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-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/DualArmPouringTwoCups-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..b45b7054cb3e771028191e673d40090740f51bf1 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/skills.md @@ -0,0 +1,7 @@ +# Executable motion motifs and limits + +Identify the initially filled cup from legal top RGB, retain both cup handles, lift source over receiver, tilt and restore, reverse roles, and return cups to table. The program implements these motifs using D20 dense actions with continuous phase and current arm-joint feedback. This is not a verified symbolic skill library. + +Use demo 15 for blue-first and demo 19 for orange-first. Keep initial grasp timing at native speed, use cup-specific later compression (orange 1.5, blue 2.0; role switch near reference phase 400; orange post-pour return 2.0 after phase 275 if first or 650 if second), and preserve demonstrated hand commands. Hand-qpos correction was rejected after observed receiver displacement and a dropped cup. + +Inspect actual cup/hand co-motion and particle destination when judging evidence. There is no reliable visual success detector, spill recovery or regrasp behavior. Never treat small matching error or a completed reference as success. Missing/invalid inputs produce legal zero deltas; the runner owns the initial hold and all environment access. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/synthetic_check.py b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/synthetic_check.py new file mode 100644 index 0000000000000000000000000000000000000000..2ad516c943d523ebdd91cba527d181723ed0be4a --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/synthetic_check.py @@ -0,0 +1,19 @@ +"""Interface checks only. No environment, demonstration replay, or rollout.""" +import json,py_compile +from pathlib import Path +import numpy as np +import controller as c +root=Path(__file__).resolve().parent +for p in root.glob('*.py'):py_compile.compile(str(p),doraise=True) +obs={'rgb':{'front_camera':np.zeros((240,320,3),dtype=np.uint8),'top_camera':np.zeros((320,240,3),dtype=np.uint8)},'proprioception':{p:np.zeros(23,dtype=np.float32) for p in c.CONFIG['proprio_paths']},'instruction':c.CONFIG['instruction'],'step_id':1} +c.reset_episode();a=c.act(obs);assert a.shape==(44,) and a.dtype==np.float32 and np.isfinite(a).all() and np.max(np.abs(a))<=1 +obs['rgb']={k:v[None] for k,v in obs['rgb'].items()};c.reset_episode();assert np.array_equal(a,c.act(obs)) +assert c.act(dict(obs,step_id=1000)) is None +bad=dict(obs,proprioception={});assert np.array_equal(c.act(bad),np.zeros(44)) +# Entirely artificial reference bank tests numerical feedback and part ordering. +s=c.Controller();v0=c.visual_features(obs['rgb']);white={k:np.full_like(v,255) for k,v in obs['rgb'].items()};v1=c.visual_features(white) +s.bank={'demo':np.arange(20),'frame':np.zeros(20),'proprio':np.zeros((20,92),np.float32),'visual':np.stack([v0 if i<10 else v1 for i in range(20)]),'scale':np.ones(92),'action':np.stack([np.r_[np.full(22,.2 if i<10 else -.2),np.full(22,.3 if i<10 else -.3)] for i in range(20)])} +a=s.act(obs);s.reset_episode();b=s.act(dict(obs,rgb=white));assert np.all(a[:22]>0) and np.all(a[22:]>0) and np.all(b<0) +s.bank['visual'][:]=v0;s.bank['proprio'][10:]=1;s.reset_episode();a=s.act(obs);s.reset_episode();b=s.act(dict(obs,proprioception={p:np.ones(23) for p in c.CONFIG['proprio_paths']}));assert np.all(a>0) and np.all(b<0) +result={'syntax':'pass','finite_44_native_bounded_action':'pass','HWC_and_1HWC_equivalence':'pass','reset_repeatability':'pass','horizon_stop':'pass','missing_input_zero_deltas':'pass','artificial_RGB_changes_action':'pass','artificial_proprioception_changes_action':'pass','artificial_part_order':'pass','environment_calls':0,'real_task_tests':0,'success_assessment':'not performed'} +(root/'synthetic_checks.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result)) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/synthetic_checks.json b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/synthetic_checks.json new file mode 100644 index 0000000000000000000000000000000000000000..668e4cb66d8c32038b9d1aded931e3524baa4be3 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/synthetic_checks.json @@ -0,0 +1,14 @@ +{ + "syntax": "pass", + "finite_44_native_bounded_action": "pass", + "HWC_and_1HWC_equivalence": "pass", + "reset_repeatability": "pass", + "horizon_stop": "pass", + "missing_input_zero_deltas": "pass", + "artificial_RGB_changes_action": "pass", + "artificial_proprioception_changes_action": "pass", + "artificial_part_order": "pass", + "environment_calls": 0, + "real_task_tests": 0, + "success_assessment": "not performed" +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPouringTwoCups-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 65) & (b > r * 1.6 + 15) & (b > g * 1.4 + 15), + (r > 65) & (r > b * 1.5 + 15) & (r > g * 1.4 + 15)] + blue_counts.append(int(masks[0].sum())) + # Spatial masks preserve visible box shape and target location. Missing + # red pixels remain a visibility feature; target may be occluded. + for mask in masks: + small = cv2.resize(mask.astype(np.float32), (16, 16), interpolation=cv2.INTER_AREA) + parts.append(small.ravel() * (8.0 / 16.0)) + yy, xx = np.nonzero(mask) + if len(xx) >= 8: + x, y = xx / im.shape[1], yy / im.shape[0] + geom = [x.mean(), y.mean(), x.std(), y.std(), + np.mean((x-x.mean())*(y-y.mean())), len(xx)/mask.size, 1.0] + else: + geom = [0.] * 7 + parts.append(np.asarray(geom, np.float32) * np.array([12,12,6,6,20,10,1],np.float32)) + small_rgb = cv2.resize(im, (16,16), interpolation=cv2.INTER_AREA).astype(np.float32)/255 + parts.append(small_rgb.ravel() * (1.0 / np.sqrt(768))) + for kind, scale in [('qpos', .20), ('qvel', 1.0)]: + q = [] + for robot in range(2): + v = np.asarray(obs['proprioception'][f'agent/panda-{robot}/{kind}'],dtype=np.float32).reshape(-1) + if v.size != 9 or not np.isfinite(v).all(): + raise ValueError('Expected nine finite proprioceptive values per robot') + q.extend(v[:7]) + parts.append(np.array(q,np.float32)/(scale*np.sqrt(14))) + f = np.concatenate(parts).astype(np.float32) + if not np.isfinite(f).all(): + raise ValueError('Nonfinite features') + return f, min(blue_counts) >= 8 + + +def _load(): + global _BANK + if _BANK is None: + with np.load(Path(__file__).with_name('demo_bank.npz'), allow_pickle=False) as d: + _BANK = {k: d[k] for k in d.files} + return _BANK + + +def box_pose(im): + r,g,b=[im[...,i].astype(float) for i in range(3)] + mask=((b>65)&(b>1.6*r+15)&(b>1.4*g+15)).astype(np.uint8) + contours,_=cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) + if not contours:return None + contour=max(contours,key=cv2.contourArea) + (x,y),(w,h),angle=cv2.minAreaRect(contour) + pts=cv2.boxPoints(((x,y),(w,h),angle));edges=np.roll(pts,-1,axis=0)-pts;v=edges[np.argmax(np.linalg.norm(edges,axis=1))] + if v[1]<0:v=-v + tilt=np.arctan2(v[0],v[1]) + return dict(x=float(x/im.shape[1]),y=float(y/im.shape[0]),tilt=float(tilt),area=float(cv2.contourArea(contour)/mask.size)) + + +def act(obs): + global _last_action, last_diagnostics, _unsupported, _target_y + # Native horizon includes the runner-owned reset hold. No extra hold here. + if int(obs.get('step_id', 1)) >= 700: + last_diagnostics = {'status': 'native_horizon'} + return None + try: + f, visible = features(obs) + except (KeyError, ValueError, TypeError): + last_diagnostics = {'status': 'invalid_observation'} + return None + if _last_action is None: + im=np.asarray(obs['rgb']['top_camera']).squeeze().astype(float) + r,g,b=im[...,0],im[...,1],im[...,2] + yy,xx=np.nonzero((r>65)&(r>1.5*b+15)&(r>1.4*g+15)) + if len(yy)>100: _target_y=float((yy.min()+yy.max())/(2*im.shape[0])) + bank = _load() + distance = np.sum((bank['features']-f)**2,axis=1) + idx = np.array([np.where(bank['demo_index']==di)[0][np.argmin(distance[bank['demo_index']==di])] for di in range(20)]) + idx = idx[np.argsort(distance[idx])][:5] + best = idx[0] + # Reject gross extrapolation. This threshold is heuristic, not validated. + if not visible or distance[best] > 16.0: + action = np.zeros(14,np.float32); action[[6,13]] = -1 + last_diagnostics = {'status': 'unsupported_hold', 'squared_distance': float(distance[best])} + else: + # Avoid averaging opposing contact/repositioning actions. Both robot + # commands always come from the same paired observation/action record. + compatible = np.max(np.abs(bank['actions'][idx]-bank['actions'][best]),axis=1) <= .12 + idx = idx[compatible] + weights = np.exp(-(distance[idx]-distance[best])/.35) + action = np.average(bank['actions'][idx], axis=0, weights=weights) + action = np.clip(action,-1,1).astype(np.float32) + last_diagnostics = {'status': 'lookup', 'squared_distance': float(distance[best]), + 'reference_demo': int(bank['demo_index'][best]), + 'reference_frame': int(bank['frame_index'][best])} + pose = box_pose(np.asarray(obs['rgb']['top_camera']).squeeze()) + if (last_diagnostics['status']=='lookup' and pose is not None + and .54 < pose['x'] < .83 and pose['area'] > .045 + and abs(pose['tilt']) < .65 + and min(action[0], action[7]) > .035 + and min(action[2], action[9]) > -.05): + tilt = pose['tilt'] + correction = np.clip(.18 * np.sign(tilt)*max(abs(tilt)-.06,0),-.06,.06) + action[0] = np.clip(action[0] + correction, 0, .15) + action[7] = np.clip(action[7] - correction, 0, .15) + last_diagnostics['yaw_correction'] = float(correction) + last_diagnostics['box_tilt'] = float(tilt) + lateral=float(np.clip(.4*(pose['y']-_target_y),-.035,.035)) + action[1] = np.clip(action[1]+lateral,-.15,.15) + action[8] = np.clip(action[8]+lateral,-.15,.15) + last_diagnostics['lateral_correction'] = lateral + _unsupported = _unsupported+1 if last_diagnostics['status']=='unsupported_hold' else 0 + if _unsupported >= 40: + last_diagnostics['status']='unsupported_abort' + return None + _last_action = action.copy() + return action diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..f3183d89f70992b83e049fe29a92276a7c502619 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/demo_manifest.json @@ -0,0 +1,2168 @@ +{ + "task_id": "DualArmPushBox-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": 571, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 571, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 571, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 572, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 572, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 572, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 572, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 572, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 572, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 572, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 572, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 572, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6204f2906b7d915f0d5187a4fb81df7bde764cd11a72bdfb92d3330915c41917", + "source_sha256": "937c4c2fb1429b1df8af819754a2cba13dc8a1218b5f3eb4a157206dc4626009", + "view_sha256": "bea6838c357dce7baf8333fd3e08e455dac1ec5a7bcbd742fbfab59b1f41ef48" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 500, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 500, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 500, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 501, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 501, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 501, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 501, + 9 + ], + "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_0/rgb", + "shape": [ + 501, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 501, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 501, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ce0cf6e6863c5ba0f2de18165c01f273f6b28924bebd6a0ae08a2efddfefbaf4", + "source_sha256": "f5a86573476be8a8c43b032c84f1e64d5927b48a2c1aff20ca1e3f33841a4101", + "view_sha256": "290390b07a1a2e42e7cb9a5362b34671a13c3cee90441045f730aada63a4a76f" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 249, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 249, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 249, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 250, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 250, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 250, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 250, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 250, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 250, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 250, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 250, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 250, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ce0db6c0e4a8f203b68b96582eb3d9d2c83a3a91696182219ae64f0dcd15c997", + "source_sha256": "d84a407046f7c76d7513bcd0a56aa300647e26db024e9b52bfbe07ea627ad87b", + "view_sha256": "7df2f576b4790390153ed47aed94c95936d75d41be19f56b501b29695542b4e5" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 503, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 503, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 503, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 504, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 504, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 504, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 504, + 9 + ], + "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_0/rgb", + "shape": [ + 504, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 504, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 504, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "03d172cbca875dabecb2fd49709f3243ba46c88fa0ac291d15be7069b94f0b6f", + "source_sha256": "284fc219c8c0d26a63900a86a5018ff26089c939ae6e8cc05ff4e42f9dfb2876", + "view_sha256": "5c567fee6d397bb248bf84d97bdb53a7b65a9d7861ac8d8904b96ad027b362b4" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 551, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 551, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 551, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 552, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 552, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 552, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 552, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 552, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 552, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 552, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 552, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 552, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "94632d3b2f9699898f15b4cb41044455b5092b6742e2233e9d53e70e93933c94", + "source_sha256": "847ab02c4f18a5005e31bfa0744d4a3202f61171226ffce110b4a458aba609d2", + "view_sha256": "ced781bd37d5269514376e05a0a9ad5d65ec98a8310e2d1718b79bfcdbe8b833" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 307, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 307, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 307, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 308, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 308, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 308, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/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_0/rgb", + "shape": [ + 308, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 308, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 308, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "5a32b7bd67b5090dcdc386f0682ec36f20dca65100c75f647d6200f518e2e15b", + "source_sha256": "9c329f0734d848a5815c11275cecbc7c717aab5e39fcfc354be1609deed066c9", + "view_sha256": "f40743bb33ee30ae38895a4108297f87aa0ef6e8abe5ef618f19c5c0db55a654" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 275, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 275, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 275, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 276, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 276, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 276, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 276, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 276, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 276, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 276, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 276, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 276, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "bebf73ccd708ed013a07423861f0570aa6184a75f34961815d12c7bb77840bf6", + "source_sha256": "c57833428e44d1d8a388cf0daabdf6b81ff910d5375fb61e33734e95c9b55f9f", + "view_sha256": "2d004baebe5d426cf8dfc09a05a978790c4e7ecc0e2407d916a1bbd5e3f582db" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 288, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 288, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 288, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 289, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 289, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 289, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 289, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 289, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 289, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 289, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 289, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 289, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "a6c4dba1d431b702a7f4c370ab45c5277807aebc560a4e176f76546c61fe5e79", + "source_sha256": "2c272ada129bcef90b4f0b9efb14e3cbb6602ecebe870dcff23d7d451941ad83", + "view_sha256": "8188792f3e0346060f1e3856c6093aa3d6c103a28bc7042d0b5ea2d3199f9c0c" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 545, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 545, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 545, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 546, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 546, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 546, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 546, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 546, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 546, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 546, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 546, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 546, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "552f675e90a97b4d6d731cb6f31b20dc1c57609de79e3ea016e4a70d14079825", + "source_sha256": "40cce764bfa3de3679285660eaa0bade4868b4eae2ffddf91122694092be7b00", + "view_sha256": "2c04e1f563453ef2b8a27f654315d52f84de12f701723a66b108c08b1ba1aa42" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 296, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 296, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 296, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 297, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 297, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 297, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 297, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 297, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 297, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 297, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 297, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 297, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "aba2482de45b9b288082dfa404a479bd8b3248a237099390897c7c0b6ebb5cd2", + "source_sha256": "4c8563bd684e5f2831eee0ce8f10a520404d72b0bb3d34df81bb3e6a8f8c0255", + "view_sha256": "e5560d01e12e354ab977fdd34b403a7f5d7358e76d976b670ffc60bb9abbe7c0" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 267, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 267, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 267, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 268, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 268, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 268, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 268, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 268, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 268, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 268, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 268, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 268, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e6574f6634c4e5b17909dea9b052d7e291909c77fef7ee57905ffdfc5ae1496a", + "source_sha256": "3acb74eba325342a29fd58b0d710ed14e207779819f62fd8895f291086c755c8", + "view_sha256": "9073bc2edb928dfaab2a976865109112e6e06a08cd1f541b60a757cb93cb94fe" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 293, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 293, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 293, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 294, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 294, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 294, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 294, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 294, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 294, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 294, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 294, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 294, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "932d46aac7b4e77363c386f5e5d4b0cfd91081e1b1d31d330e56d8018b82f89b", + "source_sha256": "7e37b2cfc81408facfbec77bd656db166b1228324180538b88dbbe0a4a96d9ac", + "view_sha256": "29e0c61f7776fd318551aa8846741a168bd8bb37dfd6a410fed8d39cf8e8b710" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 234, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 234, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 234, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 235, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 235, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 235, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 235, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 235, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 235, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 235, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 235, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 235, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "304b2bb8d8c5c37621eb208edc042df5226c34ce7f0e4fd9fc0ad840052a6c93", + "source_sha256": "f9582bf61931ad0f9f83460075384e4665d4a9303d0f323b0c1b4ff9b905c62c", + "view_sha256": "1fda3fecbfb07e32713682c0457d69b917046abb2217389abc604f54dab1d18f" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 511, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 511, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 511, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 512, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 512, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 512, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/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_0/rgb", + "shape": [ + 512, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 512, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 512, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9463065074ea9098b6312743732e0d4338f4c1672c0249196537f7df827f0192", + "source_sha256": "d16e6984d1b7adb9147e7823013f6a3ad77675d2f07c29a2156b60f80a3852ea", + "view_sha256": "452a3cfdc2b5464486b7736e5ced7dcdf13c5d41486448ede7ca885fdeabc95e" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 265, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 265, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 265, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 266, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 266, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 266, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 266, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 266, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 266, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 266, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 266, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 266, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "b374cb30f8e4787ac3b1cf43182f3ee591d56e7df9976c84d128bddb7920683d", + "source_sha256": "d43df6ae0381923bf83a31299f2e3df886095ebb83bc872b2e456238d70f667a", + "view_sha256": "0fa95e6b6a33ddd38c5e7db942c8bbf468cb2ecde96808eb8b48cca4903a20e1" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 242, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 242, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 242, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 243, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 243, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 243, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 243, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 243, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 243, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 243, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 243, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 243, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7aac587599757dfe13e445454a7db091f90e0197bd04fcc99b26e33ef24fd3db", + "source_sha256": "b4a6da5f5ca801fc80d1c8e7555986df307a7322cc27648b4c0acdd5f45a0ffb", + "view_sha256": "3a555d1eca003c5f10b3586569cd3f289ca5f12ee1d532dc5fef0f67bba75aca" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 267, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 267, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 267, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 268, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 268, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 268, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 268, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 268, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 268, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 268, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 268, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 268, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "5b0d5fbfc7a994039908669dbd6b8aa727e5abcc65ee616568f58881d2c7aead", + "source_sha256": "bda8df872354825768fddd5939a96527bbe3eb85b28bb594f50a2881ed6267f5", + "view_sha256": "8ad83d5509fdcc0b3226e2019fdedfca4124a492faf59427a00d4a5f6c8588c1" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 604, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 604, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 604, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 605, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 605, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 605, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 605, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 605, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 605, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 605, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 605, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 605, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2f6b1b266579abae4503d6e55351afb472bfdafbcd77a467f054fc30631c929f", + "source_sha256": "a75e5cfcc18692850e18202f78059a4719f84a29a20726350dd0bbfe73bbd6d8", + "view_sha256": "db6d99f17aede22bb3076ae457a3f9a6d36e2c1cb5b8c4a22177cf5a17d0010d" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 232, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 232, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 232, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 233, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 233, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 233, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 233, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 233, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 233, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 233, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 233, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 233, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "1f6e50f0ba561723b4881622dd9016e4438a68be102c6a0d0e052468023fccfa", + "source_sha256": "74985998535a98f4fab4b865ed7be09fff3f57f570dc300365ee2212080927e3", + "view_sha256": "0adedd84e12a8335649f385df45536c92228c50cc7d9d4fef6f03c783d6b6ade" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 268, + "fields": [ + { + "path": "actions/panda-0", + "shape": [ + 268, + 7 + ], + "dtype": "float32" + }, + { + "path": "actions/panda-1", + "shape": [ + 268, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qpos", + "shape": [ + 269, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-0/qvel", + "shape": [ + 269, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qpos", + "shape": [ + 269, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/panda-1/qvel", + "shape": [ + 269, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 269, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 269, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_0/rgb", + "shape": [ + 269, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera_1/rgb", + "shape": [ + 269, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 269, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0670e18b1b2156482304bfd1385137b69b43e58f4dc7d314f4a5dbf2d9ec4401", + "source_sha256": "aaa4da34a2a009b5f76558e13d4eeb4919b524e429c7ed04343142c57fd43bcf", + "view_sha256": "ed5cb224eeb2759b28255f2f135c30ee8d51ef3dd6122fb4d00ef859032dbcd0" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-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/DualArmPushBox-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..d437fdb2c112ba57f728e62a1ec7e7fbea66f396 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/findings.md @@ -0,0 +1,15 @@ +# D20 and E20 findings + +All 20 authorized D20 trajectories were analyzed; see the preserved task-local demo_analysis.md and evidence. The fixed bank has 7,268 action-associated observations. Labels use zero arm rotations, closed grippers, and translation magnitudes at most .1 normalized. No neural fitting, another task's data, hidden state, simulator construction, or external solution was used. + +Episode 1, baseline lookup: failure through step 400. Approach matched closely; contact became asymmetric, box rotated, and squared distance crossed the rejection threshold 9, producing a stalled hold. This exposed a pose/contact sensitivity and absent general recovery. + +Episode 2, distinct-demo blend: native success at step 254. Episode 3, independent rehearsal of that version: valid and native success at step 242, bundle 753e66a9ff7a051f92e881e834aff9567575c2e5a9f2771fa45b280a929b691c. Both arms maintained useful pushing contact. This is limited evidence, not a general success claim. + +Episode 4 directional probe at steps 191–210: panda-0 dx .1, panda-1 dx 0, other commands retained from the lookup. Box contour tilt changed from -.141897 to -.261326 radians. The 20-step RPC response exceeded packet size, but budget/latest observation confirmed all 20 steps executed; it was not retried. Commands and before/after observations are preserved. Subsequent interactive actions use single-step responses. + +Current revision adds bounded visual tilt feedback during pushing; its recovery performance is being tested. Localization uses RGB masks and rectangle geometry, not calibrated world coordinates. Rectangles become unreliable under heavy occlusion/clipping, so correction has visibility and position gates. Target is cropped in top view; front view is retained for audit. Live image resolution is twice the demo resolution; features use normalized coordinates. + +Native success is available in step returns for these tests. If absent in a rehearsal, the preregistered rule requires unambiguous visible placement at the public target; ambiguous overlap/occlusion is false. No official success is inferred from demonstration endings. + +Revision v3: during the same gated push phase, add a shared root-y correction .4 times image-plane box-minus-initial-target center-y, capped at .035 normalized. Its direction is suggested by demonstration motion and is under test. The episode-4 yaw-only continuation reduced tilt but retained lateral error and became unsupported. Forty consecutive unsupported calls now abort instead of holding indefinitely; this is failure handling, not success. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..f7adb0f4840837687664df3b558e07e8c50a4d90 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/freeze_manifest.json @@ -0,0 +1,193 @@ +{ + "files": { + "__pycache__/compile_bank.cpython-310.pyc": "6c14dfb53df0cfc14531cff80c395d5ba038a7876b17cbbf7c2865bf4fffe6d4", + "__pycache__/controller.cpython-310.pyc": "29f017efebb002813165387cad13a7112b0a5028105ddd5d1f3c4ab820ece95d", + "__pycache__/synthetic_checks.cpython-310.pyc": "340d22e357420b92713120b2a9dd117fd7fbf8b20365a7e2353e5c45db91fc1c", + "bank_provenance.json": "80cd2e9ac14965746fdda5b4023a56b4742da8ed0b74fdabbe2b47e0905de3ee", + "check_results.json": "49bbf364c78d89298ceafd347a2fa98eb117298c55286a966bdde91aa20228ae", + "compile_bank.py": "cb09777f3ccd564de185033299d3c24d495d3b162c578a56607fcb3b4d675b82", + "controller.py": "098c67fccd45c664cc769d19786405e4f4a109258714d16acea9bb9b62993a88", + "demo_bank.npz": "80f84f06018828a0deedbb93eed64b15408ae562be55e87574c82e773a21bd30", + "demo_manifest.json": "6e43f1f67a6f9d112960a723e859cc2a506d753f4a507a469c0fb3f0776ebcfe", + "demonstrations_readonly/demo_00.h5": "bea6838c357dce7baf8333fd3e08e455dac1ec5a7bcbd742fbfab59b1f41ef48", + "demonstrations_readonly/demo_01.h5": "290390b07a1a2e42e7cb9a5362b34671a13c3cee90441045f730aada63a4a76f", + "demonstrations_readonly/demo_02.h5": "7df2f576b4790390153ed47aed94c95936d75d41be19f56b501b29695542b4e5", + "demonstrations_readonly/demo_03.h5": "5c567fee6d397bb248bf84d97bdb53a7b65a9d7861ac8d8904b96ad027b362b4", + "demonstrations_readonly/demo_04.h5": "ced781bd37d5269514376e05a0a9ad5d65ec98a8310e2d1718b79bfcdbe8b833", + "demonstrations_readonly/demo_05.h5": "f40743bb33ee30ae38895a4108297f87aa0ef6e8abe5ef618f19c5c0db55a654", + "demonstrations_readonly/demo_06.h5": "2d004baebe5d426cf8dfc09a05a978790c4e7ecc0e2407d916a1bbd5e3f582db", + "demonstrations_readonly/demo_07.h5": "8188792f3e0346060f1e3856c6093aa3d6c103a28bc7042d0b5ea2d3199f9c0c", + "demonstrations_readonly/demo_08.h5": "2c04e1f563453ef2b8a27f654315d52f84de12f701723a66b108c08b1ba1aa42", + "demonstrations_readonly/demo_09.h5": "e5560d01e12e354ab977fdd34b403a7f5d7358e76d976b670ffc60bb9abbe7c0", + "demonstrations_readonly/demo_10.h5": "9073bc2edb928dfaab2a976865109112e6e06a08cd1f541b60a757cb93cb94fe", + "demonstrations_readonly/demo_11.h5": "29e0c61f7776fd318551aa8846741a168bd8bb37dfd6a410fed8d39cf8e8b710", + "demonstrations_readonly/demo_12.h5": "1fda3fecbfb07e32713682c0457d69b917046abb2217389abc604f54dab1d18f", + "demonstrations_readonly/demo_13.h5": "452a3cfdc2b5464486b7736e5ced7dcdf13c5d41486448ede7ca885fdeabc95e", + "demonstrations_readonly/demo_14.h5": "0fa95e6b6a33ddd38c5e7db942c8bbf468cb2ecde96808eb8b48cca4903a20e1", + "demonstrations_readonly/demo_15.h5": "3a555d1eca003c5f10b3586569cd3f289ca5f12ee1d532dc5fef0f67bba75aca", + "demonstrations_readonly/demo_16.h5": "8ad83d5509fdcc0b3226e2019fdedfca4124a492faf59427a00d4a5f6c8588c1", + "demonstrations_readonly/demo_17.h5": "db6d99f17aede22bb3076ae457a3f9a6d36e2c1cb5b8c4a22177cf5a17d0010d", + "demonstrations_readonly/demo_18.h5": "0adedd84e12a8335649f385df45536c92228c50cc7d9d4fef6f03c783d6b6ade", + "demonstrations_readonly/demo_19.h5": "ed5cb224eeb2759b28255f2f135c30ee8d51ef3dd6122fb4d00ef859032dbcd0", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "findings.md": "5d34f7dd1cfed710228bbbc0383a3dd5cb30949892a643ff76be992aa15a05e8", + "handoff.md": "8edb8f83bc6aab9b899c51e1400833c4686e108dbff5eff04a8f2e7500f44414", + "model_tool_manifest.yaml": "ca8ca7522ba6d023bb6784c0ba5daf934d8b64823a52b7666211f64c6a4f68ce", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "skills.md": "6923d228141edbb22d9d2d5f9b34d3f82724d381cb9c5289bdd891240312c2f3", + "synthetic_checks.py": "4c2ddf02b6241d911adb4ce7df1817255f8602b2a30f3f084b915225d345a275", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "70b2a681574d8f7d0a08ccb7e5002b7ad8748f5bbe745d21fc5afb5b3b6f9990", + "exploration_ledger_hash": "ec8e46c000d3c6aab2e8e5d1516c9f2bd7275826ef3d8cfd29e5c22b46e69062", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "bundle_hash": "753e66a9ff7a051f92e881e834aff9567575c2e5a9f2771fa45b280a929b691c", + "episode": 3, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "70b2a681574d8f7d0a08ccb7e5002b7ad8748f5bbe745d21fc5afb5b3b6f9990", + "episode": 5, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 6, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 7, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 8, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 9, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 10, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 11, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 12, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 13, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 14, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 15, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "689e130310da29868a2202e122611c2fe04801d97574db1326292456cdd333bc", + "episode": 16, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "f2f6c3d632d2b9370c2c3a51c040460b9c0ef0f1046becb3d3c4ea186a8fa2a0", + "episode": 17, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "episode": 19, + "bundle_hash": "f2f6c3d632d2b9370c2c3a51c040460b9c0ef0f1046becb3d3c4ea186a8fa2a0", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "f2f6c3d632d2b9370c2c3a51c040460b9c0ef0f1046becb3d3c4ea186a8fa2a0", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..e93d2752099037bd6f0cad64b6f3659bab245d70 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/handoff.md @@ -0,0 +1,11 @@ +# Agent-D20-E20-Compiled handoff + +Task: push the rectangular box to the target with two Panda arms. Entry points are controller.py: reset_episode() and act(obs). Runtime dependencies are Python, NumPy and OpenCV; demo_bank.npz must remain adjacent. No network, language model, training, demonstration reads, or development agent is required at runtime. + +This revision uses distinct-demo observation lookup and bounded visual tilt feedback. It consumes legal RGB and joint observations only. The 14-vector is panda-0 then panda-1, each translation/rotation/gripper. Actions are bounded; rotations remain zero and grippers closed. Initial hold is runner-owned and consumes native step 1. The controller stops at step_id 700 if present; runner also enforces the horizon. Native successful termination is authoritative. + +Baseline and exploratory versions, images, actions, probe results, exact rehearsal hashes, and budget evidence are preserved in the task workspace's evidence directory. Candidate/findings.md describes evidence available when this revision was packaged. Later rehearsal results are stored outside the bundle to keep repeated exact hashes stable. + +Limitations: no calibrated 3-D pose or explicit contact sensor; contour orientation can fail under occlusion; supported lookup can select imperfect contact strategies; unsupported hold is not a general recovery plan. The differential correction is gated and capped. Rehearsal validity and success must be taken from API results, not this document. Freeze selects among independently rehearsed runnable exact bundles after all 20 slots. + +Revision v3: during the same gated push phase, add a shared root-y correction .4 times image-plane box-minus-initial-target center-y, capped at .035 normalized. Its direction is suggested by demonstration motion and is under test. The episode-4 yaw-only continuation reduced tilt but retained lateral error and became unsupported. Forty consecutive unsupported calls now abort instead of holding indefinitely; this is failure handling, not success. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9ec12005521c8ce9ef3d3ad6fcb295a09199bfd3 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,140 @@ +{ + "schema_version": 1, + "worker": "Agent-D20-E20-Compiled", + "task_id": "DualArmPushBox-v1", + "stage": "E20_API_exploration", + "status": "candidate_for_independent_rehearsal", + "execution": { + "environment_calls": "Trusted API only; see exploration ledger", + "exploration_episodes": "Actual budget maintained by API; documented in evidence/", + "rollouts": "Interactive exploration and independent API.rehearse", + "simulator_created_or_imported": false, + "task_specific_expert_invoked": false, + "hidden_state_used": false, + "internet_requests": 0, + "neural_training": false, + "pretrained_weights_modified": false + }, + "authoring_model": { + "identity": "Provider-supplied coding assistant; exact model build and checkpoint reference unavailable in task artifacts", + "weights": "Unchanged; no model or tool weight updates", + "local_checkpoint_loaded": false + }, + "runtime_model": { + "type": "Fixed D20 lookup, distinct-demo blend, bounded visual tilt/lateral correction, prolonged-unsupported abort", + "pretrained_weight_references": [], + "neural_models": [], + "artifact": "demo_bank.npz", + "artifact_sha256": "80f84f06018828a0deedbb93eed64b15408ae562be55e87574c82e773a21bd30", + "provenance": "Compiled exclusively from every action-associated legal observation of all 20 authorized demos; deterministic feature extraction, no fitting", + "rows": 7268, + "feature_width": 2616, + "runtime_dependencies": { + "python": "3.10.20", + "numpy": "2.2.6", + "opencv": "4.12.0" + }, + "revision": "v3" + }, + "tools_used": [ + { + "tool": "functions.exec / exec_command", + "purpose": "Local shell and Python file operations, compilation, analysis and synthetic checks" + }, + { + "tool": "functions.exec / view_image", + "purpose": "Displayed four contact sheets containing 160 camera images, 80 distinct observation frames" + }, + { + "tool": "functions.exec / write_stdin", + "purpose": "Collected output from offline compilation process" + }, + { + "tool": "worker_api.API.read_demo", + "source": "/worker_api.py", + "source_sha256": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e", + "purpose": "Authorized local RGB, proprioception and action reads only; no RPC calls" + }, + { + "tool": "worker_api.API", + "purpose": "Budget, legal episode lifecycle/actions/observations, independent rehearsal and freeze only" + } + ], + "software": { + "python": { + "version": "3.10.20", + "usage": "analysis, compilation, runtime, checks" + }, + "numpy": { + "version": "2.2.6", + "usage": "arrays, fixed features, lookup and statistics" + }, + "opencv": { + "version": "4.12.0", + "usage": "resizing, mask geometry, contact sheet annotations and image encoding" + }, + "h5py": { + "version": "3.16.0", + "usage": "sanitized HDF5 reads through API.read_demo" + }, + "scipy": { + "version": "1.15.3", + "usage": "installed, not imported/used; version queried via package metadata" + }, + "torch": { + "version": "2.10.0", + "usage": "installed, not imported/used; version queried via package metadata" + } + }, + "sources": { + "contract": { + "path": "/task_contract.json", + "sha256": "747967ced5a5b6a38cd472e84e74ea7d7a5c95fca4617b9667c90446521a5ebc" + }, + "demo_manifest": { + "path": "/demo_manifest.json", + "sha256": "ffe3e6bf36c831f09abbb4b2c8bf52cdaf1c0c2b1a4b523b618c0cfcaaa92e19", + "status": "released", + "lineage_status": "pinned_comparator", + "note": "Runner supplies verified manifest and common environment lock separately; no replacement lock generated" + }, + "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" + ], + "visual_inspection_ledger": "../evidence/inspection.json", + "numeric_analysis": "../evidence/action_statistics.json", + "machine_processed_frames": "For each authorized demo: every action-associated frame 0 through N-1, front_camera and top_camera; see bank_provenance.json", + "demonstration_content": "Only sanctioned RGB, proprioception, expert action labels" + }, + "checks": { + "syntax": "passed", + "synthetic_input": "passed", + "results": "check_results.json", + "real_task_testing": "Through trusted API only, starting episode 1" + }, + "limitations": [ + "No 3-D calibration or explicit contact sensing", + "Mask/contour pose can be occluded or clipped", + "Bounded tilt correction is not general recovery", + "Performance must be read from exact independent rehearsal results" + ] +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-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/DualArmPushBox-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..18c45908a983883e786364a3a576c9d676a6b3cf --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/skills.md @@ -0,0 +1,11 @@ +# Task-local controller behavior + +The controller reads only current top/front RGB and both robots' qpos/qvel. It uses hand-written color masks, normalized spatial features, and the fixed 7,268-row action bank compiled from all 20 authorized task demonstrations. No neural weights are used or fitted. + +Nearest matching is performed separately in each demo. Up to five compatible paired action labels are blended, preserving the two-arm pairing. This supports approach, lowering, two-arm pushing, and demonstrated asymmetric repositioning. Grippers stay closed; this is pushing, not grasp-and-lift manipulation. + +A blue-contour minimum-area rectangle supplies an image-plane tilt estimate. A capped differential forward-speed correction is applied only during compatible forward pushing, with adequate visible contour area, modest tilt, and before image-edge clipping. A live probe in episode 4 verified that greater panda-0 forward speed decreases tilt. This is limited corrective feedback, not a general recovery guarantee. + +The runner owns the initial hold. Native 700-step horizon and action ordering/units are unchanged. Unsupported observations hold with closed grippers; malformed observations abort. Native success terminates successful episodes. The controller does not invent a success flag. + +Revision v3: during the same gated push phase, add a shared root-y correction .4 times image-plane box-minus-initial-target center-y, capped at .035 normalized. Its direction is suggested by demonstration motion and is under test. The episode-4 yaw-only continuation reduced tilt but retained lateral error and became unsupported. Forty consecutive unsupported calls now abort instead of holding indefinitely; this is failure handling, not success. diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/synthetic_checks.py b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/synthetic_checks.py new file mode 100644 index 0000000000000000000000000000000000000000..ae3702434c8f3663285424f10b8d3ddff39b1fb1 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/synthetic_checks.py @@ -0,0 +1,48 @@ +"""Interface and synthetic-only checks; never opens an environment.""" +import json +import numpy as np +import controller as c + +def observation(offset=0, batched=False): + rgb={} + for camera,shape in [('top_camera',(320,240,3)),('front_camera',(240,320,3))]: + im=np.full(shape,100,np.uint8) + im[70:130,65+offset:95+offset]=[0,0,220] + im[150:180,130:170]=[220,0,0] + rgb[camera]=im[None] if batched else im + p={} + for r in range(2): + p[f'agent/panda-{r}/qpos']=np.array([0,-.7854,0,-2.3562,0,1.5708,.7854,.04,.04],np.float32) + p[f'agent/panda-{r}/qvel']=np.zeros(9,np.float32) + return {'rgb':rgb,'proprioception':p,'instruction':'Push the box to the target.','step_id':1} + +bank=c._load(); assert bank['features'].shape[0]==7268 +assert bank['actions'].shape==(7268,14) +assert np.isfinite(bank['features']).all() and np.isfinite(bank['actions']).all() +assert (abs(bank['actions'])<=1).all() +a=observation();b=observation(40) +f0,_=c.features(a);f1,_=c.features(b) +assert not np.allclose(f0,f1) +assert np.allclose(f0,c.features(observation(batched=True))[0]) +b['proprioception']['agent/panda-0/qpos'][0]=.5 +assert not np.allclose(f1,c.features(b)[0]) +f1,_=c.features(b) +y0=np.zeros(14,np.float32);y0[[6,13]]=-1;y0[0]=.1;y0[7]=-.1 +y1=y0.copy();y1[0]=-.1;y1[7]=.1 +c._BANK={'features':np.stack([f0]*8+[f1]*8),'actions':np.stack([y0]*8+[y1]*8), + 'demo_index':np.zeros(16,np.int16),'frame_index':np.arange(16)} +c.reset_episode();a0=c.act(a);a1=c.act(b) +assert a0.shape==(14,) and a0.dtype==np.float32 and np.isfinite(a0).all() +assert np.allclose(a0,y0) and np.allclose(a1,y1) +assert c.last_diagnostics['status']=='lookup' +a['step_id']=699;assert c.act(a) is not None +a['step_id']=700;assert c.act(a) is None +a=observation();a['rgb']={k:np.zeros_like(v) for k,v in a['rgb'].items()} +hold=c.act(a);assert np.allclose(hold[[0,1,2,3,4,5,7,8,9,10,11,12]],0) +assert c.last_diagnostics['status']=='unsupported_hold' +a=observation();a['proprioception']['agent/panda-0/qpos'][0]=np.nan;assert c.act(a) is None +c.reset_episode();assert c.last_diagnostics['status']=='reset' +c._BANK=bank +# Actual compiled bank, fabricated input only: check shape and native bounds. +z=c.act(observation());assert z is not None and z.shape==(14,) and np.isfinite(z).all() and (abs(z)<=1).all() +print(json.dumps({'syntax':'pass (separate py_compile)','synthetic_checks':'pass','compiled_rows':len(bank['actions']),'environment_calls':0,'rollouts':0,'performance_validated':False},indent=2)) diff --git a/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/DualArmPushBox-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)&(r>1.8*g)&(r>1.5*b),(b>100)&(b>1.8*g)&(b>1.5*r)]: + y,x=np.nonzero(mask) + if len(x)<8:raise ValueError('blocks obscured') + slope=np.cov(x,y)[0,1]/max(np.var(x),1);right=np.percentile(x,95) + v.append([right,y.mean()+slope*(right-x.mean()),slope]) + return np.r_[np.mean(v,axis=0),1.] +def reset_episode(): + global _coef,_phase,_tick,_target,_count,_search_origin + if _coef is None:_coef=np.load(_root/'geometry_fk.npz')['coef'] + _phase='approach';_tick=0;_count=0;_target=None;_search_origin=None + +def act(obs): + global _phase,_tick,_target,_count,_search_origin + if _coef is None:reset_episode() + if int(obs.get('step_id',1))>=300:return None + _count+=1;a=np.zeros(22,np.float32) + q=np.asarray(obs['proprioception']['agent/qpos']).reshape(-1);p=_kin.fk(q) + if _phase=='approach': + try: + goal=locate(obs['rgb']['top_camera'])@_coef + if _target is None:_target=goal + else:_target=.9*_target+.1*goal + except (KeyError,ValueError): + if _target is None: + if _search_origin is None:_search_origin=p.copy() + # Clear initial hand occlusion while remaining above the support. + search_goal=_search_origin+np.array([.06,.06,.025]) + a[:3]=np.clip(5*(search_goal-p),-.1,.1) + return a + desired=np.r_[_target[:2],.335] + a[:3]=np.clip(5*(desired-p),-.1,.1) + if np.max(np.abs(desired-p))<.006 or _count>=135:_phase='preshape';_tick=0 + elif _phase=='preshape': + a[18]=.3*(2.8-q[10]);a[:3]=np.clip(5*(np.r_[_target[:2],.335]-p),-.05,.05) + _tick+=1 + if _tick>=20:_phase='descend';_tick=0 + elif _phase=='descend': + desired=np.r_[_target[:2],.1965];a[:3]=np.clip(5*(desired-p),-.1,.1) + if np.max(np.abs(desired-p))<.003 or _tick>=60:_phase='close';_tick=0 + else:_tick+=1 + else: + a[6:]=.3*(_CLOSE-q[_MAP]);_tick+=1 + if _phase=='close' and _tick>=40:_phase='lift';_tick=0 + if _phase=='lift':a[:3]=np.clip(5*(np.r_[_target[:2],.245]-p),-.1,.1) + return np.clip(a,-1,1).astype(np.float32) diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..d8893f82f97ff39a21e8e3d3c70188e77dfcf2fe --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "GraspTwoBlocks-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": 219, + "fields": [ + { + "path": "actions", + "shape": [ + 219, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 220, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 220, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 220, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 220, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 220, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 220, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "083b4ce73e4ed4492c7d6d6674c8eac36eb8c5be299fb9f4e9062de6960dfcba", + "source_sha256": "134bb30d57b6cd4a3c7bb37b5323be693c756e14130c4e70ea6349e433c04715", + "view_sha256": "bc2678c905a93d9e98840ce5deb56ecfc20518864009c787261cdffb28209f44" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 135, + "fields": [ + { + "path": "actions", + "shape": [ + 135, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 136, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 136, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 136, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 136, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 136, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 136, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "3538482ebf907aad2b119e19913be39adfa6e11f22e1f1ad56af7dda63cfbc7b", + "source_sha256": "98393488f524ebbcd3cf45bbe71573f061b77a53c746a3737c3604046544d38c", + "view_sha256": "c3f2cac65146ac39afe5d21f5cde00d92ccf474e9c821d2c4c362d54fa159f94" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 229, + "fields": [ + { + "path": "actions", + "shape": [ + 229, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 230, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 230, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 230, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 230, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 230, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 230, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ce00b86bb190d9e0b3abe93121d43c28dd433437597356ca2626f06598117b8d", + "source_sha256": "adfdfc02e0c48c33bec86944f5380d581f73b3d931e634385eba88369d175b8f", + "view_sha256": "ffc7ba9df5614314465ea8bf8d2b711fbef40c96063ee025200b55a32676c090" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 155, + "fields": [ + { + "path": "actions", + "shape": [ + 155, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 156, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 156, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 156, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 156, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 156, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 156, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "434752c071b549788e634856a34ab0842573386c5728815737f6592a626b7f80", + "source_sha256": "2d6f4f2908f2c71e9537dcac78a8054e780fbed687280cfa1c5389b32fe54d03", + "view_sha256": "40066fccbd5858f58f685befb7289927273ecfc3becb9a67816eaec2432ced3c" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 221, + "fields": [ + { + "path": "actions", + "shape": [ + 221, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 222, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 222, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 222, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d666d608a5c4a3d0fa13024c048e35d9e93677004c0b807b96f11e1cc2b2f690", + "source_sha256": "5eafb9e5d484c765ff86f1d74185743870d437ecf778fb5e103c179d05940ce1", + "view_sha256": "99981acee909b8890226482c59e198df49494a5ab0a625295077e13a753a1aeb" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 144, + "fields": [ + { + "path": "actions", + "shape": [ + 144, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 145, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 145, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 145, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 145, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 145, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 145, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "abc5a03690143300d0e49d3543f5934ddd1698e50289049579c1633add226066", + "source_sha256": "6d720519f161abc04721a5ec4a1ec17421df135a82359446cf782872c88b4ebe", + "view_sha256": "564555025ac15d733f8fec5c1e4e57b79be1fd77a322c3ce642e855457e785d1" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 220, + "fields": [ + { + "path": "actions", + "shape": [ + 220, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 221, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 221, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 221, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 221, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 221, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 221, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "43ffa34748acc3d6381803b53ffb7bf7c0885fb6d2c7d9b5b7712edfb7a40fe6", + "source_sha256": "d6defd6b074d36f62121d049887eb3adafffbd85948231c1b039694bedd45989", + "view_sha256": "3cc780041da1d072aa65fc44b89c1df10dcbd4e932e59dd199cfc2040502fffe" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 168, + "fields": [ + { + "path": "actions", + "shape": [ + 168, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 169, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 169, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 169, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 169, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 169, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 169, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "a6131b3867e072a79910bfbc2377cd4462ecca599f0b747dc620e2c02d64c29d", + "source_sha256": "dbd06fbae3f216cdc714d9a28162ba6d9b4dcca8c0d45f378d02f15b51be8b2f", + "view_sha256": "6f2e0feff2d5bbc26dd41c5798419c1c08b12aaa9c225bf4a5f04f89347fcda3" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 148, + "fields": [ + { + "path": "actions", + "shape": [ + 148, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 149, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 149, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 149, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 149, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 149, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 149, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "1704acb8b5088f7c7cc75ca88776ed6a52008b3e8f621d225431211386e6455c", + "source_sha256": "f9681cbd75fa0728fc1f317fc9c13031b4aedf1b0b1181243addb1c4d6b945e9", + "view_sha256": "a171d9334d40e4d569613efe6bf1f6de0ae194142160d0c23cfc7570ec6eccf2" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 187, + "fields": [ + { + "path": "actions", + "shape": [ + 187, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 188, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 188, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 188, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 188, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 188, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 188, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d386c87ffe117435dc73eb2015e08a80962774183925f99a072cd192a1bcef1c", + "source_sha256": "bfdd674e61188e1eb3473d94bd918c6a9bf3d1b9c75aa42648674eca298bc84a", + "view_sha256": "61e47d0019f6ea151e7013410f00779a5cec9cb9fe71bf60eed974bf3d2401f1" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 158, + "fields": [ + { + "path": "actions", + "shape": [ + 158, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 159, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 159, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 159, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 159, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 159, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 159, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "df5e57ba06f27e4f6fb8fbba3e23829ed1d9b925abbd87b5a946b2adbe3e45a0", + "source_sha256": "186c47cecbaacb0b2d83cf22636ebf45dbc3b5afdd2739c774b97b4290051001", + "view_sha256": "f3428bd879d1ae70d84f20e0eb2e432ded84cf14c0fc22457e34c34e226f4145" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 166, + "fields": [ + { + "path": "actions", + "shape": [ + 166, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 167, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 167, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 167, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 167, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 167, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 167, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "66784bd46db3c34abc35439fd8a8d9468a3861c99729e91f010a9fd8a162c1a2", + "source_sha256": "80b88f3bbc1f857fb419f64e5b95639671e3ce5bcac1522d0a07edf1583ff865", + "view_sha256": "a551e8adb489e7f2c3b6060a66d3bac793207339f1694438b50be417c97e2e01" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 155, + "fields": [ + { + "path": "actions", + "shape": [ + 155, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 156, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 156, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 156, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 156, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 156, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 156, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "99f8205b9be77ea01dfd1abfbd01aa23db11263e261d461bdef335d31586c95a", + "source_sha256": "bc02de2b4d9a301582f928b658b1a62d65d6821fc7a9a3528d8196974950554f", + "view_sha256": "f1d04f5cdc27a5341f763d6645d595d1883bea63acf2b58384775e745beca858" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 137, + "fields": [ + { + "path": "actions", + "shape": [ + 137, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 138, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 138, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 138, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 138, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 138, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 138, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "11dc1e986ce667ee5976fe64a10a8e33c7068733fa951f7fbadf9a005c2ebc7b", + "source_sha256": "a2ecb2de96189c25a9e89e031e0b9edede6f46f90230f5529906808b4c165d21", + "view_sha256": "875305f4ba203e6cc073fb3b7490b2e11210aa8d06aa4036e51d5e89d4e38978" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 162, + "fields": [ + { + "path": "actions", + "shape": [ + 162, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 163, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 163, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 163, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 163, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 163, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 163, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "65264c90e1c3ecadba7deeac13eb5cd95f784f87693c7afe52ba1723fb25fb90", + "source_sha256": "1da31a9ff1926b032cd35e2e6f615385f95fbe0da3814c6c584753e60b8d2616", + "view_sha256": "5f9d6583f1c8fb4ce9487f48c54c2e58625c89b09b917d11900f8e530305d84e" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 142, + "fields": [ + { + "path": "actions", + "shape": [ + 142, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 143, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 143, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 143, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 143, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 143, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 143, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "08790b92d17a5d35f1e6679c77ba42ecd4ad645c4ec0a2065a4c88e14135e17d", + "source_sha256": "793f942712abc21e0a2943075640df1c9eb7a129060a4c99f0410a657ceaf015", + "view_sha256": "6f36117a0d3951d99de55c3a308d687d81b264867584de220490468b6740f55c" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 139, + "fields": [ + { + "path": "actions", + "shape": [ + 139, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 140, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 140, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 140, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 140, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 140, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 140, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e10c286e3e6eec90195c7f19e9274a89dbb140c16ac19253f09a9a70f1b60396", + "source_sha256": "635b236e5f7e4905b5cd869a8456bf270583abcb279d0f4670ff4b9184e6c158", + "view_sha256": "050063026d7315be5318d479d60d9ab4b697033f335818391eff6e8dc79cc37e" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 167, + "fields": [ + { + "path": "actions", + "shape": [ + 167, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 168, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 168, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 168, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 168, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 168, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 168, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "26e979b399ef5d1c4164f4b904e3e827136019bb5607a63e4d3c77fb0609c702", + "source_sha256": "4c9163d0d928c5cc58a6b1dab24b3351c80237f76ee499b142a3b266d5a2ef44", + "view_sha256": "a205f1639f8bf60ceb350e28fc5cd4d718202969b05951bda767267f3c0d3c39" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 161, + "fields": [ + { + "path": "actions", + "shape": [ + 161, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 162, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 162, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 162, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 162, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 162, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 162, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9d389de801a60d88201a9625e16c1892a8161eb94b8f21e67a664c5bf69aa243", + "source_sha256": "27dd71ce8d48aef3f7b1ffbc8a6f724daf4d673a528699660ecfbc81317d90a4", + "view_sha256": "af7c9140d64a11a5d16eafe48e405d55a3551a7fc8c85ded565ade1dcfcd8512" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 202, + "fields": [ + { + "path": "actions", + "shape": [ + 202, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 203, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 203, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 203, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 203, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 203, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 203, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "fc63464c22db30e301d802aca5ec6faf509776835f094e4776df70d819e7fb14", + "source_sha256": "767a5279f70d51f9a2d2f141feeced6cf1627797855ace680afa8ae51716b50f", + "view_sha256": "d455a261076f3d50389b52507e3b9c79df411a3c45300fae2ad0b027b6a320f7" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-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/GraspTwoBlocks-v1/frozen/features.py b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/features.py new file mode 100644 index 0000000000000000000000000000000000000000..dece5fefbdf9867258a0c5806d065564a2b51e7a --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/features.py @@ -0,0 +1,22 @@ +"""Fixed, non-neural features of authorized RGB only.""" +import cv2 +import numpy as np +CAMERAS=('front_camera','top_camera') +def image_features(rgb): + features=[] + for camera in CAMERAS: + im=np.asarray(rgb[camera]) + if im.ndim==4 and im.shape[0]==1: im=im[0] + if im.ndim!=3 or im.shape[2]!=3: raise ValueError('RGB must be HWC or 1HWC') + im=im.astype(np.float32)/255. + r,g,b=im.transpose(2,0,1) + masks=((r>.32)&(r>1.35*g)&(r>1.15*b), (b>.30)&(b>1.3*g)&(b>1.12*r)) + for mask in masks: + y,x=np.nonzero(mask);h,w=mask.shape + if len(x)>=4: + features.extend([x.mean()/w,y.mean()/h,x.std()/w,y.std()/h,min(len(x)/(w*h)*50,1),1]) + else: features.extend([0,0,0,0,0,0]) + features.extend(cv2.resize(mask.astype(np.float32),(8,8),interpolation=cv2.INTER_AREA).ravel()) + # Coarse appearance provides hand-relative context even with object occlusion. + features.extend(cv2.resize(im,(8,8),interpolation=cv2.INTER_AREA).ravel()) + return np.asarray(features,np.float32) diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..dbefb70d02bfb8e71779759d690e1445abd7beff --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/findings.md @@ -0,0 +1,27 @@ +# Findings + +All 20 demos analyzed: 3,415 expert action labels and 3,435 observations. Human-visible inspection: 5 front/top frames plus 1 final left frame per demo, exact ledger in ../demo_analysis.md. Translation-only arm motion, preshape, descent, finger closure and lift recur. Scene placement and orientation vary. All final left images support apparent paired lift; actual threshold completion is unknown. Action hand indices do not directly match qpos suffix order. No scene geometry or success labels were accessed. + +Draft uses nonparametric RGB/proprioception retrieval across all examples. Main risks: phase ambiguity, off-support stalling, color occlusion and action averaging. No rehearsal, rollout, exploration, optimization or neural finetuning occurred. + +## Online continuation +Budget initially confirmed 0/20. Episode 1 exposed an interactive harness nesting error (43 unintended legal zero-delta steps); corrected using latest_observation, without reset/replay. Baseline retrieval continues approach for too long. A geometric alternative uses strict red/blue masks, visible right endpoints and slopes to avoid initial hand occlusion. A least-squares camera-to-approach-command calibration uses only all 20 authorized demonstrations; no neural training. Calibration residual standard deviations: normalized cumulative xyz [.1811,.0700,.0185]. Runtime resizes top camera to demo 240x320 resolution. Version 2 updates localization in the first ten approach observations, bounds movements to observed .1 increments, then executes demo_05's preshape/descent/closure/lift suffix. Target orientation stays fixed, as in every demo. Timing and grasp feedback remain limitations. + +D20 hand mapping resolved algebraically: across all closure-phase expert rows, action[6:] + .3*qpos[mapping] is constant to residual standard deviation <4e-8. Mapping is [11,7,15,19,12,8,16,20,13,9,17,21,10,14,18,22]; closure targets [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]. Preshape action18 uses target qpos10=2.8 for 20 steps. Version 3 replaces open-loop finger replay with this observed joint feedback law; no simulator internals were used. This addresses both variable contact and indefinite terminal overclosure. + +Episodes 2 and 4 returned native success (steps116 and141 respectively). Independent episode3 v3 completed validly but native success was false; final legal image shows splaying. All are distinct episodes, not repeated seeds. Version4 replaces command-total arm motion with Cartesian feedback from hand-written standard Panda forward kinematics. This is a kinematic coordinate calculation, not another task environment or simulator. General robot link transforms were validated solely against legal D20 qpos/action transitions: per-axis correlation >.9985; normalized actions produce about .041 m measured motion per step. No task source or hidden state used. Image-to-final-descent-position calibration residual std is [4.84,1.31,.756] mm across20 demonstrations, including occlusion outliers. Approach target z=.335, grasp z=.1965 and lift z=.245 are in computed flange coordinates, derived from D20 qpos. Approach and descent transition on measured pose tolerances; preshape20 and closure40 steps follow D20 timing. Fingers use observed joint feedback throughout closure and lift. No regrasp recovery is claimed. + +Episode5 v4 interactive succeeded at step107; episode6 exact independent v4 succeeded at step156, hash00ce8928c16089aa60f66f96d437e826abc7010b3a42a9c798ad588910820fb7. Version5 refines only image calibration: retain demos whose red and blue x95−x05 spans both exceed44 pixels, to exclude initial hand-censored endpoint labels. Selected demo indices [0,2,4,6,7,8,10,11,13,14,15,18,19]; all20 still underpin kinematic validation and hand feedback. Residual on visible calibration points is [1.109,.162,.543]mm; this is calibration residual, not a task success estimate. Runtime continues updating localization throughout approach, allowing initial occlusion to clear. The complete successful v4 candidate is preserved externally for audit and already snapshotted by the runner. + +## Repeated exact-version results through slot10 +Refined version5 independently rehearsed in slots7,8,9,10 with the identical bundle hash87b7c0328f6bd1258c964a368d2da31dcd6fd3762cbba2c59a8ff572630f2017. All four completed validly with native success true, at steps185,125,109,190 respectively. These are four fresh charged episodes, not seeds or reset replays. Version4's slot6 also completed independently with native success true. Version3's slot3 was valid but native false. Interactive successes are kept separate: slots2,4,5. Slot1 failed after an initial harness packing bug and later block splaying. No outcome is inferred as official from images. + +Documentation-only revision after slot10 records these results; controller.py, kinematics.py and geometry_fk.npz are unchanged. Remaining rehearsals test the documented exact bundle. Runtime has no network, neural model, simulator, worker API or development agent. It consumes only RGB and qpos supplied by the runner and returns22 bounded actions. + +## Recovery and limits +Arm feedback corrects pose drift continuously during approach, preshape, descent and lift. Joint feedback adjusts closure to measured finger positions. Color extraction failures hold a legal zero action until initial localization exists; later failures retain the latest target. Timing guards prevent approach/descent phases from blocking indefinitely. No attempt is made to reassemble separated blocks or regrasp after a visibly failed lift; this limitation is explicit. Fixed wrist orientation follows all20 D20 rotations. Calibration quality, especially initial occlusion, remains the main risk. Success rates here describe only authorized exploration, not hidden evaluation. + +## Localization recovery after slot12 +Documented v5 slot11 succeeded independently at step122; slot12 was valid but native false at horizon300. The legal final image and qpos show absolutely no arm/hand motion: initial flange [.4745907,0,.3735819], all16 hand joints0. Reapplying the color detector to this legal observation raises 'blocks obscured'. Root cause is initial blue mask occlusion by the robot, not closure, lift or Python execution failure. + +Version6 adds explicit initial-localization recovery. If no valid target has ever been detected, the arm servos to a relative raised staging displacement [+0.06,+0.06,+0.025]m in computed flange coordinates, capped to .1 normalized translation per step. Each next observation retries both-color localization; normal pose feedback resumes as soon as detection succeeds. This branch changes no behavior for initially visible pairs. No resets, replayed seeds or new simulator were used. One offline application to the legal saved slot12 observation verifies that this branch now returns a finite nonzero bounded action; this is a program-branch check, not a new environment rollout. Whether later fresh rehearsals encounter the same occlusion is unknown. diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..aae02764518392f1a450b281fa4fbc63a90dc15a --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/freeze_manifest.json @@ -0,0 +1,193 @@ +{ + "files": { + "__pycache__/controller.cpython-310.pyc": "3c16e242468947dad4326702bf76d13b42bd4de434a6ff6647736fa85fdeaa80", + "__pycache__/features.cpython-310.pyc": "e2bfe3533367b72b9b26964049a53b09840a18e523dd8fe8c2c988d1bec767b7", + "check_synthetic.py": "26c6cf36ef4e94993cd822f3a6fb7c5fbf47456b863474b624bb782cf443253d", + "controller.py": "5d1eb23c43121d632718118f0d462cdef36fcd9bd83f95ef84a3431260eadfcc", + "demo_manifest.json": "522e9e247bd2a406cf4ccb7376e0c9e7b52b644d29719e0fc2ff605652feef10", + "demonstrations_readonly/demo_00.h5": "bc2678c905a93d9e98840ce5deb56ecfc20518864009c787261cdffb28209f44", + "demonstrations_readonly/demo_01.h5": "c3f2cac65146ac39afe5d21f5cde00d92ccf474e9c821d2c4c362d54fa159f94", + "demonstrations_readonly/demo_02.h5": "ffc7ba9df5614314465ea8bf8d2b711fbef40c96063ee025200b55a32676c090", + "demonstrations_readonly/demo_03.h5": "40066fccbd5858f58f685befb7289927273ecfc3becb9a67816eaec2432ced3c", + "demonstrations_readonly/demo_04.h5": "99981acee909b8890226482c59e198df49494a5ab0a625295077e13a753a1aeb", + "demonstrations_readonly/demo_05.h5": "564555025ac15d733f8fec5c1e4e57b79be1fd77a322c3ce642e855457e785d1", + "demonstrations_readonly/demo_06.h5": "3cc780041da1d072aa65fc44b89c1df10dcbd4e932e59dd199cfc2040502fffe", + "demonstrations_readonly/demo_07.h5": "6f2e0feff2d5bbc26dd41c5798419c1c08b12aaa9c225bf4a5f04f89347fcda3", + "demonstrations_readonly/demo_08.h5": "a171d9334d40e4d569613efe6bf1f6de0ae194142160d0c23cfc7570ec6eccf2", + "demonstrations_readonly/demo_09.h5": "61e47d0019f6ea151e7013410f00779a5cec9cb9fe71bf60eed974bf3d2401f1", + "demonstrations_readonly/demo_10.h5": "f3428bd879d1ae70d84f20e0eb2e432ded84cf14c0fc22457e34c34e226f4145", + "demonstrations_readonly/demo_11.h5": "a551e8adb489e7f2c3b6060a66d3bac793207339f1694438b50be417c97e2e01", + "demonstrations_readonly/demo_12.h5": "f1d04f5cdc27a5341f763d6645d595d1883bea63acf2b58384775e745beca858", + "demonstrations_readonly/demo_13.h5": "875305f4ba203e6cc073fb3b7490b2e11210aa8d06aa4036e51d5e89d4e38978", + "demonstrations_readonly/demo_14.h5": "5f9d6583f1c8fb4ce9487f48c54c2e58625c89b09b917d11900f8e530305d84e", + "demonstrations_readonly/demo_15.h5": "6f36117a0d3951d99de55c3a308d687d81b264867584de220490468b6740f55c", + "demonstrations_readonly/demo_16.h5": "050063026d7315be5318d479d60d9ab4b697033f335818391eff6e8dc79cc37e", + "demonstrations_readonly/demo_17.h5": "a205f1639f8bf60ceb350e28fc5cd4d718202969b05951bda767267f3c0d3c39", + "demonstrations_readonly/demo_18.h5": "af7c9140d64a11a5d16eafe48e405d55a3551a7fc8c85ded565ade1dcfcd8512", + "demonstrations_readonly/demo_19.h5": "d455a261076f3d50389b52507e3b9c79df411a3c45300fae2ad0b027b6a320f7", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "features.py": "12f435f8dded0e8410e83021727c894d9374a14bec170536a2dfe5bbf4479251", + "findings.md": "608e4aa74ec883c868fcd74b1df9aab2e646f5677a34f0446302d7a20dfacb29", + "geometry.npz": "99dbe1171755dbd65a4205383caa7d650cac2f0d0f20e96cda8edd1d1f91f438", + "geometry_fk.npz": "1637466c5dc58ffdff2748c216c75fd050a7ee9c6bb3ce13751ee78b2d83c40b", + "handoff.md": "320f16541068bd4c9dc548c22cebdb5b9b87cc9e723f5a68d17f09f6259caca4", + "kinematics.py": "efc67ecf91fe5d551669bb5e7bcf93843f028657afc34cd25846ac7442764693", + "memory.npz": "9df04fe5131a49f5258b7fa3aa7e24f02082854e9665669a0337fd09a92f1f66", + "model_tool_manifest.yaml": "166d2f62fcf69ffac16da4baa5e3678babf5a6a90fc3d0ce9e2a4f3d4046fbe9", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "skills.md": "a97bb6af6e52362961a386960f1d42b04babad74465123c0a8515c8a899bc729", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "exploration_ledger_hash": "0b61a78c93a0f2c75a06d0bbe2b60b0100638db89808489cea695fe5900826ee", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "episode": 3, + "bundle_hash": "88966c14a05d078c8544d9e1ad11f1366e893c091a7739adb8e8bb855c4e729a", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 6, + "bundle_hash": "00ce8928c16089aa60f66f96d437e826abc7010b3a42a9c798ad588910820fb7", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 7, + "bundle_hash": "87b7c0328f6bd1258c964a368d2da31dcd6fd3762cbba2c59a8ff572630f2017", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 8, + "bundle_hash": "87b7c0328f6bd1258c964a368d2da31dcd6fd3762cbba2c59a8ff572630f2017", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 9, + "bundle_hash": "87b7c0328f6bd1258c964a368d2da31dcd6fd3762cbba2c59a8ff572630f2017", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 10, + "bundle_hash": "87b7c0328f6bd1258c964a368d2da31dcd6fd3762cbba2c59a8ff572630f2017", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 11, + "bundle_hash": "31940d9432d56da5253460566d49c26ca9d419f74a9d66bd4d555887fdee13ef", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 12, + "bundle_hash": "31940d9432d56da5253460566d49c26ca9d419f74a9d66bd4d555887fdee13ef", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 13, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 14, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 15, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 16, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "6b60af063188c9c0edcfbe5e5e2d499a52cb38a93dfcf0ff1d4a95fad6b0c149", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..07b528458886305442cce26f7ead0ad2e6c95dca --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/handoff.md @@ -0,0 +1,14 @@ +# Compiled controller handoff +Task: GraspTwoBlocks-v1, Agent-D20-E20-Compiled. This self-contained candidate uses only the20 authorized task demonstrations and legal exploration. The runner's freeze receipt is authoritative for the selected exact bundle and completion status; this document records evidence through exploration slot10. + +Entry points: controller.reset_episode() and controller.act(obs). Runtime files: controller.py, kinematics.py, geometry_fk.npz. Dependencies: Python standard library, NumPy and OpenCV. No network, neural model, development agent, simulator or API is imported at runtime. Additional D20 memory/features files preserve earlier development provenance. + +Input: legal top-camera RGB plus agent/qpos; step_id is used only for horizon guard when provided. Output:22 normalized native actions, clipped to[-1,1]. The runner performs the initial hold at step1; candidate never resets the environment. Native horizon300,20Hz. Generic Panda rigid transforms compute flange position; this kinematic calculation was validated on authorized D20 transitions. Fixed rotation matches D20. RGB endpoint calibration drives approach; flange feedback drives descent/lift; D20-derived joint feedback drives fingers. + +Evidence through slot10: current behavior succeeded in four consecutive exact independent rehearsals7–10, hash87b7c0328f6bd1258c964a368d2da31dcd6fd3762cbba2c59a8ff572630f2017. The documentation-only revision after10 changes the bundle hash but does not alter behavior. Earlier exact version4 succeeded in slot6; version3 failed in slot3. Interactive success is recorded separately and is not counted as independent rehearsal success. All reported outcomes came from native step feedback. + +Limitations: calibration may suffer initial hand occlusion; fixed wrist orientation;20-step preshape and40-step closure timing; no separated-block recovery. Pose/joint feedback compensates ordinary drift but does not reconstruct a failed grasp. If native success is absent, apply the preregistered visible rule with ambiguity=false via score_rehearsal; never invent official success. + +Audit outside frozen runtime: ../demo_analysis.md preserves actual offline inspection; ../evidence/exploration includes candidate versions, legal observations/images, action logs, rehearsal receipts and ledger. Runner supplies verified demo manifest, readonly demos and common environment lock. Stop development after freeze; no21st rollout. + +Update after slot12: version6 adds a raised staging motion when initial block localization fails, so an occluded color mask no longer causes an immediate permanent zero-action fallback. It retries detection on each fresh observation. This is localization recovery, not regrasp after block separation. Slot11 independently succeeded; slot12 failed due initial occlusion and no movement. Further exact rehearsal is required for this revised bundle. diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/kinematics.py b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/kinematics.py new file mode 100644 index 0000000000000000000000000000000000000000..723a218a4048892dffb727b249f0f6eb90ff2ccf --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/kinematics.py @@ -0,0 +1,10 @@ +import numpy as np +def fk(q): + q=np.asarray(q);T=np.broadcast_to(np.eye(4),q.shape[:-1]+(4,4)).copy() + offsets=[(0,0,.333),(0,0,0),(0,-.316,0),(.0825,0,0),(-.0825,.384,0),(0,0,0),(.088,0,0)] + rolls=[0,-np.pi/2,np.pi/2,np.pi/2,-np.pi/2,np.pi/2,np.pi/2] + for j,(p,r) in enumerate(zip(offsets,rolls)): + A=np.eye(4);A[:3,3]=p;A[1:3,1:3]=[[np.cos(r),-np.sin(r)],[np.sin(r),np.cos(r)]] + B=np.broadcast_to(np.eye(4),T.shape).copy();c=np.cos(q[...,j]);s=np.sin(q[...,j]);B[...,0,0]=c;B[...,0,1]=-s;B[...,1,0]=s;B[...,1,1]=c + T=T@A@B + return T[...,:3,3] diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6f9e7d809cc3be26dc2adcdf86b934114aba18f5 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,84 @@ +{ + "stage": "Agent-D20-E20-Compiled online", + "status": "compiled with initial-occlusion recovery", + "task_id": "GraspTwoBlocks-v1", + "demonstrations": [ + "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" + ], + "exploration_episodes_spent": 12, + "neural_finetuning": false, + "pretrained_tool_weights": [], + "coding_model": { + "identity": "provider-managed Codex; precise weight revision unavailable", + "weights": "unchanged; not exported or trained" + }, + "tools_used": [ + "functions.exec orchestration", + "exec_command local bash/Python", + "view_image local evidence rendering", + "worker_api.API.read_demo local sanitized HDF5 access", + "worker_api.API interactive exploration and independent rehearsal" + ], + "network_requests": 0, + "dependencies": { + "python": "3.10.20", + "numpy": "2.2.6", + "opencv": "4.12.0", + "h5py": "3.16.0" + }, + "runtime_dependencies": [ + "Python standard library", + "NumPy", + "OpenCV" + ], + "unused_available_libraries": [ + "SciPy", + "torch" + ], + "provenance": { + "contract_sha256": "d689261d92100bab9f02f2ca8ae07d1a9873ca340a1018be71739a7e3fed5665", + "input_manifest_sha256": "731647f8299a9780d0f1a23644eeadf2fefb8ff3e3a0e87b2f6df407d2a4169c", + "worker_api_sha256": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e", + "memory": "Deterministic fixed RGB features, qpos/qvel and action labels from all 20 authorized demos; 20 synthetic zero-action terminal anchors; no learned neural weights", + "kinematics": "Hand-written generic Panda rigid transforms, validated against only authorized D20 qpos/action motion. No task simulator constructed.", + "calibration": "Least squares from strict RGB endpoint/slope features to computed flange positions in20 authorized demos. No neural weights." + }, + "validation": [ + "Authorized interactive exploration slots1,2,4,5", + "Exact independent rehearsal slot3: valid native failure", + "Exact independent rehearsal slot6: valid native success", + "Exact refined-version rehearsals7\u201310:4/4 valid native successes", + "Documented v5 exact slot11 native success, slot12 native failure from initial color occlusion", + "Offline branch check on legal slot12 final observation, not environment rollout" + ], + "limitations": [ + "Initial hand occlusion can bias endpoint localization", + "Fixed wrist orientation follows all20 demos", + "Preshape20 steps and closure40 steps", + "No separated-block regrasp recovery" + ], + "runtime_files": [ + "controller.py", + "kinematics.py", + "geometry_fk.npz" + ] +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-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/GraspTwoBlocks-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..e15d9dbb6203a774e96c195cf1def62c5ca3d82b --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/skills.md @@ -0,0 +1,4 @@ +# Implemented skills +Strict color masks localize red/blue block right endpoints and slopes in top camera RGB. Deterministic D20 least-squares calibration maps features to a grasp position. Hand-written Panda kinematics computes current flange position from legal qpos; its motion axes were validated against D20 actions. Cartesian feedback controls approach, descent and lift with fixed rotation. Preshape and closure use a D20-derived joint permutation and target-error feedback. Phase transitions use measured position tolerances plus bounded timing fallbacks. No automatic regrasp is implemented. + +Offline runtime requires Python, NumPy, OpenCV, controller.py, kinematics.py and geometry_fk.npz. Other bundled D20 memory files preserve provenance. No network, pretrained model or model-development agent is used. No neural weights are trained. Call reset_episode(), then act(obs) after the runner-owned hold. diff --git a/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/GraspTwoBlocks-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=600:return None + if _BANK is None: + with np.load(Path(__file__).with_name('bank.npz'),allow_pickle=False) as f:_BANK={k:f[k] for k in f.files} + b=_BANK + try:q=np.asarray(obs['proprioception']['agent/qpos']).reshape(-1)[7:];v=np.asarray(obs['proprioception']['agent/qvel']).reshape(-1)[7:] + except (KeyError,ValueError):return np.zeros(16,dtype=np.float32) + if q.size!=16 or not np.isfinite(q).all():return np.zeros(16,dtype=np.float32) + dist=np.mean(((b['q']-q)/b['q_scale'])**2,axis=1) + if _ROW is None or dist[_ROW]>9 or _ROW%399>=393: + pool=np.argpartition(dist,63)[:64];scores=dist[pool].copy() + for c in CAMERAS: + if c in obs.get('rgb',{}):scores+=.25*np.mean(((b[c][pool]-image_feature(obs['rgb'][c],c))/.2)**2,axis=1) + _ROW=int(pool[np.argmin(scores)]) + else: + # Find measured progress locally, retain direction, never advance on time alone. + end=min((_ROW//399+1)*399,_ROW+9) + pool=np.arange(_ROW,end) + _ROW=int(pool[np.argmin(dist[pool])]) + target=min((_ROW//399+1)*399-1,_ROW+2) + _STALL = _STALL+1 if np.linalg.norm(v)<.1 else 0 + if _STALL>=10 and dist[target]<1.: + _ROW=target + target=min((_ROW//399+1)*399-1,_ROW+2) + _STALL=0 + desired=b['q'][target].copy() + + action=np.clip(10.0*(desired-q),-.7,.7).astype(np.float32) + return action.reshape(4,4).T.reshape(-1) diff --git a/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..0fe8122c8b1320d51bdeab53618e92f656ecb147 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "SpinPenHora-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": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c59085ef10d9cbbe9a27c49b91cec09724385ee29c15b53c9cbf42bd00ad8d2b", + "source_sha256": "09abd1294b32793219d9378de49b76c8d3d9f3bad9df1bdd7f7c68895b4cbe99", + "view_sha256": "07d4e81c927cc327c650defbf9081b0537a336fff0935416d4eab70ddd5cdb5b" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e1e11c606dc95b12a7512be0a372c83569657fdf33eaf8ff9904c6271d81e7f4", + "source_sha256": "24d135e3b61bdeeddfb4a958b6306b6916c2676d2be1772f84a198fc11cd8e65", + "view_sha256": "d84880523f5dafba3b4091a6b18e4e277847bd567d8e8cbf6d1b94263ec2d9ab" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "5c48f657392422fe42a92d8de651d01c50b91b9117f9742e82cb05970e91c751", + "source_sha256": "5d41e924127c4bdd846229c80baa8d95016380e94b9b5e54bb3f2b1dc92fdac3", + "view_sha256": "00698e4a7445c08f80927366827bb6b4cd0898292a2096886ef7d4739b8b37f2" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "75ac080008eddf2505934ffe7ebfde49e7cf18b878f1da60b993ec4dd08dbd6d", + "source_sha256": "aad3fe3cb44ee44b2357ac2781eec93825fd9c10d2a6488a203cf3a12a4eef6c", + "view_sha256": "5d16bc71ac238fbb3a2dd3f00f6386884b399fa4f2037671ad758f3fd505cf8c" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "22f7789b7eafe38b65531028ba667992d09ba9de78f5b458aff297ddabdb88f6", + "source_sha256": "789d1d3fd13f8a60932df5f65db4a6008999883706404e3c749f2081bc652d21", + "view_sha256": "32321c9a25d8b70517b711c5b465392ecc8b255125bfeaffe2102569ad03352d" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2b689f537623de4d3a87fda23ec9169b1bcbd189483031b5360cdea7a82166b1", + "source_sha256": "3d067096c29066a2b33e0701abbc60dec79b8293e29ff39b85d131e06645e67a", + "view_sha256": "8fcf19ed73becbd4e4de6f7ab043ae6dc73d1ab1c3030e3046545b0388faa30b" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "76b5edf49193cc07704c06443434d193b07f28ded56235b97e2c4ac5f124ea93", + "source_sha256": "00eea016eaeadb0fde4331efa127418cac1b7ccff371c4e2490308cb0d07366f", + "view_sha256": "7ac1ccd03b4331f5f76a51e19309b97e02350e636c7ec929e2b2cc18bca1b3ec" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e2c18ad949160aa34707b4a0ca89e14061e774415f38940a0c843c5a641a9927", + "source_sha256": "54a5a1fce181b1efe93dffbab3d9e748f1aa053baa937f36281f11b363db11b0", + "view_sha256": "38240877e1d3bfccd4481161283dea4bb9dbb45985cf529f6d31106ce2fce60f" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ae8966de3f3a8f593d54697148dcdfd2ab65ae2a09f2edcec38fc2289c1e9c92", + "source_sha256": "160d13312cf5de6e58e8e61a684c4fecbb7e5ebec90fbdca8ed7495c58729db2", + "view_sha256": "b556680424feb18d3f1f7907b2add65a5b70c83c26e24c721ac12e81a0ade9a4" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "52b1bdfaf7feaf6973b92aa2b2af919dbd01fd183e4c04a5c79a15a42fcef004", + "source_sha256": "e41a242faa31250bc16064e61c8f35ef499eade881390547ad11f88c51693294", + "view_sha256": "526bafcf7deb647772362764b654654951155e9925fd140d7a742d4311ff0f6a" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "f04b175e59a25c13408f037edf0c7a7fa90c36883594d437e4988e5f76fe847c", + "source_sha256": "95cd36f8178d2e6a78f48b57cf9d6c83ebcd6b9b867f627d5acd515990404f4f", + "view_sha256": "7bcb9e9487c8c7976cbf2d0bcd712965d352893351e0d28bf0b7b16d455cb6d9" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d798b98dd33ba95e3b7042139f862cb510302ea8d750ff15cace930a67b6e4af", + "source_sha256": "c7073f54fd62c3d05cd08f49cdbacc0a9c6f141bb482f6c6b77a7c82371e9a23", + "view_sha256": "75e4263b8d1abff21cbce7d66876497122ef78a8f836c8f8762bfd06a137d460" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "40ea61808b3a8c4f1660920b566478111a0ad65c3dde14081e215b8b4991c9b3", + "source_sha256": "a323f522fcf3e3c280b1341b02d547f966f9d8a02070f8acb4d329af2c9cc57f", + "view_sha256": "a06b3efc05ec91c45914622c2ba9e4b4125c62b6e2ff33688395ff77f8cb26fd" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "08104e196fef841a2a285770e8b1b5f1c9990adcbd8927aabb70818d36f024f2", + "source_sha256": "faf913afe6f1368cdca169883ba75cd2c73ab9e9a55b165911da7f4512f3719b", + "view_sha256": "84a54e546f56e70acea3c35549696e4c6201e617b0cef5f542a466a0d54ede1b" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ea1ad66a874a7eb743ff5810d24e6179064fc4eb592d94da42c36f5f6162ec90", + "source_sha256": "60b99c24eb4e22c6718ccc80eda279868dcb16790dad41f06bfb2acc98f6e903", + "view_sha256": "274f27cc9e54f4d22c20f7ed37fa8fbf81a193bcad7c8f6f8396036447c96f1c" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ac699a0bea71d1f66c13565f7d2a0a6eed8779c53dcf82d3d5dddfa862c1bfaf", + "source_sha256": "1ed2fb1ccb759bc8a4c4b530d4737402e54c5abf4b0543726d70b7e8551ec12d", + "view_sha256": "8556baf1366a8a7b8bfbff1ca771bd1740b72ab3578dbd0b74b3390ae994b94a" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "b385e7755946653cd2fdf1625b6c95c9c9c294a68ad35a2791d6591ee17d8796", + "source_sha256": "5828de1d7d65a48093e755f80902c286a2074cdf4a619ab28be9e36e2bd1356a", + "view_sha256": "be8edceaf454eec6cd2b07f5a926b194c16ef1e8c74c3e10a60d8d16e11586a8" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "e19c67564374a3a63d5082f23ade64e6cb7a416c91bc856d11fcb25e48fcd19e", + "source_sha256": "4dfae3e0cf2e51d9acfa6e07faf6b11d20b616e742f6c1624a9e8795cbafedab", + "view_sha256": "1ec6ef6b4ec283c6401f4c235b061a63c2ac0455091663c39a03cb1765b186fe" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "96c5bea7990d9ae761976dcb3343ed11110e89c0ce7ce8ef4336d787686b610b", + "source_sha256": "b8ba1454d6862e806679283af9f66466d80cffcfd56cb51ce195ce5feb82678e", + "view_sha256": "6e208daea5415595227c3ee5499771f4faa11730c4d9e2bab6035083449837ed" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 399, + "fields": [ + { + "path": "actions", + "shape": [ + 399, + 16 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 400, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 400, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 400, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "52a1f87d5324584f14daa5519d946f9808b0eb09abd30733cf2f42d229992964", + "source_sha256": "182c5429b3dec0775c44e49969bde3516bfaf3ca53529d020d2da31a97b252ae", + "view_sha256": "5db04be68d78e0486c2a6a37a0d6359b28222157731b01b1526f6c0babebc023" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-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/SpinPenHora-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..942edabcfbb7f3ed4e057bda4822a1839722b814 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/findings.md @@ -0,0 +1,26 @@ +# Exploration findings and preparation history + +The offline sections below are historical. Current final-development status: 16 slots used; Episodes 17–20 reserved for exact independent rehearsals. Native development success has always been false. + +# Findings and open questions + +All 20 authorized demonstrations were analyzed. All 399 labels per demo were used; representative front/robot images were visually inspected at 0, 100, 200, 300, 399, with demo_00 also inspected in left/top views at those indices. See ../demo_analysis.md and ../evidence/inspection_indices.json for exact records. + +The task is in-hand manipulation with the arm held. Current hand state varies substantially, and action sequences recur with varying phase. Robot RGB shows the object near fingertips at sampled endpoints, but success labels, target rotations and completion criteria are absent. Exact qpos differences match +0.1 times recorded actions in the last 16 entries; this is a dataset observation, not a dynamics guarantee. + +The draft uses nonparametric observation-conditioned action interpolation from every authorized demo, with no neural fitting. Its fixed crops and manually chosen metrics need later authorized evaluation. Expected risks include occlusion, camera displacement, ambiguous contacts, action averaging, trajectory drift, distribution shift after the charged hold, and failure to recover a dropped pen. No success claim is supported. + +Blocker to performance assessment: no environment is available in this stage. No blocker remains to delivering the requested offline draft. Zero exploration episodes used; no rehearsal or freeze invoked. + +## Resumed exploration +Trusted budget on resumption: 1 used, inactive. Earlier offline-status statements above describe the preparation stage only. Episode 1 partial evidence retained; native success unproven. Episode 2 tested gain 3, correction clip .4, 3 neighbors for 199 commands: native success false throughout, posture retrieval distance grew from 3.76 to 83.74 and motion stalled. Images show retention but no repeated reorientation. This refutes treating the demo action/qpos index relationship as validated live order. Episodes 3–4 will probe the live mapping using small bounded pulses. Cameras are twice demo resolution; crop coordinates remain normalized. + +Episode 3: all 16 small legal pulses consistently identify action-to-qpos order [0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15]. Responses were approximately +.034 radians for 3 x .15 pulses. Corrected output via 4x4 transpose. This is measured action-index calibration, not simulator access or a learned neural model. Episode 4 tests mapped output. + +Episode 4: corrected mapping reduced posture distance 7.15 to .017 by step 51; pen reoriented but stalled by step 151, success false. Episode 5: gain .5, clip .15, velocity .1, 3 neighbors; sustained hand motion through 160, pen retained, modest visible object motion, native success false. Episode 6: gain 10, clip .8, no velocity, 1 neighbor; fixed posture by step 26, native success false. Gain alone does not solve interpolation fixed points. Episode 7 changes to measured-progress path pursuit: image/proprio localization, forward local nearest pose, 3-state lookahead and gain 8. No time-only advancement or neural fitting. + +Episodes 7–11: measured-progress pursuit removes interpolation stalls and keeps hand posture near D20 coverage. Pursuit settings (lookahead, gain) were E7=(3,8), E8=(2,10), E9=(4,8), E10=(6,6), E11=(2,15). E7 ran 160 steps, E8–11 130. Native success false in every returned step. Robot/top images show retained pen but recurrent rocking or uncertain signed rotation. E9 row progress ~2.5 demo frames/native step; E10 ~2.8. Larger lookahead did not improve observed object rotation. Static pen-axis extraction from top RGB uses white connected component in normalized crop and covariance orientation modulo 180; all 7980 top images processed via API.read_demo, with no neural training. It is a diagnostic descriptor, not a success detector or true 3-D pose. + +Episode 12 (3-pose lookahead, gain10, 200 steps) passed an end-of-demo relocalization with retention and continued motion; native success false. Episode 13 (1-pose, gain10, 160 steps) moved approximately one row per step then stalled near row1268. Episode 14 added .5 pen-axis phase cost; stalled near row6390 early, native success false. Continuous axis penalty is rejected; geometry is retained as audit-only analysis. Episode 15 (2-pose, gain10, +.04 curl offset, velocity-gated stall recovery) stalled near row5547. Curl offset is rejected. Episode 16 will use unoffset 2-pose pursuit, a more tolerant measured-stall gate, and a logged 10-step zero-delta hold at native command indices61–70. No drop/regrasp ability is established. + +Episode 16 completed 220 native steps (219 commands), including the logged ten-command zero hold. The unoffset two-pose pursuit resumed afterward and continued through row744 with the pen retained in sampled images. No native success. Selected for rehearsal because it maintained motion and retention with the calibrated mapping and a bounded stall handler; this is not a claim of benchmark success. Rehearsal results, exact hashes, evidence judgments and freeze receipt are external audit records, not rewritten into the bundle after rehearsal. diff --git a/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..0fc410759fa3e49d38b8e36a5abda2956d276587 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/freeze_manifest.json @@ -0,0 +1,80 @@ +{ + "files": { + "bank.npz": "1eb5099d204b0d9ed5a454853fef8fe3eb11eede94e7b1a45620d750d806ad91", + "bank_provenance.json": "2c99cd8eead2e9304c00fa4cdbb2477a3912e7af1eb0dbdb6b936f9996af12b4", + "controller.py": "4a309b8424cf2f4f9ff661d12e81ccabcd34dc7cab333e20153180a2077a76d9", + "demo_manifest.json": "32da4377d283766aef0d0e1c8842e30f79fdd503462ee06da67199ef9a070bc8", + "demonstrations_readonly/demo_00.h5": "07d4e81c927cc327c650defbf9081b0537a336fff0935416d4eab70ddd5cdb5b", + "demonstrations_readonly/demo_01.h5": "d84880523f5dafba3b4091a6b18e4e277847bd567d8e8cbf6d1b94263ec2d9ab", + "demonstrations_readonly/demo_02.h5": "00698e4a7445c08f80927366827bb6b4cd0898292a2096886ef7d4739b8b37f2", + "demonstrations_readonly/demo_03.h5": "5d16bc71ac238fbb3a2dd3f00f6386884b399fa4f2037671ad758f3fd505cf8c", + "demonstrations_readonly/demo_04.h5": "32321c9a25d8b70517b711c5b465392ecc8b255125bfeaffe2102569ad03352d", + "demonstrations_readonly/demo_05.h5": "8fcf19ed73becbd4e4de6f7ab043ae6dc73d1ab1c3030e3046545b0388faa30b", + "demonstrations_readonly/demo_06.h5": "7ac1ccd03b4331f5f76a51e19309b97e02350e636c7ec929e2b2cc18bca1b3ec", + "demonstrations_readonly/demo_07.h5": "38240877e1d3bfccd4481161283dea4bb9dbb45985cf529f6d31106ce2fce60f", + "demonstrations_readonly/demo_08.h5": "b556680424feb18d3f1f7907b2add65a5b70c83c26e24c721ac12e81a0ade9a4", + "demonstrations_readonly/demo_09.h5": "526bafcf7deb647772362764b654654951155e9925fd140d7a742d4311ff0f6a", + "demonstrations_readonly/demo_10.h5": "7bcb9e9487c8c7976cbf2d0bcd712965d352893351e0d28bf0b7b16d455cb6d9", + "demonstrations_readonly/demo_11.h5": "75e4263b8d1abff21cbce7d66876497122ef78a8f836c8f8762bfd06a137d460", + "demonstrations_readonly/demo_12.h5": "a06b3efc05ec91c45914622c2ba9e4b4125c62b6e2ff33688395ff77f8cb26fd", + "demonstrations_readonly/demo_13.h5": "84a54e546f56e70acea3c35549696e4c6201e617b0cef5f542a466a0d54ede1b", + "demonstrations_readonly/demo_14.h5": "274f27cc9e54f4d22c20f7ed37fa8fbf81a193bcad7c8f6f8396036447c96f1c", + "demonstrations_readonly/demo_15.h5": "8556baf1366a8a7b8bfbff1ca771bd1740b72ab3578dbd0b74b3390ae994b94a", + "demonstrations_readonly/demo_16.h5": "be8edceaf454eec6cd2b07f5a926b194c16ef1e8c74c3e10a60d8d16e11586a8", + "demonstrations_readonly/demo_17.h5": "1ec6ef6b4ec283c6401f4c235b061a63c2ac0455091663c39a03cb1765b186fe", + "demonstrations_readonly/demo_18.h5": "6e208daea5415595227c3ee5499771f4faa11730c4d9e2bab6035083449837ed", + "demonstrations_readonly/demo_19.h5": "5db04be68d78e0486c2a6a37a0d6359b28222157731b01b1526f6c0babebc023", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "findings.md": "666651b14280de826833f1d650b717915a5d61810958f51451b7c483a7001925", + "handoff.md": "5cad83c97504c043d3e604e7faa2bbfecaea843ccf36cf7e0691022a5d6a708e", + "model_tool_manifest.yaml": "3f961e77ab73655ae8e718a54cf6499a8a17906ae42cda3bc945b876b4bc942c", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "requirements.txt": "99325d819b778b2594cfefe0cf2c69e311ff8160c009470ffa22a29c254ed53c", + "skills.md": "ac4377e3dadd77ee51797005c9eace6842bffe079862a4b63e01a927c9bcd74a", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "7185db2b236249c333fac11dea7d0f8c2709aaa8555a3033da692db1180bf9e1", + "exploration_ledger_hash": "639d6851dae38e3fb05118ca67a76b1bc200a70cc0998869a2ed21bd68bc045c", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "episode": 17, + "bundle_hash": "7185db2b236249c333fac11dea7d0f8c2709aaa8555a3033da692db1180bf9e1", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "7185db2b236249c333fac11dea7d0f8c2709aaa8555a3033da692db1180bf9e1", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "7185db2b236249c333fac11dea7d0f8c2709aaa8555a3033da692db1180bf9e1", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "7185db2b236249c333fac11dea7d0f8c2709aaa8555a3033da692db1180bf9e1", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..1693b8523d2e5dd3b69eeab5b86a1e8d2e2c8815 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/handoff.md @@ -0,0 +1,11 @@ +# Independent rehearsal handoff + +This is the final development candidate for SpinPenHora-v1, Agent-D20-E20-Compiled. Only this task's 20 authorized demonstrations and charged legal exploration informed it. No neural weights were trained or modified. Exact independent rehearsal results and hashes are saved outside the bundle in /workspace/exploration/rehearsalNN/; freeze selection belongs to the trusted runner. + +Runtime: import controller.py, call reset_episode(), then act(obs) for each legal observation. Outputs are one float32 16-element normalized hand command in native action order. Native horizon is 600 at 20 Hz; the runner's initial hold consumes step 1 and at most 599 program commands remain. The program returns None only at the horizon. The interactive Episode 16 hold disturbance is not in the controller. + +Only controller.py, sibling bank.npz, Python, NumPy and OpenCV are required. No network, model service, worker API, development agent, or demonstration file access is needed at runtime. The runner supplies verified demonstration files/manifest and environment lock. bank_provenance.json records the original bank compilation. Optional preparation scripts and obsolete synthetic checks were archived in /workspace/versions/offline_original/. + +The hand-action ordering inferred from demonstration qpos/action differences did not match the live controller; Episode 3 calibrated the actual permutation. Subsequent pursuit avoids the severe drift of the original draft. Interpolation, one-pose pursuit, continuous pen-axis scoring, and a curl offset all exhibited stalls. Final pursuit uses two-pose lookahead without the curl offset, with bounded measured-stall handling. + +Development native success returns have all been false. Saved images support retention and some repeated reorientation, but do not establish an official spin count or undisclosed success threshold. Brief-hold recovery is limited evidence; dropped-object recovery remains unverified. All rehearsal scoring must preserve native results. If sparse success is absent, apply /workspace/exploration/visible_rule.md and count ambiguous images false. Never claim official success from image judgment. diff --git a/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6cce7aef5f5f5697db0ab030e5bc96df9ef1a1dc --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,121 @@ +{ + "stage": "D20 plus legal E20 exploration; prepared for independent rehearsal", + "status": "candidate_for_rehearsal", + "task_id": "SpinPenHora-v1", + "worker": "Agent-D20-E20-Compiled", + "environment_episodes": 16, + "rehearsal_calls": 0, + "freeze_calls": 0, + "network_calls": 0, + "neural_finetuning": false, + "pretrained_weight_updates": false, + "frozen_weight_references": [], + "coding_model": { + "identity": "Codex / GPT-6 family as provided by session", + "exact_backend_weight_revision": "not exposed", + "weights_modified": false + }, + "tools_used": [ + "functions.exec orchestration", + "exec_command: bash, Python, cat, mkdir, find, attempted rg (unavailable)", + "view_image: local RGB contact sheets", + "worker_api.API.read_demo only; no API.call or environment methods", + "Python standard library importlib, pathlib, json, hashlib, sys, importlib.metadata", + "NumPy numerical statistics, bank assembly, interpolation", + "OpenCV deterministic resize, grayscale, sheet annotations", + "h5py via API.read_demo", + "worker_api.API.budget_status, next_episode, execute_actions, finish_episode; planned rehearse, score_rehearsal if needed, freeze", + "NumPy/OpenCV deterministic pen-axis diagnostics on authorized RGB; rejected from final controller" + ], + "runtime": { + "python": "3.10.20", + "numpy": "2.2.6", + "cv2_imported_version": "4.12.0" + }, + "offline_dependency_versions": { + "h5py": "3.16.0", + "HDF5": "2.0.0" + }, + "installed_not_used": { + "scipy": "1.15.3", + "torch": "2.10.0" + }, + "opencv_distribution_metadata": { + "opencv-python": "4.13.0.92", + "opencv-python-headless": "4.12.0.88" + }, + "sources": { + "task_contract": { + "path": "/task_contract.json", + "sha256": "6f1af1175ebcf0ba31dd252d60d75d9fa4464c3e3f5ce442794b00811bb78e18" + }, + "demo_manifest": { + "path": "/demo_manifest.json", + "sha256": "ed284010c5fec35f883c5a0b8b0a127ac3c86c67f9513c72bafb0af4479bc690", + "status": "released_for_offline_analysis", + "lineage_status": "pinned_comparator", + "verification": "supplied manifest; runner independently supplies verified manifest" + }, + "worker_api": { + "path": "/worker_api.py", + "sha256": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "demonstrations": { + "root": "/demonstrations", + "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" + ], + "fields_used": [ + "actions", + "obs/agent/qpos", + "obs/agent/qvel", + "obs/sensor_data/front_camera/rgb", + "obs/sensor_data/left_camera/rgb", + "obs/sensor_data/robot_camera/rgb", + "obs/sensor_data/top_camera/rgb" + ], + "scope": "only sanitized authorized fields", + "inspection_record": "../evidence/inspection_indices.json", + "bank_provenance": "bank_provenance.json" + } + }, + "derived_assets": { + "bank.npz": { + "sha256": "1eb5099d204b0d9ed5a454853fef8fe3eb11eede94e7b1a45620d750d806ad91", + "rows": 7980, + "type": "nonparametric demonstration observation/action table and empirical scaling; no neural weights", + "recipe": "build_bank.py", + "selection": "every labeled state from each of the 20 supplied demonstrations" + } + }, + "limitations": [ + "No native success observed in development", + "No validated dropped-object recovery", + "Occlusion and symmetric pen make signed full rotations ambiguous", + "Final results and bundle hashes recorded externally by independent rehearsal and freeze" + ], + "runtime_assets": [ + "controller.py", + "bank.npz" + ], + "action_mapping_evidence": "Episode 3 legal small pulses; /workspace/exploration/action_mapping.json" +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-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/SpinPenHora-v1/frozen/requirements.txt b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..197690c5196175789ae9a0a9409803834f4ac09c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/requirements.txt @@ -0,0 +1,2 @@ +numpy==2.2.6 +opencv-python-headless==4.12.0.88 diff --git a/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..b71046e65b0493e814585c675b975e0f4c09a9a0 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/skills.md @@ -0,0 +1,9 @@ +# Implemented controller mechanisms + +- Localize the current hand pose against all 7,980 authorized D20 labeled poses; rerank 64 nearby poses using normalized robot/top grayscale crops. +- Pursue the nearest forward demonstrated pose within an eight-row window, with two-pose lookahead and current-joint feedback. Relocalize near segment ends or far outside the selected path. +- Use the action/qpos permutation measured with legal Episode 3 pulses: action channels map to hand-qpos indices [0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15]. +- Bound normalized outputs to ±0.7. At low measured velocity for ten calls, advance to the nearby lookahead target only if its normalized posture distance is below one. +- Reset local phase and stall counters each episode; stop at native step 600. Runner supplies the charged initial hold. + +Observed capabilities are limited: retention and repeated reorientation in sampled legal views, and resumption after a short hold in Episode 16. No native success has been observed in development. No drop/regrasp capability, 3-D pose estimator, contact-force estimator, or success detector is provided. Grayscale crops are used for localization; the experimental pen-axis matcher was rejected after stalling. diff --git a/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SpinPenHora-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 140) & (r > 1.35*g) & (g > 1.25*b) & (g > 45) + yy,xx = np.nonzero(mask) + if len(xx) >= 5: + objects.extend([xx.mean()/im.shape[1], yy.mean()/im.shape[0], + xx.std()/im.shape[1], yy.std()/im.shape[0], + mask.mean(), 1.]) + else: + objects.extend([0.]*6) + return np.concatenate(thumbs), np.asarray(objects, dtype=np.float32) + +class Controller: + def __init__(self): + with np.load(Path(__file__).with_name('demo_bank.npz'), allow_pickle=False) as z: + self.bank = {k:z[k] for k in z.files} + first = np.flatnonzero(self.bank['frame'] == 0) + self.scene_centers = self.bank['obj'][first][:, [0,1,6,7,12,13]] + self.reset_episode() + + def reset_episode(self): + self.scene_cost = None + self.phase = 0. + self.last_step = 0 + self.last_action = np.zeros(22, np.float32) + self.terminal_count = 0 + self.finished = False + self.diagnostics = {'status':'draft_unrehearsed'} + + def act(self, obs): + step = int(obs.get('step_id', self.last_step + 1)) + if self.finished: + return None + if step >= 550: # Hold consumed native step 1; at most 549 decisions. + self.diagnostics = {'status':'native_horizon'} + return None + if step == self.last_step: + return self.last_action.copy() + if step < self.last_step: + self.reset_episode() + 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.shape != (23,) or v.shape != (23,) or not np.isfinite(q).all() or not np.isfinite(v).all(): + raise ValueError('Invalid proprioception') + pix,obj = image_features(obs['rgb']) + except (KeyError, ValueError, TypeError): + self.last_step = step + self.last_action = np.zeros(22, np.float32) + self.diagnostics = {'status':'invalid_observation_hold'} + return self.last_action.copy() + b = self.bank + if self.scene_cost is None: + centers = obj[[0,1,6,7,12,13]] + visible = np.repeat(obj[[5,11,17]], 2) + self.scene_cost = np.mean(((self.scene_centers-centers)/.04)**2 * visible,axis=1) + # Compare current legal observations across ALL demonstrations; no fixed demo selection. + dq = (b['q'] - q) / b['qscale'] + dist = np.mean(dq[:,:7]**2,axis=1) + .4*np.mean(dq[:,7:]**2,axis=1) + dist += .025*np.mean(((b['v']-v)/b['vscale'])**2,axis=1) + # Temporal context disambiguates descent versus withdrawal at similar poses. + prior = min(1., self.phase + 1./432.) + dist += .20*((b['phase']-prior)/.08)**2 + eligible = np.flatnonzero((b['phase'] >= self.phase-.06) & (b['phase'] <= self.phase+.12)) + if not len(eligible): + eligible = np.arange(len(dist)) + k = min(384,len(eligible)) + candidates = eligible[np.argpartition(dist[eligible],k-1)[:k]] + visual = np.mean(((b['pix'][candidates].astype(np.float32)-pix)/255.)**2,axis=1) + objects = np.mean(((b['obj'][candidates]-obj)/np.tile([.08,.08,.04,.04,.02,1.],3))**2,axis=1) + score = dist[candidates] + 25.*visual + .25*objects + .10*self.scene_cost[b['demo'][candidates]] + best = int(candidates[np.argmin(score)]) + # Blend only nearby temporal phases to avoid averaging opposite action stages. + near = np.abs(b['phase'][candidates]-b['phase'][best]) < .012 + candidates,score = candidates[near],score[near] + order = np.argsort(score)[:5]; ids=candidates[order]; scores=score[order] + weights=np.exp(-(scores-scores.min())/.08); weights/=weights.sum() + action = np.sum(b['a'][ids]*weights[:,None],axis=0) + observed_phase = float(np.sum(b['phase'][ids]*weights)) + self.phase = float(np.clip(.8*observed_phase+.2*prior, max(0,self.phase-.01), min(1,self.phase+.015))) + # Terminal-image resemblance is an imitation endpoint, never a success detector. + terminal = b['phase'][best] >= .995 and dist[best] < .3 and float(np.min(score)) < .5 + self.terminal_count = self.terminal_count+1 if terminal else 0 + self.last_step=step + self.last_action=np.clip(action,-1.,1.).astype(np.float32) + self.diagnostics={'status':'observation_retrieval','phase':self.phase,'distance':float(scores[0]),'scene_cost':float(self.scene_cost[b['demo'][best]])} + if self.terminal_count >= 5: + self.finished = True + self.diagnostics['status']='demonstration_endpoint_resemblance' + return None + return self.last_action.copy() + +_controller = None + +def reset_episode(): + global _controller + if _controller is None: + _controller = Controller() + else: + _controller.reset_episode() + +def act(obs): + global _controller + if _controller is None: + reset_episode() + return _controller.act(obs) diff --git a/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..b5eb6485f3bf4283333ce34f2ca0a5beb62716d3 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "SqueezeClay-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": 417, + "fields": [ + { + "path": "actions", + "shape": [ + 417, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 418, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 418, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 418, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 418, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 418, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 418, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2d147b58af0a340f8829723f37bda008d6b74c9f1c79250d0abad13ce3463b51", + "source_sha256": "a32c4ff5d5c647da1934c4bf13e761a69c7f151eeb6ba95b89336068cd2d4afb", + "view_sha256": "f18a42639a43689ddb835b89c930c5cbb9d7bd96efb507e77df717344cc17bd3" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 447, + "fields": [ + { + "path": "actions", + "shape": [ + 447, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 448, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 448, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 448, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 448, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 448, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 448, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2880d0bb4010d8c8d0ce56d1e4822e2a962fb3a291f5235f495b0d55f9572a64", + "source_sha256": "58ca5e37f9d414026d513fc0404f24a3f5c75ca1abd3c3d54c073ed3dc489bc5", + "view_sha256": "9886eabcadf1321149ea92a0f5eb70d05996d388ebbba6605fec9ea6f5ec608a" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 456, + "fields": [ + { + "path": "actions", + "shape": [ + 456, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 457, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 457, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 457, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 457, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 457, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 457, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "91f350d0c63641ed289c3d8bdead1a1657a6d1cf8e188bb48539c456a9868070", + "source_sha256": "8e846789ae0487e4b47aaf58d40ffeece28f406f3a51f1650721677aea41383c", + "view_sha256": "aef7fb0926496a0f790f13cb10ebb7bf3bce0c625c0ad9dde6544d0e3293f0ec" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 428, + "fields": [ + { + "path": "actions", + "shape": [ + 428, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 429, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 429, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 429, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 429, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 429, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 429, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "543088f15522441a3b9938cb19f37a673f7b3d5e10489edd57099816baafad33", + "source_sha256": "8ca00761a60782703b97ccc333eb1a517c43e3c807d5c7be1d033adb7981e8b5", + "view_sha256": "cceb79571412c7fcace1e89f7f5ce5532bc29ca9a81f6684b0da1d3899fa0463" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 409, + "fields": [ + { + "path": "actions", + "shape": [ + 409, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 410, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 410, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 410, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 410, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 410, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 410, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "51a837902db2fd19c2e0b15b61491ae74608a31eaaf271febf1b73cbc4728ddd", + "source_sha256": "22704300c3edca019125a01ea7aff06578f3798ab5d8fccb5f2cdc58ca1bc73f", + "view_sha256": "0c32f776b96371962aaf9b4c5bc51f22cb48d9fc1fc8880060d4d26247316355" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 435, + "fields": [ + { + "path": "actions", + "shape": [ + 435, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 436, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 436, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 436, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 436, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 436, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 436, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "f567d78ee6277fa001cdb4631377e59bac2ac7fd6b52d0591955eb81fd76bf9d", + "source_sha256": "2bc3ccebcae1353861d7f527eea753c03b64fdb2f3491c57287127176d411700", + "view_sha256": "784f14fdc42739b919e70011c9232de42e8483e193e598bb0ff68b4e9e8ed373" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 424, + "fields": [ + { + "path": "actions", + "shape": [ + 424, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 425, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 425, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 425, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 425, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 425, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 425, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "f424a20e6f630d9b9b177f97055a293436a9cb19a18872c8f144073a06cd8b33", + "source_sha256": "478f366895c4b34e6dad06e13dfef7f14d8cbe184f065c3a3efdb58797c42208", + "view_sha256": "2d7cd48c203aaced839ae8618f1f7f1cbe52ae725d675637ff078d6fc735cf22" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 451, + "fields": [ + { + "path": "actions", + "shape": [ + 451, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 452, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 452, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 452, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 452, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 452, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 452, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d0aaa74c23ad82a260a97ce3777134f8f63b092dc3d9b02f245744cecdfd76f0", + "source_sha256": "ed0d87f763d2fa2e7a0f5f09a2dfaac8a96adf8f1e2ce4cac5371c2cd3612e6d", + "view_sha256": "251c45cd44006ab471615c460ad4d2436a1f33fb3966af409c01179213fd8601" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 420, + "fields": [ + { + "path": "actions", + "shape": [ + 420, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 421, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 421, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 421, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 421, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 421, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 421, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "362458b4d356601a6e874c2cc5c0b56e89e5933ce592adeaa82c3d91a5d7b65d", + "source_sha256": "9132f923bf58e7515432b48c519c9b30a2ceab0cb7243954dfe76d9a4de655e8", + "view_sha256": "f754df1ca5b1ba5393b2aa733d9b08853a8a43776195c6069f5ebae35a3e1e1d" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 452, + "fields": [ + { + "path": "actions", + "shape": [ + 452, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 453, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 453, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 453, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 453, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 453, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 453, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "db97ad761b7cbfdc55ca0be9b130f7bce5f1f1b33049fadd1c76c6f744efc75d", + "source_sha256": "90f24599ec91cfd36bcc007c65ce6b15b872f4f9054af96abe524c26c67cbd16", + "view_sha256": "c945e5e7a7fbe72b5b81b4a785d88ea6f78770cf0da0097b9c1f428598919919" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 427, + "fields": [ + { + "path": "actions", + "shape": [ + 427, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 428, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 428, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 428, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 428, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 428, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 428, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "bca8e4734f2a618fb9ce6df7c14e9eb363d07319295d90ccdc9971f261b64a78", + "source_sha256": "095dcfef5cf4b23474fcd348fcc53c3367f3218ed0d9121ef64a5295480e37b2", + "view_sha256": "4bd39dcaf8719b00729e66020106b7b7d3457ebe0d5b8774c09429e0c2413dc1" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 422, + "fields": [ + { + "path": "actions", + "shape": [ + 422, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 423, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 423, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 423, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 423, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 423, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 423, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9c544abd7653c5efc66d6b4079a71ac3dcf2032380f2c0e6a977d7496d134fd4", + "source_sha256": "f0b357e784e79094948b971f4b7d9799d8b4b41b0b5f9449c6cdd953b7554449", + "view_sha256": "3142b99039a13588596f11f865855694053a4618d7a77cd63189e32a7826269f" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 445, + "fields": [ + { + "path": "actions", + "shape": [ + 445, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 446, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 446, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 446, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 446, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 446, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 446, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c7978e329cb5da176eca537791c092fb8141ed5c8ccad69abd95f819c77f6459", + "source_sha256": "54125803c5e3bc622e24940e560489e9083e76d7e328d8498054e8c020b2f8eb", + "view_sha256": "ba8a0a09f868bec2e8239602fb239e8a77c1e3bea3cb58325b4b7433ae1a2357" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 416, + "fields": [ + { + "path": "actions", + "shape": [ + 416, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 417, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 417, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 417, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 417, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 417, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 417, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "4e1b0e6a3bd80927e3b0b1ef264f8074028e5644716ecafb7e55e4aca7f6793d", + "source_sha256": "0ea405f11776e3a3570a743b6b9319d8676a986fee5112f980f8689e6ff47568", + "view_sha256": "eb2ab83189c6bf5ffb44bb686ef607d68e3a6d298e35fc49b4714f0184d6562b" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 439, + "fields": [ + { + "path": "actions", + "shape": [ + 439, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 440, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 440, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 440, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 440, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 440, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 440, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2cd12524a0202bc484aec62c33f0354ed757588daeba3e873c7f8df986535807", + "source_sha256": "0d0d42ed72b9adea355627c7efff935f3a8b19d459570c58b56f610739001630", + "view_sha256": "e43a77d9fb4c490535ee052683d841184895041ff11b52d3bc6652b174efebd6" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 415, + "fields": [ + { + "path": "actions", + "shape": [ + 415, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 416, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 416, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 416, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 416, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 416, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 416, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "5f1ca0240567a217cc6ea15cf0712e8f632b6873c913a3a05d84bebad7bbeb98", + "source_sha256": "2dc028adb019f98595964cf3e690c85a31f4097cc771f664127ffc9df42434eb", + "view_sha256": "c38049fc435dd6c6ce21954853554ebfb4f22b6658027f878ab330eec229ae6e" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 432, + "fields": [ + { + "path": "actions", + "shape": [ + 432, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 433, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 433, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 433, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 433, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 433, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 433, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "50707242664bdae8d5a520230ed9939d6d10c5c1efff8481731c251cf95325b7", + "source_sha256": "81dd9d352d625a22869b0c500e1e14c0c502d42465b40225200846904d097d29", + "view_sha256": "1c04b4227b9178362f4c8b885e9e65a8183586fee6d9444404039557b4a74e49" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 417, + "fields": [ + { + "path": "actions", + "shape": [ + 417, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 418, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 418, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 418, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 418, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 418, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 418, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "66cad3b691a55fa3d9aebd83119d78fdc0acec059b908dfaec54b0b7a2df2f5c", + "source_sha256": "2f27c7108f93beeec95977f6fa6d85c2234182d5a9a2b7915fc137356947d598", + "view_sha256": "869a849f459a672f6318262f3f96186312cf6862ce7f3d96822f0c9d7ab848c6" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 457, + "fields": [ + { + "path": "actions", + "shape": [ + 457, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 458, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 458, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 458, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 458, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 458, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 458, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6c1c886be096e76b81a33620626db6377afc0cb184ea29ba34b1508dffd3ad14", + "source_sha256": "66ab0c2ce2f6ac852d170e8b6ce279423500b57cd77af4527830100018073f04", + "view_sha256": "286242e01ec40ddc676266c7256efb515d05cc8fc6e6092fcbf269783d3f8f9f" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 428, + "fields": [ + { + "path": "actions", + "shape": [ + 428, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 429, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 429, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 429, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 429, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 429, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 429, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "50dd8f6a5d7f92c98918b3b291a0453b5e57d91d1dead8cc4831b5c642ca6315", + "source_sha256": "e67a3a5fd0337f49a1b0a01fc0d59ab0ce4f9962542f49b4c7ddfec32c2cbbeb", + "view_sha256": "38ce358047b31a8539ca42e89422b27fc7a569159685d79be9c9292059f05571" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-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/SqueezeClay-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..37c56bc20ccb3f0a5e7e3f4b461e02240add38c3 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/findings.md @@ -0,0 +1,21 @@ +# Authorized live exploration +Budget initially 0/20. Read task contract and protocol. Only API interaction. + +Episode 1: baseline retrieval policy. Exploration wrapper initially misunderstood execute_actions response nesting, failing after a single action; resumed same slot at latest observation without replaying that action. At steps 41/81 the hand approaches and closes; at 121 it begins lifting. No official success yet. Actions and intermediate RGB/proprioception are saved under ep01. + +Preregistered visible judgment: only clear clay folding around both cylinder flanks with the plate visibly withdrawn counts true; ambiguous images count false. Native sparse success, if supplied, is reported separately and never inferred from imitation endpoint. + +Episode 1 completed: native terminated=true, success=true at step 427. Final front and left images saved in ep01/final_views.png and raw final.pkl show plate separation and folded clay. Baseline action audit: closure 76–108; lift 113–181; press 284–325. Maximum retrieval score 0.205. Localization uses RGB thumbnails and clay color moments; no metric pose or kinematics inferred. Grasp remains stable through transport. No recovery was needed; recovery is unvalidated. Program failure was confined to the exploration response-unwrapping bug, corrected in run_interactive.py. Episode 2 is an unmodified independent rehearsal. + +Episodes 3 and 4: deliberately ended at step 190 to isolate nominal grasp/lift; native success=false, not full-task successes. Final front images visually inspected: plate held level and elevated in both. These establish a practical plan with episode 1 and the independently successful baseline rehearsal (episode 2, hash d32e70368dcbc606b6af263624147c09979dcf31325e9d46f91c6f84c603691a). + +Revision B: retains current RGB/qpos/qvel retrieval, adds 0.10 times initial clay-center mismatch as a scene-consistency cost. Initial centers from three cameras are compared to authorized demo initial centers at scale .04 image widths/heights. Missing orange masks get zero weight. All demos remain eligible; no fixed trajectory is replayed. Also uses an internal increment if step_id is omitted. No neural weights changed. Source in versions/scene_consistency/controller.py. +Episode 5: revision B native success=true, terminated at step 393. Front press image at 321 shows centered plate and folded flanks. Cannot infer causal improvement from different placements. Episode 6 repeats B. + +Episode 6: revision B native success=true at step 438. Initial scene mismatch was higher than ep5; front image at 281 showed slight plate offset, but native success later confirmed task completion. This is retained as localization limitation evidence, not omitted because the run succeeded. + +Episodes 7–12 are preregistered focused recovery probes, all intentionally end at step 155. During steps 25–29, add +/-0.15 normalized translation to the policy command on x, y, z respectively (7:+x, 8:-x, 9:+y, 10:-y, 11:+z, 12:-z). Actual commands are logged; all within bounds. No reset/state intervention. Nominal candidate does NOT contain these perturbations. +Episodes 7,8,9,10 ended with native success=false (incomplete). Final front RGB visually inspected for each: plate held and lifted; negative-x run was less advanced in lift at step 155. Recovery evidence covers only brief approach translation disturbances; no dropped-plate, rotational, or post-contact recovery established. +Episodes 11 and 12: native success=false at planned step-155 stop; final front RGB visually inspected, showing held/elevated plate for both vertical probes. No general recovery claim is warranted. All six perturbation tests preserve zero commanded rotation; measured Cartesian displacement is unknown because these are normalized PD deltas, not direct position changes. + +At the end of episode 12, budget_status reported used=12, remaining=8, active=false. Candidate B is retained based on native-successful full runs 5/6 and the focused recovery evidence. Episodes 13–20 are reserved for independent exact-bundle validation, including mandatory 19 and 20. Documentation is prepared before this series; results are appended externally without altering the bundled behavior. diff --git a/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..334ab7b33a4dd553e5f2ebf3a0e1c7c59cd39756 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/freeze_manifest.json @@ -0,0 +1,130 @@ +{ + "files": { + "__pycache__/build_bank.cpython-310.pyc": "ef328b0151adb7f32fa326dfd1d1b9cd6a906790f8005c7a7edc87528baef10a", + "__pycache__/check_synthetic.cpython-310.pyc": "d158c9458a49b0f491e6c137326e6d72c1b2bb6df6c5c540c6c4da685132e8ac", + "__pycache__/controller.cpython-310.pyc": "5f1f85fb60c0c7378d0218d8c386ebdac5648ad2a5a37a1aaa7620163310ca89", + "bank_provenance.json": "0654e847428278f4f03fe37ed05197a84683ac4d34cce4a05286078c6e7a9ac5", + "build_bank.py": "d4b8f274f105a78e0eaa758ced9e789369420ec9381d48efea3f0a8ffd598671", + "check_results.json": "5a141494640bb035a89f11e023579dbb80134c35e5c2ea30f90f4bc3ddce8644", + "check_synthetic.py": "04e52230db33fa3607db3f393331d5a563dd18c31c88780760ce8596c0c2fc40", + "controller.py": "24deb8562130023473ce99ac2a5c0e403df80eea8664bcd9262cd81978366606", + "demo_bank.npz": "4a73daf661fb74c13cb5be26cf9f73808378c911174be93a5112f6785ee06564", + "demo_manifest.json": "4e7537a62c9c422e174f536254fa81ef6d3b917d0d7e6ee192b28517b9d3199f", + "demonstrations_readonly/demo_00.h5": "f18a42639a43689ddb835b89c930c5cbb9d7bd96efb507e77df717344cc17bd3", + "demonstrations_readonly/demo_01.h5": "9886eabcadf1321149ea92a0f5eb70d05996d388ebbba6605fec9ea6f5ec608a", + "demonstrations_readonly/demo_02.h5": "aef7fb0926496a0f790f13cb10ebb7bf3bce0c625c0ad9dde6544d0e3293f0ec", + "demonstrations_readonly/demo_03.h5": "cceb79571412c7fcace1e89f7f5ce5532bc29ca9a81f6684b0da1d3899fa0463", + "demonstrations_readonly/demo_04.h5": "0c32f776b96371962aaf9b4c5bc51f22cb48d9fc1fc8880060d4d26247316355", + "demonstrations_readonly/demo_05.h5": "784f14fdc42739b919e70011c9232de42e8483e193e598bb0ff68b4e9e8ed373", + "demonstrations_readonly/demo_06.h5": "2d7cd48c203aaced839ae8618f1f7f1cbe52ae725d675637ff078d6fc735cf22", + "demonstrations_readonly/demo_07.h5": "251c45cd44006ab471615c460ad4d2436a1f33fb3966af409c01179213fd8601", + "demonstrations_readonly/demo_08.h5": "f754df1ca5b1ba5393b2aa733d9b08853a8a43776195c6069f5ebae35a3e1e1d", + "demonstrations_readonly/demo_09.h5": "c945e5e7a7fbe72b5b81b4a785d88ea6f78770cf0da0097b9c1f428598919919", + "demonstrations_readonly/demo_10.h5": "4bd39dcaf8719b00729e66020106b7b7d3457ebe0d5b8774c09429e0c2413dc1", + "demonstrations_readonly/demo_11.h5": "3142b99039a13588596f11f865855694053a4618d7a77cd63189e32a7826269f", + "demonstrations_readonly/demo_12.h5": "ba8a0a09f868bec2e8239602fb239e8a77c1e3bea3cb58325b4b7433ae1a2357", + "demonstrations_readonly/demo_13.h5": "eb2ab83189c6bf5ffb44bb686ef607d68e3a6d298e35fc49b4714f0184d6562b", + "demonstrations_readonly/demo_14.h5": "e43a77d9fb4c490535ee052683d841184895041ff11b52d3bc6652b174efebd6", + "demonstrations_readonly/demo_15.h5": "c38049fc435dd6c6ce21954853554ebfb4f22b6658027f878ab330eec229ae6e", + "demonstrations_readonly/demo_16.h5": "1c04b4227b9178362f4c8b885e9e65a8183586fee6d9444404039557b4a74e49", + "demonstrations_readonly/demo_17.h5": "869a849f459a672f6318262f3f96186312cf6862ce7f3d96822f0c9d7ab848c6", + "demonstrations_readonly/demo_18.h5": "286242e01ec40ddc676266c7256efb515d05cc8fc6e6092fcbf269783d3f8f9f", + "demonstrations_readonly/demo_19.h5": "38ce358047b31a8539ca42e89422b27fc7a569159685d79be9c9292059f05571", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "findings.md": "947f40b3265f4770013d9beb65b529803aeb41fc0152ae048b52785fe3f54619", + "handoff.md": "e9a0d4d2f7cb194efffbc708fc42026c605b38a36afd719e407614bd961f3a41", + "model_tool_manifest.yaml": "fbc42e180f85efa4c3bbe5dfbd3101c538837b2191051ced43708cf43cda6fc3", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "skills.md": "3dbf0e9bbc6d93935035cda40695e6be41dbf520b23bd40a6b01001f17d41821", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "exploration_ledger_hash": "720822c3e49d3306f5a9a19c4987457b65aed577d636078145d385b071ff67bd", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "episode": 2, + "bundle_hash": "d32e70368dcbc606b6af263624147c09979dcf31325e9d46f91c6f84c603691a", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 13, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 14, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 15, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 16, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "657dd245eb9b2fb9d804afd18347310ef2c3f66973d97aefc97a6c4bb19dbec5", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..2bcd89553e6eb6023e35ec12f22db408d7715312 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/handoff.md @@ -0,0 +1,11 @@ +# Runnable handoff + +Entrypoints: controller.reset_episode() and controller.act(obs). Deploy this entire directory. Required runtime assets are controller.py and demo_bank.npz; dependencies are NumPy and OpenCV, already available in the independent baseline rehearsal. No network, external model, development agent or neural weights are needed. + +Runner owns initial hold. Decisions use native step_id 1..549 and stop at 550. If step_id is omitted, an internal counter advances. Actions have 22 normalized components in contract order: xyz, root-aligned rotation, 16 dex joint deltas. All expert rotation labels are zero. The controller validates observations and bounds output; invalid observations produce zero-delta hold. Return None is a stop request, never a success claim. + +The bank was compiled exclusively from the task's 20 authorized demonstrations. Feature extraction uses front, top and left camera RGB plus qpos/qvel. Current nearest observations across all demos supply an action blend. Initial clay centers supply only a weak consistency cost, not a trajectory or reset lookup. + +Baseline independent rehearsal episode 2 was valid and natively successful. Revised behavior completed interactive episodes 5 and 6 with native success at steps 393 and 438. Focused stage/recovery tests are incomplete task episodes and must not be counted as task successes. See findings.md for scope. Final independent rehearsal records and freeze result are saved outside this bundle under /workspace/exploration; the trusted runner selects exact rehearsed versions. This handoff is prepared before that final validation series, not a claim that it already passed. + +Known limits: no metric pose calibration, force estimate, numerical wrap-angle measurement, explicit regrasp, rotational disturbance recovery, or certified endpoint detector. Images and action logs for legal exploration are preserved in /workspace/exploration. Actual original D20 analysis remains in /workspace/demo_analysis.md and /workspace/evidence. diff --git a/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cdca2c28d8fb4c167c8d4de128c53694e07111a1 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,84 @@ +{ + "status": "interactive_validated_pre_final_independent_validation", + "task": "SqueezeClay-v1", + "python": "3.10.20", + "runtime_dependencies": { + "numpy": "2.2.6", + "opencv-python": "4.13.0.92" + }, + "offline_dependencies": { + "numpy": "2.2.6", + "opencv-python": "4.13.0.92", + "h5py": "3.16.0" + }, + "tools_used": [ + "Python standard library", + "NumPy", + "OpenCV resize/color masks/JPEG sheets", + "h5py through worker_api.API.read_demo", + "shell filesystem tools", + "functions view_image", + "trusted worker_api.API exploration and independent rehearsal" + ], + "tools_not_used": [ + "simulator", + "task expert/controller", + "internet", + "torch", + "SciPy", + "neural training" + ], + "model": { + "coding_model": "provider-managed model; exact checkpoint unavailable", + "weights_modified": false, + "pretrained_tool_weights": [], + "frozen_weight_references": "none loaded; no external neural weights" + }, + "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" + ], + "source": "authorized /demonstrations only", + "manifest_sha256": "bd0a3534b94c5f4e2807af2a13d225c60b171da92fc018a95148ec72b9294907", + "contract_sha256": "89fe5153dc4a4b11d0b545cf51582e75dda880e0b9c51f9ad327959e0974fc5c", + "worker_api_sha256": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e", + "derived_artifact": "demo_bank.npz: all observed qpos/qvel, RGB descriptors, labels, terminal synthetic zero labels", + "neural_finetuning": false + }, + "validation": "Baseline independent episode 2 valid and native-successful. Revised interactive episodes 5/6 native-successful. Focused incomplete stage/recovery probes documented in findings.md. Final independent validation records are external to this pre-validation snapshot.", + "limitations": [ + "No exact wrap-angle/force measurement", + "No general dropped-plate or rotation recovery", + "Initial scene cue assumes clay center remains meaningful", + "Final exact-bundle results live in trusted rehearsal records" + ], + "runner_supplied_separately": [ + "verified demo manifest", + "common environment lock" + ], + "artifact_sha256": { + "controller.py": "24deb8562130023473ce99ac2a5c0e403df80eea8664bcd9262cd81978366606", + "demo_bank.npz": "4a73daf661fb74c13cb5be26cf9f73808378c911174be93a5112f6785ee06564", + "build_bank.py": "d4b8f274f105a78e0eaa758ced9e789369420ec9381d48efea3f0a8ffd598671", + "bank_provenance.json": "0654e847428278f4f03fe37ed05197a84683ac4d34cce4a05286078c6e7a9ac5" + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..da67d84a7a07e83a8336abfd2c0fefeebfcd2d6e --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/skills.md @@ -0,0 +1,9 @@ +# Demonstration-derived task skills + +1. Approach the plate handle with the demonstrated fixed wrist orientation. +2. Close the dexterous hand, lift the plate, then transport toward the observed clay. +3. Use current three-camera RGB and proprioception to retrieve actions throughout alignment, press and withdrawal. +4. Retain initial clay image centers as a weak scene-consistency cue during occlusion. All twenty demo trajectories remain available each step. +5. Adapt phase to observed pose; brief approach translation perturbations were probed in exploration. This is not a general regrasp or dropped-object recovery skill. + +No geometry, force, hidden state, success detector, neural model or simulator is used at runtime. Terminal resemblance is only a stopping heuristic. The native horizon is 550 including the runner's initial hold. diff --git a/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/SqueezeClay-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<=start180:candidates.append([x,y]) + if len(candidates)!=1:return None + return np.asarray(candidates[0],np.float32) + +def track_wrist(image, previous=None): + im=np.asarray(image) + if im.ndim==4:im=im[0] + gray=cv2.cvtColor(cv2.resize(im,(480,640)),cv2.COLOR_RGB2GRAY).astype(np.float32) + previous=np.array([288,320]) if previous is None else previous + x0=max(30,int(previous[0])-28);x1=min(450,int(previous[0])+29) + y0=max(30,int(previous[1])-28);y1=min(610,int(previous[1])+29) + yy,xx=np.indices((55,55));r2=(xx-27)**2+(yy-27)**2 + best=None + for rad in (18,20,22): + inside=r2<(rad*.75)**2;ring=(r2<(rad+3)**2)&(r2>(rad+1)**2) + kernel=ring.astype(np.float32)/ring.sum()-inside.astype(np.float32)/inside.sum() + response=cv2.filter2D(gray,-1,kernel)[y0:y1,x0:x1] + _,score,_,loc=cv2.minMaxLoc(response) + if best is None or score>best[1]:best=(np.array([loc[0]+x0,loc[1]+y0],np.float32),score) + if best[1]<50:return None + return best[0] + + +CAMERAS = ('front_camera', 'top_camera') +_bank = None +_quiet = 0 +_calls = 0 + + +def visual_feature(image): + """Fixed features, no learned weights. Preserve each camera's orientation.""" + im = np.asarray(image) + if im.ndim == 4 and im.shape[0] == 1: + im = im[0] + if im.ndim != 3 or im.shape[-1] != 3 or min(im.shape[:2]) < 8: + raise ValueError('Expected HWC RGB image') + if not np.isfinite(im).all(): + raise ValueError('Nonfinite RGB') + # Soft achromatic bright foreground emphasizes metal and robot over wood. + f = im.astype(np.float32) / 255.0 + bright = np.clip((f.min(axis=2) - 0.35) / 0.45, 0, 1) + bright *= np.clip(1 - 2 * (f.max(axis=2) - f.min(axis=2)), 0, 1) + rgb = cv2.resize(f, (32, 32), interpolation=cv2.INTER_AREA) + mask = cv2.resize(bright, (32, 32), interpolation=cv2.INTER_AREA) + return np.concatenate((rgb.reshape(-1) * 0.5, mask.reshape(-1))).astype(np.float32) + + +def reset_episode(): + global _quiet, _calls, _extension, _scene_distance, _pivot, _wrist, _align_done + _quiet = 0 + _calls = 0 + _extension = 0 + _scene_distance = None + _pivot = None + _wrist = None + _align_done = False + + +def _load(): + global _bank + if _bank is None: + with np.load(Path(__file__).with_name('demo_bank.npz'), allow_pickle=False) as f: + _bank = {k: f[k] for k in f.files} + return _bank + + +def act(obs): + """Return one 22-vector in the contract's sole action-part order, or finish. + + Never performs the runner-owned initial hold. step_id is only a budget guard. + Neighbors are recomputed from current legal observations on every call. + """ + global _quiet, _calls, _extension, _scene_distance, _pivot, _wrist, _align_done + _calls += 1 + if int(obs.get('step_id', _calls)) >= 200 or _calls > 199: + return None + try: + p = obs['proprioception'] + q = np.asarray(p['agent/qpos'], dtype=np.float32).reshape(-1) + v = np.asarray(p['agent/qvel'], dtype=np.float32).reshape(-1) + if q.size != 23 or v.size != 23 or not np.isfinite(q).all() or not np.isfinite(v).all(): + raise ValueError('Invalid proprioception') + vis = np.stack([visual_feature(obs['rgb'][c]) for c in CAMERAS]) + except (KeyError, ValueError, TypeError): + _quiet = 0 + return np.zeros(22, dtype=np.float32) + b = _load() + if _scene_distance is None: + initial = b['visual'][b['segments'][:, 0], 1] + per_demo = np.mean((initial - vis[1]) ** 2, axis=1) / 0.01 + pivot = locate_pivot(obs['rgb']['top_camera']) + _pivot = pivot + if pivot is not None: + demo_pivots = np.load(Path(__file__).with_name('geometry_bank.npy'), allow_pickle=False) + per_demo += 0.3 * np.sum((demo_pivots - pivot) ** 2, axis=1) / 2500.0 + _scene_distance = np.repeat(per_demo, b['segments'][:, 1] - b['segments'][:, 0]) + if not _align_done and _pivot is not None: + _wrist = track_wrist(obs['rgb']['top_camera'], _wrist) + if _wrist is None or _wrist[1] >= _pivot[1] - 10 or _calls > 60: + _align_done = True + # Joint scales have a floor so almost constant hand joints do not dominate. + qdist = np.mean(((b['q'] - q) / b['qscale']) ** 2, axis=1) + vdist = np.mean(((b['v'] - v) / b['vscale']) ** 2, axis=1) + idist = np.mean((b['visual'] - vis) ** 2, axis=(1, 2)) / 0.01 + distance = 0.35 * qdist + 0.05 * vdist + 4.0 * idist + 2.0 * _scene_distance + # One nearest observation per demonstration avoids overcounting long holds. + best = np.array([lo + np.argmin(distance[lo:hi]) for lo, hi in b['segments']]) + best = best[np.argsort(distance[best])[:3]] + if distance[best[0]] > 20.0: + _quiet = 0 + return np.zeros(22, dtype=np.float32) + weights = np.exp(-(distance[best] - distance[best[0]]) / 0.08) + weights /= weights.sum() + action = np.sum(b['action'][best] * weights[:, None], axis=0) + if not _align_done and _pivot is not None and _wrist is not None: + if 'wrist_pixels' not in b: + b['wrist_pixels'] = np.load(Path(__file__).with_name('wrist_bank.npy'), allow_pickle=False) + pivots = np.load(Path(__file__).with_name('geometry_bank.npy'), allow_pickle=False) + b['pivot_pixels'] = np.repeat(pivots, b['segments'][:, 1] - b['segments'][:, 0], axis=0) + target_relative_x = np.sum((b['wrist_pixels'][best, 0] - b['pivot_pixels'][best, 0]) * weights) + error = target_relative_x - (_wrist[0] - _pivot[0]) + action[0] += np.clip(0.002 * error, -0.04, 0.04) + # Quiet end-pose recognition is heuristic; it is not a success measurement. + terminal_like = np.max(np.abs(action)) < 0.003 + _quiet = _quiet + 1 if terminal_like and np.max(np.abs(v)) < 0.08 else 0 + if terminal_like: + _extension += 1 + if _extension <= 24: + action = np.zeros(22, dtype=np.float32) + action[1] = -0.06 + elif _quiet >= 12: + return None + return np.clip(action, -1.0, 1.0).astype(np.float32) diff --git a/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..810cbe5546f5a44777bd8b114d3af19764037e45 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "TurnOnFaucet-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": 88, + "fields": [ + { + "path": "actions", + "shape": [ + 88, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 89, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 89, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 89, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 89, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 89, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 89, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "b705c1df130a2c06a726f4a3a10b1493a2203849fd543989dc20808ceb9d582a", + "source_sha256": "1dcdd6d3c62fdbf7b66b3c3740ae9651393fe567c6c80416473024e0a49f11cb", + "view_sha256": "a2d55dc8451d8086c976d4b7a44a071aee0aaad2fb445d319ba6a5930086d473" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 113, + "fields": [ + { + "path": "actions", + "shape": [ + 113, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 114, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 114, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 114, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 114, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 114, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 114, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "291a831ee561b1e259c2c46f19a175a5e27129186b4b22fc0fd3e0003c7b3366", + "source_sha256": "ff5b7bc1da720b60b4056335832fa256da79bcea48885740a96ef8eebfff850c", + "view_sha256": "1731637ce8812a176d6860c857e0637496529968f40f8f9777c213b24595131b" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 90, + "fields": [ + { + "path": "actions", + "shape": [ + 90, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 91, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 91, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 91, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 91, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 91, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 91, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "ec5e50a429084bf39ee2c93b06bc0fb96fad60af5c125b6a68041b2b900a31e7", + "source_sha256": "98c797679b82203423f93d9cb5aeb654e1dc75c852eaf74a9dc442c3a48aa284", + "view_sha256": "adcf62e9809e4dd24493a0a5408a349e837363e1c3c39d7e7819465e2cb481ab" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 124, + "fields": [ + { + "path": "actions", + "shape": [ + 124, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 125, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 125, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 125, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 125, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 125, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 125, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0d9b3109f4b90ca9a1cadb26ba1b8dd7a22940c3513c316bb2389676694c0923", + "source_sha256": "ca3214c11f24580efe3b36e8b592679a763f9c9d18483f4b881cf55bf9be827c", + "view_sha256": "fd423cd4cc2bc0aab56dd0d28f40e6db1e1247b4f0ee8186a1c67c735cfb3f62" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 99, + "fields": [ + { + "path": "actions", + "shape": [ + 99, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 100, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 100, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 100, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 100, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 100, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 100, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "45ddc4e1c944d47401365d9bed369457002a3e7400812ae340f25f206056979b", + "source_sha256": "12dcf1da66af3168a24195609e64d1e536fa32989732fc45fc8f1944f8202f8b", + "view_sha256": "0cce3dc852cc96fd908cac9f72fb62737be0d7868690d7528fbcbaf7077b56af" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 115, + "fields": [ + { + "path": "actions", + "shape": [ + 115, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 116, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 116, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 116, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 116, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 116, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 116, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "77b7da112b982012009214d0981909b5acab83445ed6c2ee496fde52010ee352", + "source_sha256": "d7e2e380151101cdbc52e4db5b7e57a40168a36851180897d6adfde2f9fa4892", + "view_sha256": "584596f89240247079f98927c476d4a60d8ead6b27a9ce3df57deae1f0a265ed" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 94, + "fields": [ + { + "path": "actions", + "shape": [ + 94, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 95, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 95, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 95, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 95, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 95, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 95, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0126c49c2aefd56dc93dcb6134f8db82a2d325befa9f21eafdcf8ade278ea7f0", + "source_sha256": "11b411b69ccf9c4de211bdfebcca5314699d8003898abbd12bc56c536b901538", + "view_sha256": "e551c694120b2a43616ae970ee4dbe9057c91d9fbd232d0f97331caf8b668978" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 110, + "fields": [ + { + "path": "actions", + "shape": [ + 110, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 111, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 111, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 111, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 111, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 111, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 111, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "25faa0ff55994fcab4d774fc1f2f514cc11edbedc4b41c9454aa38e99d6ae3da", + "source_sha256": "f9a360745e53cd3b8261f17837be2e1bd8ca485359163ddf10b99f50d7aaa25d", + "view_sha256": "b35749bd275114570b0b1acf091c615e6eb66203805d656c025483fc106933b4" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 89, + "fields": [ + { + "path": "actions", + "shape": [ + 89, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 90, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 90, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 90, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 90, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 90, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 90, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c0f251142baf42e7da6ba294ac07e567e29f839c34f41a1ded5a0b3943701865", + "source_sha256": "015eac56e41f67e8da592937cd3b4cd04e623e21946391e1b89244d08e0e830d", + "view_sha256": "084fd6bd8c4fb51b7c0ee060ac980d1a4b07939d0200e37ec0d58ee968327fd6" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 116, + "fields": [ + { + "path": "actions", + "shape": [ + 116, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 117, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 117, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 117, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 117, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 117, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 117, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2054d902f7e4c4248569aaa18e43ac43c9a64428989af17bb81d81438f73f613", + "source_sha256": "15c339bdbe1fdf8554aee535d263cb48722830f5170e1d002d2a22469e44e8c8", + "view_sha256": "66d23439f663770af70c8c60341306974c589efc6b1196f487d47988c2d5250a" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 97, + "fields": [ + { + "path": "actions", + "shape": [ + 97, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 98, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 98, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 98, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 98, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 98, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 98, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "28a373ee4dda14d2e5d800806fb691b0061b7838860303fc96e190d6602d7a54", + "source_sha256": "d86045dac14fd75711d03798b0a9fe1885284c4e2eeb129462fa03c21fc2b0b1", + "view_sha256": "fc67c9db948068ab8f999b90ef0575e49e25fb052c2434f3c7b9e0f519994935" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 104, + "fields": [ + { + "path": "actions", + "shape": [ + 104, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 105, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 105, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 105, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 105, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 105, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 105, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6eb51d9155ecd27b098a3f7bd23d23203b25399f5335381d8f43cec4f3b1ccac", + "source_sha256": "e41037de038db870617860821475bdd0a1788262852d85b45b0d963cb6cbd258", + "view_sha256": "88dc8e354e825541c8661632b199e8e4a6fd3b4b9f57a7058284d9084f23b292" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 105, + "fields": [ + { + "path": "actions", + "shape": [ + 105, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 106, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 106, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 106, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 106, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 106, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 106, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "9a8b2839bf1896b086aeaabb8369f55ea693c31da65eb57952e5b217c605d27c", + "source_sha256": "f836b9d236a10d24481b3543e28996841a191c51a3db9d12591964ce6bf113eb", + "view_sha256": "965b4b97446cd0691270516c62749dd4c28869d9d431035aefff0d33ed7fb8c2" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 112, + "fields": [ + { + "path": "actions", + "shape": [ + 112, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 113, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 113, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 113, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 113, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 113, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 113, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "6ce4992a6d40a26eb8a9d72ddaae70308436c37f4fc056a56b32f9b6aa1ff184", + "source_sha256": "eb84983a8376d9105ca2507fc46b4e95abd7d838dd8db1ac5c1241fa571445c5", + "view_sha256": "5222ae12a37785a1b96a80b22d6bb97af4bf1228b5ea6d7215d9ad692b975031" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 98, + "fields": [ + { + "path": "actions", + "shape": [ + 98, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 99, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 99, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 99, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 99, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 99, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 99, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d9fcfe5a96be67872946dec9f516ff655ececf05389f570aa8c7c6f5f479901a", + "source_sha256": "d7391f03592ba24b0cebaeb821f9596ac81104bc4aff492145a6bcfe4a3b2c0a", + "view_sha256": "a30f380447fb947a9a4882680942632800fe193082f11d45bd45b2a0155a0619" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 88, + "fields": [ + { + "path": "actions", + "shape": [ + 88, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 89, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 89, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 89, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 89, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 89, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 89, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "8a3fa2ddc5aa22e51754350a7fb71cd395e02ef02712f30016b0b00c6ac072d9", + "source_sha256": "340b8b037ea79d89dbed6f0054b4e99240bb0ce7caf24c6678a1dcb4cdce81a3", + "view_sha256": "84d1d256624be47a6f4454c3ba9309dccaeac8ef0a945d340953384bb087462f" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 119, + "fields": [ + { + "path": "actions", + "shape": [ + 119, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 120, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 120, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 120, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 120, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 120, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 120, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7440f39cae398ebe6f910ed3b3c8ac5f08be16f5b12a11c467b38e37ac48730f", + "source_sha256": "269c1d0856544084958368f54cdea7df8f03de4d69615cff45e4896c669677a6", + "view_sha256": "d5d83a61418be24ff417834c7b2202ecb78074f0108dfd35d4451504b56deccc" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 104, + "fields": [ + { + "path": "actions", + "shape": [ + 104, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 105, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 105, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 105, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 105, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 105, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 105, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0a2e06f6b166534ff2b5be01c4c0a20d4e159e45ebefbae25e2a820bd168a4f0", + "source_sha256": "6ec283e0bbc6d9ac62b9a9dd2caa2e34224758580c653b751032a29ba0b1479a", + "view_sha256": "c1d6b391384956b78a4e0ce5c0b76f5de6588f117ab621c77d0a010f2e01be7e" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 100, + "fields": [ + { + "path": "actions", + "shape": [ + 100, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 101, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 101, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 101, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 101, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 101, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 101, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d38ce2a46a901aa6642c424f5ea37048b0b4803ac07dcfd09c5756e29d074bd7", + "source_sha256": "ffaaff75897c61cd446e666051616adba9ff14c9d2d6e1592ea04672b54df6fc", + "view_sha256": "72c68a0475af30120cea64780588f9bf2b5836d527aa479077966a4a1a267e18" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 101, + "fields": [ + { + "path": "actions", + "shape": [ + 101, + 22 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 102, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 102, + 23 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 102, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 102, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 102, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 102, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "30b485730e392aee4e3c1751f466e08563082854b647fd353a4896e65e0b082d", + "source_sha256": "90f1b6a99f7defc939d52cb04c865255fe04ced548a92870659d2521b0b7809b", + "view_sha256": "b4a072b82636a5368082f92110cb5b2aa59f81ba838b213e7925b9fac29ea947" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-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/TurnOnFaucet-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..de9e754ddabe9ada95a5964e785cb05b476c934d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/findings.md @@ -0,0 +1,42 @@ +# Findings: authorized D20 and E20 work + +All 20 authorized demos (2066 labels) were analyzed. The original visual inspection ledger remains in ../demo_analysis.md. No other task data, hidden state, simulator, external expert or neural weight training was used. Runtime behavior is deterministic fixed-feature retrieval and bounded visual correction. + +## Exploration evidence before final independent rehearsals + +| Episode | Version | Native success | Final step | +|---|---|---|---| +| 1 | baseline | False | 125 | +| 2 | baseline | True | 80 | +| 3 | terminal extension | True | 89 | +| 5 | scene prior | True | 19 | +| 6 | scene prior | True | 95 | +| 7 | scene prior | False | 200 | +| 8 | scene prior | True | 63 | +| 9 | pivot-aware | True | 76 | +| 10 | pivot-aware | True | 92 | +| 11 | pivot-aware | True | 86 | +| 12 | pivot-aware | True | 76 | +| 13 | early alignment | True | 73 | +| 14 | early alignment | True | 70 | +| 15 | early alignment | True | 93 | +| 16 | early alignment | True | 52 | +| 4 | terminal extension, independent rehearsal | false | 200 | + +These are small sequential exploration samples, not held-out performance estimates or paired comparisons. Episode 4 was a valid independent rehearsal of an older bundle and failed natively: 0370effc6078a10f8f844cc530161332635a0464c72e57c9e5f7e609b1e52955. Final exact-version independent results are recorded externally under ../exploration/rehearsal17 through rehearsal20, so these bundle files need not change between runs. + +## Localization and pose + +Current front/top RGB and qpos/qvel select action-aligned neighbors from each demo. The initial top image supplies a scene prior; a brightness-filtered circle detector supplies an optional pivot location in a fixed 480x640 image coordinate system. All 20 demo starts yielded unique pivots. Ambiguous live detection falls back to image/proprioception retrieval. This is image-space localization, not calibrated 3D object pose. The chosen version is v4 early alignment. In the alignment variant, a temporal annular-contrast wrist tracker adds at most 0.04 normalized X to approach commands. It turns off near the pivot, after 60 calls, or when tracking fails. A saved-image check found late drift in episode 6, motivating this gate. It is not used to measure completed rotation. + +## Grasp, timing and recovery + +All demo wrist and dex-hand deltas are zero. The candidate maintains that hand configuration and executes translation/contact sweeps; no independently validated finger-closing skill is claimed. Native success, when provided by the trusted API, is reported exactly as returned. Initial hold is owned by the runner and consumes native step 1. The controller never exceeds the 200-step horizon. + +Episode 7 exposed nearly zero retrieval commands that missed the old exact-zero stopping threshold. The new recovery trigger uses blended-action magnitude below 0.003, with at most 24 additional -0.06 normalized Y commands. Episodes 10 and 12 used four and seven such commands before native success. The same episode 7 also missed the handle laterally; the early alignment experiment addresses that separately. Recovery remains limited: no regrasp or full retry is implemented. + +## Failures and audit limits + +Episode 1's live wrapper initially misparsed the action-result envelope and emitted zero holds. It was repaired using latest_observation without replaying requests. Early per-request logging in that episode is incomplete; the saved initial observation, resumed trace, final return and notes explicitly distinguish inference from logged evidence. Episode 1 stopped at step 125 with native success false. Episode 4 reached the horizon with native success false. Episode 7 missed contact and stalled to the horizon. Other unseen scenes, occlusion, detector ambiguity and neighbor aliasing may still fail. + +All subsequent interactive requests were logged before API submission; returned legal observations, images and metadata were saved under ../exploration. Exact rehearsal hashes and native score sources are retained. If native success is absent, the required visible rule is conservative: only unambiguous legal-image evidence of the public instruction counts true; ambiguity counts false, submitted through score_rehearsal. No visual judgment substitutes for a native score when one is supplied. diff --git a/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..cad02e515c46ac15f1aebaa710e0f5dd2b774728 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/freeze_manifest.json @@ -0,0 +1,92 @@ +{ + "files": { + "bank_provenance.json": "7eaeb67fb24207f886a4e923561dd4fa5fd1cd93e75b65883cdd45009647051e", + "controller.py": "6a2f7750e75daff025b34e92c5dad23829f2a5977e05ed4a3d4a5c839438d682", + "demo_bank.npz": "59d2666e11ed31860fe8e1de1586bb2b0de1d1afa34b5b8544bbcbeb388b13fd", + "demo_manifest.json": "03b9530285b9b7fe744848523244e8cc000d412be399e777e5a5506435fd7e97", + "demonstrations_readonly/demo_00.h5": "a2d55dc8451d8086c976d4b7a44a071aee0aaad2fb445d319ba6a5930086d473", + "demonstrations_readonly/demo_01.h5": "1731637ce8812a176d6860c857e0637496529968f40f8f9777c213b24595131b", + "demonstrations_readonly/demo_02.h5": "adcf62e9809e4dd24493a0a5408a349e837363e1c3c39d7e7819465e2cb481ab", + "demonstrations_readonly/demo_03.h5": "fd423cd4cc2bc0aab56dd0d28f40e6db1e1247b4f0ee8186a1c67c735cfb3f62", + "demonstrations_readonly/demo_04.h5": "0cce3dc852cc96fd908cac9f72fb62737be0d7868690d7528fbcbaf7077b56af", + "demonstrations_readonly/demo_05.h5": "584596f89240247079f98927c476d4a60d8ead6b27a9ce3df57deae1f0a265ed", + "demonstrations_readonly/demo_06.h5": "e551c694120b2a43616ae970ee4dbe9057c91d9fbd232d0f97331caf8b668978", + "demonstrations_readonly/demo_07.h5": "b35749bd275114570b0b1acf091c615e6eb66203805d656c025483fc106933b4", + "demonstrations_readonly/demo_08.h5": "084fd6bd8c4fb51b7c0ee060ac980d1a4b07939d0200e37ec0d58ee968327fd6", + "demonstrations_readonly/demo_09.h5": "66d23439f663770af70c8c60341306974c589efc6b1196f487d47988c2d5250a", + "demonstrations_readonly/demo_10.h5": "fc67c9db948068ab8f999b90ef0575e49e25fb052c2434f3c7b9e0f519994935", + "demonstrations_readonly/demo_11.h5": "88dc8e354e825541c8661632b199e8e4a6fd3b4b9f57a7058284d9084f23b292", + "demonstrations_readonly/demo_12.h5": "965b4b97446cd0691270516c62749dd4c28869d9d431035aefff0d33ed7fb8c2", + "demonstrations_readonly/demo_13.h5": "5222ae12a37785a1b96a80b22d6bb97af4bf1228b5ea6d7215d9ad692b975031", + "demonstrations_readonly/demo_14.h5": "a30f380447fb947a9a4882680942632800fe193082f11d45bd45b2a0155a0619", + "demonstrations_readonly/demo_15.h5": "84d1d256624be47a6f4454c3ba9309dccaeac8ef0a945d340953384bb087462f", + "demonstrations_readonly/demo_16.h5": "d5d83a61418be24ff417834c7b2202ecb78074f0108dfd35d4451504b56deccc", + "demonstrations_readonly/demo_17.h5": "c1d6b391384956b78a4e0ce5c0b76f5de6588f117ab621c77d0a010f2e01be7e", + "demonstrations_readonly/demo_18.h5": "72c68a0475af30120cea64780588f9bf2b5836d527aa479077966a4a1a267e18", + "demonstrations_readonly/demo_19.h5": "b4a072b82636a5368082f92110cb5b2aa59f81ba838b213e7925b9fac29ea947", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "findings.md": "940120e159db3ed93f63f729669eeb81feb6aeabee5da2b776d49510cc0c8a06", + "geometry.py": "665722ec1f4771ee91d37fecf2145d6b5a71f29e0d82149a0666ebcbfe5e0cb6", + "geometry_bank.npy": "2fdcd2a4a12b52f8fddcb1c1b548024c7acc47aa05fc742103a8fe576b9def20", + "handoff.md": "7c887559f227f35aee98f1172b103625ed294a1738bb593ca71ab898aa7fa50b", + "model_tool_manifest.yaml": "459e71736ef2007a67cee04093547adbdccc9e80652d7bd5c64eb3009724c77b", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "skills.md": "e1e45ca1c8e9faabf3f4f303e2029e9a7714672ad45751e5980c3af4a2e92258", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e", + "wrist_bank.npy": "a75dfc49e8cb034337f70f51712d2f817dc36afc835f6bf4d4991fc7bf658577", + "wrist_tracker.py": "d243a90de67a20c16c5e2e3ba1423efd489cc88712447e6895c823ae18d21a39" + }, + "bundle_hash": "04cbf63556f51799ecc1d19bfec494c7c5871b4827b2ae6a963795db6c786ea9", + "exploration_ledger_hash": "9417682e32fd059fba4026464b782be6b2cbf10ec04acb6e32a798de73309568", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "episode": 4, + "bundle_hash": "0370effc6078a10f8f844cc530161332635a0464c72e57c9e5f7e609b1e52955", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "04cbf63556f51799ecc1d19bfec494c7c5871b4827b2ae6a963795db6c786ea9", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "04cbf63556f51799ecc1d19bfec494c7c5871b4827b2ae6a963795db6c786ea9", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "04cbf63556f51799ecc1d19bfec494c7c5871b4827b2ae6a963795db6c786ea9", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "04cbf63556f51799ecc1d19bfec494c7c5871b4827b2ae6a963795db6c786ea9", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/geometry.py b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/geometry.py new file mode 100644 index 0000000000000000000000000000000000000000..b4d873061aece944a73b4a36c394615bf8f287db --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/geometry.py @@ -0,0 +1,19 @@ +"""Fixed image-space faucet pivot detector; no camera calibration or hidden state.""" +import cv2 +import numpy as np + +def locate_pivot(image): + im=np.asarray(image) + if im.ndim==4:im=im[0] + im=cv2.resize(im,(480,640)) + gray=cv2.cvtColor(im,cv2.COLOR_RGB2GRAY) + circles=cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,25,param1=70,param2=18,minRadius=10,maxRadius=19) + if circles is None:return None + yy,xx=np.indices(gray.shape) + candidates=[] + for x,y,r in circles[0]: + if not (250180:candidates.append([x,y]) + if len(candidates)!=1:return None + return np.asarray(candidates[0],np.float32) diff --git a/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..df1e2f42370625bdfb33d3956da7206637ad2383 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/handoff.md @@ -0,0 +1,7 @@ +# Offline runtime handoff + +controller.py exposes reset_episode() and act(obs). Dependencies: Python, NumPy, OpenCV. Fixed geometry/tracking helpers are embedded in controller.py; their source modules are retained for audit. Local data: demo_bank.npz, geometry_bank.npy and, for alignment, wrist_bank.npy. No network, model-development agent, API client, simulator or demo-file reader is invoked at runtime. The runner supplies verified demo manifest/files and the common environment lock. + +Input: RGB front_camera/top_camera and proprioception agent/qpos, agent/qvel (23 values each), with optional native step_id. reset_episode clears per-episode counters, scene prior and tracking state. act returns one finite bounded float32 vector of length 22 or None. Components 0:3 are normalized root-frame translation; rotation 3:6 and dex deltas 6:22 remain zero. Runner owns the initial hold; at most 199 further actions are issued. None is heuristic termination, not a success report. + +This exact candidate is prepared for independent rehearsal slots 17-20. Do not edit it between these runs. API.freeze selects among exact independently rehearsed runnable versions using the task's prescribed ordering. The external rehearsal records and freeze.json contain the final outcome; this handoff intentionally makes no advance success claim. Original analysis, all experimental controller sources, compilation scripts and live evidence are preserved outside the runtime bundle. diff --git a/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d8fc385a8d52b6a86360ea41c2967e3641010422 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,157 @@ +{ + "stage": "COMPILED FOR FINAL INDEPENDENT REHEARSALS", + "candidate_status": "final_rehearsal_candidate", + "task_id": "TurnOnFaucet-v1", + "exploration_episodes_used": 16, + "environment_calls": "Only trusted API", + "neural_finetuning": false, + "pretrained_weights_modified": false, + "coding_model": { + "identity": "Codex coding agent provided by host; exact checkpoint identifier not exposed", + "weight_provenance": "host-provided frozen model; no local weight files accessed", + "weight_hash": "unavailable" + }, + "controller": { + "type": "fixed-feature observation retrieval with initial scene/pivot prior, bounded low-command recovery and optional early visual alignment", + "entrypoint": "controller.py", + "functions": [ + "reset_episode()", + "act(obs)" + ], + "pretrained_weight_references": [], + "learned_neural_parameters": false, + "compiled_data": [ + "demo_bank.npz", + "geometry_bank.npy", + "wrist_bank.npy" + ], + "compilation": "fixed RGB features, labeled observation storage, empirical qpos/qvel scale statistics; no optimizer" + }, + "tools_used": [ + { + "name": "functions.exec / exec_command", + "purpose": "local Python and shell file operations, analysis and checks", + "version": "host tool version not exposed" + }, + { + "name": "view_image", + "purpose": "visually inspect five generated demonstration contact sheets", + "version": "host tool version not exposed" + }, + { + "name": "worker_api.API.read_demo", + "source": "/worker_api.py", + "purpose": "authorized local HDF5 reads only; no RPC" + }, + { + "name": "Python standard library", + "version": "3.10.20", + "modules": [ + "json", + "pathlib", + "importlib.util", + "hashlib", + "platform", + "py_compile" + ] + }, + { + "name": "NumPy", + "version": "2.2.6", + "purpose": "statistics, storage, fixed features, distance retrieval" + }, + { + "name": "OpenCV", + "version": "4.12.0", + "purpose": "resize, image conversion, text labels, sheet writing; no pretrained models" + }, + { + "name": "h5py", + "version": "3.16.0", + "purpose": "HDF5 access via API.read_demo" + }, + { + "name": "SciPy", + "version": "1.15.2", + "purpose": "version inspection only; not used by controller" + }, + { + "name": "torch", + "version": "2.10.0+cu128", + "purpose": "version inspection only; no tensor model, checkpoint or neural training" + }, + { + "name": "worker_api.API", + "purpose": "authorized budget, next_episode, latest_observation, execute_actions, finish_episode, rehearse, score_rehearsal and freeze" + } + ], + "runtime_dependencies": { + "python": "3.10.20", + "numpy": "2.2.6", + "opencv": "4.12.0" + }, + "offline_builder_dependencies": { + "h5py": "3.16.0", + "worker_api": "mounted standalone module" + }, + "data_provenance": { + "authorization": "/demo_manifest.json, status released_for_offline_analysis", + "demos": [ + "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" + ], + "action_count": 2066, + "detail": "bank_provenance.json", + "visual_inspection_ledger": "../demo_analysis.md", + "source_root": "/demonstrations", + "legal_fields": [ + "actions", + "obs/agent/qpos", + "obs/agent/qvel", + "obs/sensor_data/front_camera/rgb", + "obs/sensor_data/top_camera/rgb" + ], + "other_task_data_accessed": false, + "additional_features": { + "geometry_bank.npy": "Unique fixed-Hough pivot from observation 0 of each of the same 20 demos, top RGB resized to 480x640", + "wrist_bank.npy": "Fixed annular-contrast temporal tracker applied to top RGB observations 0..T-1 of the same 20 demos, 2066 entries" + } + }, + "validation": { + "syntax": "py_compile passed", + "synthetic": "checks.json; seven checks passed", + "real_task_tests": "16 charged exploration slots, including independent rehearsal 4; final rehearsal records external", + "success_claim": "Only native trusted returns; see findings and exact rehearsal records" + }, + "limitations": [ + "Image-space localization is uncalibrated and may fail under occlusion.", + "Late wrist tracker drift observed; correction is restricted to approach.", + "No explicit finger closure, measured handle angle, regrasp or full retry.", + "Small sequential exploration results are not independent success-rate estimates.", + "Episode 1 early action trace is incomplete; see audit notes.", + "Runner supplies verified demo manifest and common environment lock." + ], + "source_sha256": { + "/task_contract.json": "4fa6cacae86aa769a18466fa20cffbd6e5ae48de87c3e2bfd9612f6ee1391a40", + "/demo_manifest.json": "8b26540f93fe79f970c133a2771e5205cde1b89197be62ac167a3949c7af4990", + "/worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + } +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-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/TurnOnFaucet-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..10d3ce9865c983e5d94b7920d6c50c4888a7bf51 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/skills.md @@ -0,0 +1,9 @@ +# Implemented mechanisms and evidence limits + +- Current RGB/proprioception-conditioned retrieval from all 20 authorized demonstration trajectories. +- Optional initial-image pivot localization plus fixed scene matching. +- Bounded early lateral alignment in the alignment variant; disabled near contact or on tracking failure. +- Translation/contact sweep with fixed wrist and finger configuration. +- Bounded low-command recovery sweep, quiet stop, invalid-sensor hold and native horizon guard. + +These are controller mechanisms. Independent rehearsal outcome belongs to its exact bundle hash; exploration successes do not certify generalization. No explicit finger closure, calibrated 3D grasp, angle estimator, regrasp or full retry skill is claimed. No external skill package or neural model is loaded. diff --git a/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/TurnOnFaucet-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(rad+1)**2) + kernel=ring.astype(np.float32)/ring.sum()-inside.astype(np.float32)/inside.sum() + response=cv2.filter2D(gray,-1,kernel)[y0:y1,x0:x1] + _,score,_,loc=cv2.minMaxLoc(response) + if best is None or score>best[1]:best=(np.array([loc[0]+x0,loc[1]+y0],np.float32),score) + if best[1]<50:return None + return best[0] diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/build_memory.cpython-310.pyc b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/build_memory.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c4e51f964228e89fb5d7cfa508e31ec7443d0f2 Binary files /dev/null and b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/build_memory.cpython-310.pyc differ diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/check_synthetic.cpython-310.pyc b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/check_synthetic.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e20bedc3ca8ed32d56a89742ddcc58d3e0d23d13 Binary files /dev/null and b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/check_synthetic.cpython-310.pyc differ diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/controller.cpython-310.pyc b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/controller.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f55d4753de60b72abf02cbcaf7055927873af2a0 Binary files /dev/null and b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/__pycache__/controller.cpython-310.pyc differ diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/build_memory.py b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/build_memory.py new file mode 100644 index 0000000000000000000000000000000000000000..9b5d00e5974d3447c9a935d2663bc522d03988f1 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/build_memory.py @@ -0,0 +1,19 @@ +"""Offline extraction of legal data; no optimization or pretrained weights.""" +import importlib.util,json,sys +from pathlib import Path +import numpy as np +sys.path.insert(0,str(Path(__file__).parent)) +from controller import visual_features,CAMERAS +spec=importlib.util.spec_from_file_location('worker_api','/worker_api.py'); module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module);api=module.API() +manifest=json.load(open('/demo_manifest.json')) +bank={k:[] for k in ['q','v','visual','action','phase','terminal','demo_index','frame_index']} +for di,e in enumerate(manifest['episodes']): + n=e['length']; state=api.read_demo(e['demo_id'],fields=['actions','obs/agent/qpos','obs/agent/qvel']) + for start in range(0,n+1,32): + stop=min(n+1,start+32); images=api.read_demo(e['demo_id'],start,stop,['obs/sensor_data/'+c+'/rgb' for c in CAMERAS]) + for t in range(start,stop): + f=visual_features({c:images['obs/sensor_data/'+c+'/rgb'][t-start] for c in CAMERAS}) + action=state['actions'][t] if t0 +obs['proprioception']['agent/qpos'][:7]=.5;b=c.act(obs);assert b[0]<0 +obs['rgb']['top_camera'][:]=0;assert c.act(obs) is None +obs=observation();obs['step_id']=500;assert c.act(obs) is None +obs=observation();obs['proprioception']['agent/qpos'][0]=np.nan;assert c.act(obs) is None +# Isolate visual feedback with fabricated exemplars. +obs=observation(); shifted=observation() +for im in shifted['rgb'].values(): + im[:]=0;im[20:60,100:140]=[255,255,0] +c.memory['q'][:]=0;c.memory['visual'][8:]=visual_features(shifted['rgb']) +c.reset_episode();assert c.act(obs)[0]>0 +c.reset_episode();assert c.act(shifted)[0]<0 +# Exercise packaged memory on fabricated data: unsupported-state termination is legal. +reset_episode(); result=act(observation(True));assert result is None or (result.shape==(7,) and np.isfinite(result).all() and np.max(np.abs(result))<=1) +print('PASS: synthetic shape, batching, legal bounds, joint response, missing cloth, nonfinite state, horizon, packaged loading. No task testing.') diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/controller.py b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/controller.py new file mode 100644 index 0000000000000000000000000000000000000000..c74aade6710723fc067bdcf60971a9b7e6b913a2 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/controller.py @@ -0,0 +1,104 @@ +"""Unrehearsed, non-neural observation-conditioned demonstration retrieval.""" +from pathlib import Path +import numpy as np +import cv2 + +CAMERAS = ('top_camera', 'front_camera') + +def visual_features(rgb): + features = [] + for camera in CAMERAS: + im = np.asarray(rgb[camera]) + 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 RGB HWC or 1HWC') + hsv = cv2.cvtColor(im, cv2.COLOR_RGB2HSV) + # Yellow cloth observed in the authorized demonstrations only. + mask = ((hsv[..., 0] >= 18) & (hsv[..., 0] <= 40) & + (hsv[..., 1] >= 100) & (hsv[..., 2] >= 100)).astype(np.float32) + grid = cv2.resize(mask, (16, 16), interpolation=cv2.INTER_AREA).ravel() + y, x = np.nonzero(mask) + if len(x) < 10: + raise ValueError('Cloth not observable') + h, w = mask.shape + moments = [x.mean()/w, y.mean()/h, x.std()/w, y.std()/h, mask.mean()] + features.extend(grid) + features.extend(np.asarray(moments) * 4) + return np.asarray(features, np.float32) + +class Controller: + def __init__(self): + with np.load(Path(__file__).with_name('memory.npz'), allow_pickle=False) as data: + self.memory = {k: data[k] for k in data.files} + self.reset_episode() + + def reset_episode(self): + self.last_phase = None + self.tick = 0 + self.terminal_count = 0 + self.last_grip = None + + def act(self, obs): + if int(obs.get('step_id', 1)) >= 500: + return None # one runner-owned hold + at most 499 controller actions + 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(): + return None + f = visual_features(obs['rgb']) + except (KeyError, ValueError, TypeError): + return None + self.tick += 1 + m = self.memory + # Joint state supplies height/arm configuration unavailable from cloth mask. + qs = np.array([.35]*7 + [.04]*2, np.float32) + distance = np.mean(((m['q']-q)/qs)**2, axis=1) + distance += .03*np.mean(np.minimum((m['v']-v)**2, 4), axis=1) + distance += 12*np.mean((m['visual']-f)**2, axis=1) + if self.last_phase is not None: + # Soft continuity only: candidate can switch demonstrations each call. + delta = m['phase'] - self.last_phase + distance += .12*np.maximum(-delta-.03, 0) + .12*np.maximum(delta-.12, 0) + # Restrict to single-cycle, comparable-stage demonstrations. + frame = m['frame_index'] + allowed = ~np.isin(m['demo_index'], [2,4,19]) + allowed &= np.abs(frame - min(self.tick,215)) < 18 + desired_grip = -1.0 if 83 <= self.tick < 168 else 1.0 + allowed &= m['action'][:,6] == desired_grip + distance[~allowed] = 1e6 + nearest = np.argpartition(distance, 7)[:8] + nearest = nearest[np.argsort(distance[nearest])] + if distance[nearest[0]] > 3.0: + return None # unsupported state, not a claim of completion + weights = np.exp(-(distance[nearest]-distance[nearest[0]])/.03) + grip = 1.0 if np.sum(weights*m['action'][nearest, 6]) >= 0 else -1.0 + keep = m['action'][nearest, 6] == grip + ix, weights = nearest[keep], weights[keep] + weights /= weights.sum() + result = np.sum(m['action'][ix]*weights[:, None], axis=0) + result[6] = grip + phase = float(np.sum(m['phase'][ix]*weights)) + self.last_phase = phase if self.last_phase is None else .7*self.last_phase+.3*phase + terminal = bool(m['terminal'][nearest[0]]) and np.linalg.norm(v[:7]) < .15 and grip > 0 + self.terminal_count = self.terminal_count+1 if terminal else 0 + if self.tick >= 240 or self.terminal_count >= 12: + return None # demo-end resemblance heuristic; success remains unknown + self.last_grip = grip + return np.clip(result, -1, 1).astype(np.float32) + +_controller = None + +def reset_episode(): + global _controller + if _controller is None: + _controller = Controller() + else: + _controller.reset_episode() + +def act(obs): + global _controller + if _controller is None: + reset_episode() + return _controller.act(obs) diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/demo_manifest.json b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/demo_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..7d9097287feed311a5b2e620a3b311ac251a881b --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/demo_manifest.json @@ -0,0 +1,1488 @@ +{ + "task_id": "UnfoldShirt-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": 208, + "fields": [ + { + "path": "actions", + "shape": [ + 208, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 209, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 209, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 209, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 209, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 209, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 209, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0a48ec5459b86b0aeee996c6d61819944521e03ed708b47372e915fd5207f77b", + "source_sha256": "46521302a922ad2000d6250c99075e02597d7618cdc9810d46b73236304af4ef", + "view_sha256": "e9a0c2907f950b576e5cd422e5fff99581c43d9291b0ed35edc5df73b84df89f" + }, + { + "demo_id": "demo_01", + "file": "demo_01.h5", + "length": 209, + "fields": [ + { + "path": "actions", + "shape": [ + 209, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 210, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 210, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 210, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 210, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 210, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 210, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "342780e8921832bf905b87f6d4e0e6048e60e44c3b2a22b73d72d5116467ca2c", + "source_sha256": "6ecf15907cb56ed2083baca24708bd82d07a5e712d7da3127f72fe3414b956df", + "view_sha256": "7d8bc083d3a4a7c1b25590a80cb1045a0505bafd6deb8e89fe679c2eb93201ca" + }, + { + "demo_id": "demo_02", + "file": "demo_02.h5", + "length": 360, + "fields": [ + { + "path": "actions", + "shape": [ + 360, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 361, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 361, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 361, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 361, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 361, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 361, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "77cbc56128fdc127b6f085e476ae4e469a8060883672ce5391e2c193bca991c0", + "source_sha256": "73a6f4e888bec5156ed846a37066d316fcfa196962a5cfcd91b725d4e855a051", + "view_sha256": "1fc6c1314dd0d9f877d899d775963f90894321b70841d7446c8f449aef84bf8c" + }, + { + "demo_id": "demo_03", + "file": "demo_03.h5", + "length": 221, + "fields": [ + { + "path": "actions", + "shape": [ + 221, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 222, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 222, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 222, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "09aa31fbe9b9772ce1097c5096bf8ec7a8c573c33b4a33bede5afe38ac178183", + "source_sha256": "1afad1c36a0e7c629e4304ddb0e8c9cbe4c9b0e03e556444c4ba909494263a1e", + "view_sha256": "fca8b4d7b3b63b3562f6a31871aa785ae504e61fdfa04edecd686ddae69121bb" + }, + { + "demo_id": "demo_04", + "file": "demo_04.h5", + "length": 140, + "fields": [ + { + "path": "actions", + "shape": [ + 140, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 141, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 141, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 141, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 141, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 141, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 141, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "126df090e5ab47aca12de9de8d74f613a72696ee8da718ae76fa01c2eb9b12b7", + "source_sha256": "23af6c9adb6aa36a63c43ffb460d777788ad51ccc77ebd147cff72f9e3013bd2", + "view_sha256": "341ffd250e02e6f0f788c2b0e730a16279c3e51a77c93c535b7c27a2ee2bb83b" + }, + { + "demo_id": "demo_05", + "file": "demo_05.h5", + "length": 223, + "fields": [ + { + "path": "actions", + "shape": [ + 223, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 224, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 224, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 224, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 224, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 224, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 224, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "c7a8b3502c710594fc3f436527d3feb8467406559fef069f3e721b3572fce452", + "source_sha256": "751c1a584038c1f933b5e5f6b91101ae8c3ffc15ccf1a78671bfac297bd45834", + "view_sha256": "5adecd24e6528b778975350422673f26622b6833a7705828121b771f42ef3e4f" + }, + { + "demo_id": "demo_06", + "file": "demo_06.h5", + "length": 216, + "fields": [ + { + "path": "actions", + "shape": [ + 216, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 217, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 217, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 217, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 217, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 217, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 217, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "16c8182292a18ef3b5e40ea1c25921e4dd4acfce38dda69c3545133c98e5bfd1", + "source_sha256": "d92dc18acb6da98a3ddb8bc4eec140a14808552efcfed5a78dba1a11a746f0e9", + "view_sha256": "1e6df706135bdcf9e5bdcc8ad4a776769396c95b071299cbf63634ae4d72007c" + }, + { + "demo_id": "demo_07", + "file": "demo_07.h5", + "length": 212, + "fields": [ + { + "path": "actions", + "shape": [ + 212, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 213, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 213, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 213, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "78644e57337eaf958ae093380ac919621f9aa3e9bc93e3aa5b669cf35f3add34", + "source_sha256": "72309f21487ebb29d9e0b20809d84a7c5029484e03a2d71bf0371ce695976b07", + "view_sha256": "723f638e0b0560f16a4f25f7c704fd3035075657d7fdb871653dddec43677c87" + }, + { + "demo_id": "demo_08", + "file": "demo_08.h5", + "length": 211, + "fields": [ + { + "path": "actions", + "shape": [ + 211, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 212, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 212, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 212, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 212, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 212, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 212, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "34f9665a9573fc33be36e728d6e3c65a49e0fd4f7835573e69ca937cf79dc032", + "source_sha256": "08a90a3d9aaff4544a9c59190c98184517e5c15ca1650e4cd77d21446b9dcca2", + "view_sha256": "9cfe2e2a76405c8ea4bcbacf5fc837e4a5e1692591e09d6fef5a3e46279a0065" + }, + { + "demo_id": "demo_09", + "file": "demo_09.h5", + "length": 212, + "fields": [ + { + "path": "actions", + "shape": [ + 212, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 213, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 213, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 213, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "0926a1a03faa90b073f113885bf28856e5598d2da98d306886055b517ef34d0a", + "source_sha256": "cb8dcecdcef8dce86cfc5b08f85107a92314d4955965e6925dd7fb7260404bad", + "view_sha256": "50141ea9e84c98d925479b12e114dbf925252ed16309b0e92fbea462e1584bd9" + }, + { + "demo_id": "demo_10", + "file": "demo_10.h5", + "length": 219, + "fields": [ + { + "path": "actions", + "shape": [ + 219, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 220, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 220, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 220, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 220, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 220, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 220, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d5460d7ad5b4f06bb524c25845111593c802a8587277ce11aab3e69896cc873e", + "source_sha256": "709176ca03983c0a4ac5a43f4f18ec6f50a559fb728aeaf96a0a0dd86d415ece", + "view_sha256": "19d6fb141ef69e52773290821a336ad1be006db4a6dde8645286e14121db75e6" + }, + { + "demo_id": "demo_11", + "file": "demo_11.h5", + "length": 215, + "fields": [ + { + "path": "actions", + "shape": [ + 215, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 216, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 216, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 216, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 216, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 216, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 216, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "a063d01a5f88a905427db048dcd35d48a461e7d08547b990b2ad00cb95d003ff", + "source_sha256": "286ad7d06fdfce791844e51025660c25516e6533ba128b57445f7df61569341b", + "view_sha256": "779d6441a6f32a9031f47eccc4bf3785554b20c9bf67ca3a21c5aee7253c9daa" + }, + { + "demo_id": "demo_12", + "file": "demo_12.h5", + "length": 212, + "fields": [ + { + "path": "actions", + "shape": [ + 212, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 213, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 213, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 213, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "d69079fda8f17c83de57870319030741dda5ff1e48ca8df3306af5fa3119b65e", + "source_sha256": "c831d16ec377a815661b8cb1d052261461dc0751d73d7e4519cbc05366e6caed", + "view_sha256": "b3c490c0591cba53efa4928d6a9524557b614a48ec7952dbaa68bc7815a778b3" + }, + { + "demo_id": "demo_13", + "file": "demo_13.h5", + "length": 210, + "fields": [ + { + "path": "actions", + "shape": [ + 210, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 211, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 211, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 211, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 211, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 211, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 211, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "db8e6da387c9cf051b7f630c4b2d544b2d72b984ea1f88b89ae541a288f941bd", + "source_sha256": "81ade8087854294f9c40d9fad12602c90058ce69c55b02d53ce6953a8069e934", + "view_sha256": "2cd4a6ce98bb91b3197283a8607b3abb9c51d8b167d0852e328f951ef8c136ff" + }, + { + "demo_id": "demo_14", + "file": "demo_14.h5", + "length": 210, + "fields": [ + { + "path": "actions", + "shape": [ + 210, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 211, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 211, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 211, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 211, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 211, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 211, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "3336b9d24c8b32526c998a9db1801b9f7ea29e693871d1b16f303255f72f46e0", + "source_sha256": "d4bafc8e3d33adf37b492de1b5005ceaba9b3981dc63e81a7ddc060812742198", + "view_sha256": "86f8cba74df9d08b1d647cab88e64e59f321ae345ba6708dc3e001b7a9c3cd21" + }, + { + "demo_id": "demo_15", + "file": "demo_15.h5", + "length": 204, + "fields": [ + { + "path": "actions", + "shape": [ + 204, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 205, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 205, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 205, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 205, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 205, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 205, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "1f952a052ab302afe74a5257498326e0f81dfe28131695d9465524dedff30b30", + "source_sha256": "71c5b32f109bd8028faf65c17c0ee794ffd8c592b33cb530902e4f42d8922c73", + "view_sha256": "4bf59679d26c0dc4150714266a3d0d8798c0209dd3b6431ba1d39fa7b9e39969" + }, + { + "demo_id": "demo_16", + "file": "demo_16.h5", + "length": 221, + "fields": [ + { + "path": "actions", + "shape": [ + 221, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 222, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 222, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 222, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 222, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "2922b04516b7d77441092dd0defab93404efcd845c86bfcaca47634b6f66b97a", + "source_sha256": "43be9833ccc92449fc6c2c7b9b55b8cf014ecba7145d7c67024f7c94802e011c", + "view_sha256": "4cc67dd2c8f30b684f605a26819b05f3661f2ef08d37cf838aada54c6beedf79" + }, + { + "demo_id": "demo_17", + "file": "demo_17.h5", + "length": 212, + "fields": [ + { + "path": "actions", + "shape": [ + 212, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 213, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 213, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 213, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 213, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "aa28b9386078d17dc6d665a5e6b9fa0ef66cd0039a7364526336fc27c5f3abf4", + "source_sha256": "e17116f2f4a74cdb2a79eacfa2ef0bccefaef29bbd9a7f52d4e5772d81358ab2", + "view_sha256": "ddb3dfb6fb871819abd058c5e70f1f63f4905bff55a800c4483223d98aaf237b" + }, + { + "demo_id": "demo_18", + "file": "demo_18.h5", + "length": 213, + "fields": [ + { + "path": "actions", + "shape": [ + 213, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 214, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 214, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 214, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 214, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 214, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 214, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "b516ffea4790fbaa62e5056930fecfd652caaa5f54c52d833e2a81fdb043705e", + "source_sha256": "00f7fa522caf7c6ae1762466ee31442700ef904805c30144269b6b6d394b3777", + "view_sha256": "14cb2bbda3348bbb9340257873690e24186e012dd99c098dd1d5fe4782308eea" + }, + { + "demo_id": "demo_19", + "file": "demo_19.h5", + "length": 361, + "fields": [ + { + "path": "actions", + "shape": [ + 361, + 7 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qpos", + "shape": [ + 362, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/agent/qvel", + "shape": [ + 362, + 9 + ], + "dtype": "float32" + }, + { + "path": "obs/sensor_data/front_camera/rgb", + "shape": [ + 362, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/left_camera/rgb", + "shape": [ + 362, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/robot_camera/rgb", + "shape": [ + 362, + 240, + 320, + 3 + ], + "dtype": "uint8" + }, + { + "path": "obs/sensor_data/top_camera/rgb", + "shape": [ + 362, + 320, + 240, + 3 + ], + "dtype": "uint8" + } + ], + "trajectory_sha256": "7022313f4a34e8c424ea8034df05b0aca899f458e3c740baea1bfc485a89c594", + "source_sha256": "5726d516cbe28fadbfd6a51bbfcea9c421faa9e7ce6ec1e60a218b49bb0b74a8", + "view_sha256": "2dd8e515fa1aeb2a363895092571ecb5812efa7adfd792d34a98b4d04b477b7e" + } + ] +} diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/environment.lock b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/environment.lock new file mode 100644 index 0000000000000000000000000000000000000000..b2237f47d93aa4c3efad07728ae6acd137912d6d --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-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/UnfoldShirt-v1/frozen/findings.md b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/findings.md new file mode 100644 index 0000000000000000000000000000000000000000..a444862326c15404ca1c21478e21ee42fd35bb07 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/findings.md @@ -0,0 +1,6 @@ +# Findings from this task only +All 20 authorized demonstrations analyzed in ../demo_analysis.md. No neural weights fitted or altered. Runtime memory has 4,489 expert action examples and 20 terminal prototypes. + +Exploration 1 exposed an action-result wrapper bug (steps list); the charged attempt was finished and the wrapper fixed. Exploration 2 baseline retrieval terminated at step 192 with native success false: gripper-conditioned retrieval stayed open too long and shirt stayed folded. Exploration 3 timed retrieval reached native success true at step 180. Full legal images/actions are retained in ../exploration. + +Localization: HSV yellow masks in top/front views, grids plus moments; no hidden geometry or calibration. Pose: nine qpos/qvel inputs disambiguate arm configuration. Zero rotation matches authorized demos. Grasp: phase-constrained matching enforces close at candidate call 83; gripper target is absolute. Timing: release at call 168; matching is restricted to +/-17 demo frames and typical single-cycle examples. Translation remains closed loop on every observation. Recovery is conservative: unsupported/missing visual inputs stop; no claim of verified grasp from joint closure. Residual risks are missed contact, cloth occlusion, fixed timing under varying tracking, and no robust second-cycle recovery. diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/freeze_manifest.json b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/freeze_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..f8e6bf8a19f7f4610dd08c1c89433ce9b9c0b11a --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/freeze_manifest.json @@ -0,0 +1,173 @@ +{ + "files": { + "__pycache__/build_memory.cpython-310.pyc": "bdfa13bb0a4222e0824b34dfa207e3d7fe01611f8e7be227f52a97f56026501a", + "__pycache__/check_synthetic.cpython-310.pyc": "c4f8dc7f2835a5454bdf1810e82b8d7098b3608b82b26d94780b69370bbdb7ee", + "__pycache__/controller.cpython-310.pyc": "e2f0fe2ef3ada04060293a37a4297f9659edb7ac46a8ed2d09bc89f78afd920a", + "build_memory.py": "ba670bfc6f73cae768e5330513e300c20a6f837639c2b9035fb715b364928230", + "check_synthetic.py": "6d68093b217b3f97ab875046a90542834056fbcfa67bc6f9a7dfdf1cbf529aa9", + "controller.py": "6b291c0051ef399f4bbfd76508317b20f2b0d7231f6dda7c03c6738de65e15b0", + "demo_manifest.json": "95cff9ee2d01f694b2a8d11f367b278e9c5ba072edc71d3ae1d1feb40b8a0254", + "demonstrations_readonly/demo_00.h5": "e9a0c2907f950b576e5cd422e5fff99581c43d9291b0ed35edc5df73b84df89f", + "demonstrations_readonly/demo_01.h5": "7d8bc083d3a4a7c1b25590a80cb1045a0505bafd6deb8e89fe679c2eb93201ca", + "demonstrations_readonly/demo_02.h5": "1fc6c1314dd0d9f877d899d775963f90894321b70841d7446c8f449aef84bf8c", + "demonstrations_readonly/demo_03.h5": "fca8b4d7b3b63b3562f6a31871aa785ae504e61fdfa04edecd686ddae69121bb", + "demonstrations_readonly/demo_04.h5": "341ffd250e02e6f0f788c2b0e730a16279c3e51a77c93c535b7c27a2ee2bb83b", + "demonstrations_readonly/demo_05.h5": "5adecd24e6528b778975350422673f26622b6833a7705828121b771f42ef3e4f", + "demonstrations_readonly/demo_06.h5": "1e6df706135bdcf9e5bdcc8ad4a776769396c95b071299cbf63634ae4d72007c", + "demonstrations_readonly/demo_07.h5": "723f638e0b0560f16a4f25f7c704fd3035075657d7fdb871653dddec43677c87", + "demonstrations_readonly/demo_08.h5": "9cfe2e2a76405c8ea4bcbacf5fc837e4a5e1692591e09d6fef5a3e46279a0065", + "demonstrations_readonly/demo_09.h5": "50141ea9e84c98d925479b12e114dbf925252ed16309b0e92fbea462e1584bd9", + "demonstrations_readonly/demo_10.h5": "19d6fb141ef69e52773290821a336ad1be006db4a6dde8645286e14121db75e6", + "demonstrations_readonly/demo_11.h5": "779d6441a6f32a9031f47eccc4bf3785554b20c9bf67ca3a21c5aee7253c9daa", + "demonstrations_readonly/demo_12.h5": "b3c490c0591cba53efa4928d6a9524557b614a48ec7952dbaa68bc7815a778b3", + "demonstrations_readonly/demo_13.h5": "2cd4a6ce98bb91b3197283a8607b3abb9c51d8b167d0852e328f951ef8c136ff", + "demonstrations_readonly/demo_14.h5": "86f8cba74df9d08b1d647cab88e64e59f321ae345ba6708dc3e001b7a9c3cd21", + "demonstrations_readonly/demo_15.h5": "4bf59679d26c0dc4150714266a3d0d8798c0209dd3b6431ba1d39fa7b9e39969", + "demonstrations_readonly/demo_16.h5": "4cc67dd2c8f30b684f605a26819b05f3661f2ef08d37cf838aada54c6beedf79", + "demonstrations_readonly/demo_17.h5": "ddb3dfb6fb871819abd058c5e70f1f63f4905bff55a800c4483223d98aaf237b", + "demonstrations_readonly/demo_18.h5": "14cb2bbda3348bbb9340257873690e24186e012dd99c098dd1d5fe4782308eea", + "demonstrations_readonly/demo_19.h5": "2dd8e515fa1aeb2a363895092571ecb5812efa7adfd792d34a98b4d04b477b7e", + "environment.lock": "f9f11f093744865020243315494d48c69e38ff9e67783e7cf5f0a1e5f22b34aa", + "findings.md": "f6d9be775dd4325b6f6f3fe49e11f9a78a7a8c973b4b34341396d1980dc495d4", + "handoff.md": "c1b4c33f1a38a975fd1de8ff7cebe85d0ff7d2a7146e00c18d6d997c157f3f0d", + "memory.npz": "9097fb49bea688a2be312c5e1a0bd54da12ea5189e2b0e0eb9a7dc49045b570f", + "model_tool_manifest.yaml": "7774715ef2fe7a8b4ceb1a117f59a2963649f0c1e0505c854038c01bae76d762", + "policy_runner.py": "cd8a30fc763583fb9bf6570414f01d56aba16241c733fc0cdfdfab0f8f27270e", + "skills.md": "99ce70f3b9c29d53bc26b87db8ff969cf0d3d7f343555be4316c71e2df4847cb", + "worker_api.py": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e" + }, + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "exploration_ledger_hash": "d04f6fd4a977963153b7a5bba885fd763f929861995b25bd8ed4fe2561617811", + "entrypoint": "controller.reset_episode(); controller.act(obs)", + "selection": { + "rule": "exact-version success rate, valid rehearsal count, recency", + "rehearsals": [ + { + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "episode": 5, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "episode": 6, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "episode": 7, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "episode": 8, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "episode": 9, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "episode": 10, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "0299f9cead215887277b0f1ac3e178f426a3e8521d0eb0e58bf69310f81e9556", + "episode": 12, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": false, + "valid": true + }, + { + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "episode": 13, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "episode": 14, + "independent": true, + "score_source": "native_step_feedback", + "status": "finished", + "success": true, + "valid": true + }, + { + "episode": 16, + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 17, + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "independent": true, + "valid": true, + "status": "finished", + "success": false, + "score_source": "native_step_feedback" + }, + { + "episode": 18, + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 19, + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + }, + { + "episode": 20, + "bundle_hash": "49bc0198da0d340e5d11db2f5d7581b3405a6e4aa37b9c11278923eff1fac889", + "independent": true, + "valid": true, + "status": "finished", + "success": true, + "score_source": "native_step_feedback" + } + ] + } +} diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/handoff.md b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/handoff.md new file mode 100644 index 0000000000000000000000000000000000000000..e2fad819aa1fb1c76af30e547d9bbe7f9f148c8a --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/handoff.md @@ -0,0 +1,4 @@ +# Handoff +Task-local non-neural controller. Import controller.py, call reset_episode(), then act(obs). It returns a bounded float32 seven-vector or None. Requires top/front uint8 RGB and legal agent/qpos, agent/qvel arrays. memory.npz must remain adjacent. Python, NumPy and OpenCV are the only runtime dependencies. No network, worker API, simulator, or development agent is used at runtime. + +The runner owns the first hold. Candidate terminates by call 240 or native horizon; termination alone is not success. Explicit grasp/release timing prevents demonstrated nearest-neighbor phase stalls. Current image/joint distances select motion throughout. All versions and exploration records are retained outside the snapshot in workspace. Independent rehearsal outcomes and selected hash are recorded by the trusted API and exploration/rehearsal files. diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/model_tool_manifest.yaml b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/model_tool_manifest.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bdac75262c555c47de0e1597b8a4630513ad356b --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/model_tool_manifest.yaml @@ -0,0 +1,75 @@ +{ + "stage": "D20 E20 legal exploration", + "status": "candidate_pending_independent_rehearsal", + "python": "3.10.20", + "dependencies": { + "numpy": "2.2.6", + "opencv-python": "4.13.0.92", + "h5py": "3.16.0" + }, + "runtime_dependencies": [ + "numpy", + "opencv-python" + ], + "build_dependencies": [ + "h5py" + ], + "tools_used": [ + "exec_command shell and Python", + "view_image local contact-sheet inspection", + "worker_api.API.read_demo (local HDF5 only)", + "Python standard library: importlib, json, pathlib, hashlib, platform, importlib.metadata" + ], + "models": { + "coding_worker": "Agent-D20-E20-Compiled task-local worker; underlying model version not exposed", + "weight_updates": false, + "external_pretrained_weights": [], + "neural_finetuning": false + }, + "data_provenance": { + "source": "20 authorized /demonstrations/demo_00.h5 through demo_19.h5", + "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" + ], + "contract_sha256": "7da77b427c753ac7368d1d240e9303a88a4d72d049b678735e2098046f957f69", + "provided_manifest_sha256": "0a75ca2f8b6402803870db4a798e18fae450a92f37358e12d3d06d42349ffe14", + "worker_api_sha256": "88cca5fa5c1c9570ca2bd90e8848f67c09224fa498d94e63634ad191e913c41e", + "memory_sha256": "9097fb49bea688a2be312c5e1a0bd54da12ea5189e2b0e0eb9a7dc49045b570f", + "memory_contents": "4489 expert state/action pairs plus 20 terminal observation prototypes with synthetic zero-arm/open-gripper commands; hand-engineered features, no fitted neural weights" + }, + "validation": [ + "Baseline failure at episode 2", + "Timed v1 native success at episode 3, step 180" + ], + "environment_calls": "Only trusted worker API; actual ledger external", + "exploration_episodes": "See trusted budget and exploration ledger", + "network_access": "Not attempted; task restricts internet to audited provider proxy. No downloads or benchmark searches.", + "limitations": [ + "Fixed phase timing", + "Occlusion and missed contact", + "No robust regrasp" + ], + "runner_supplies": [ + "verified demo manifest", + "common environment lock" + ] +} \ No newline at end of file diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/policy_runner.py b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/policy_runner.py new file mode 100644 index 0000000000000000000000000000000000000000..e49448d6245feb7818ae505f1061708ab97c6ead --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-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/UnfoldShirt-v1/frozen/skills.md b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/skills.md new file mode 100644 index 0000000000000000000000000000000000000000..597cb6cfb43b12a64ccc030e9538c99113e73979 --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/skills.md @@ -0,0 +1,2 @@ +# Task skills +Segment the yellow shirt in two cameras; retrieve motion from legal demonstrations using cloth shape/location and robot joints. Constrain retrieval by manipulation phase to avoid open-gripper dwell stalls. Approach open, close, spread, dwell, release and retract. Preserve demonstrated zero rotation and native action units. Recompute every step; halt on unavailable observations or distant unsupported states. No robust regrasp capability is claimed. diff --git a/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/worker_api.py b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-v1/frozen/worker_api.py new file mode 100644 index 0000000000000000000000000000000000000000..ff137d1c68cb70a1549326d2d22b430c9cf4e20c --- /dev/null +++ b/agent_d20_e20/frozen_20261102/tasks/UnfoldShirt-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