from models.action_decoder import proposal_mode_vocab from train.trainer import build_policy def test_candidate_macro_coverage(tiny_policy_config, tiny_trainer_config, tiny_batch): config = tiny_policy_config(num_candidates=7) batch = tiny_batch(chunk_size=config.decoder.chunk_size) policy = build_policy(config, tiny_trainer_config(policy_type="elastic_reveal")) policy.eval() task_to_text = { "foliage": ["create a gap in the foliage and retrieve the target"], "bag": ["open the bag mouth and retrieve the target object"], "cloth": ["lift the top layer enough to retrieve the hidden object"], } for task_name, texts in task_to_text.items(): output = policy( images=batch["images"][:1], depths=batch["depths"][:1], depth_valid=batch["depth_valid"][:1], camera_intrinsics=batch["camera_intrinsics"][:1], camera_extrinsics=batch["camera_extrinsics"][:1], proprio=batch["proprio"][:1], texts=texts, history_images=batch["history_images"][:1], history_depths=batch["history_depths"][:1], history_depth_valid=batch["history_depth_valid"][:1], history_proprio=batch["history_proprio"][:1], history_actions=batch["history_actions"][:1], plan=False, ) expected = set(proposal_mode_vocab(task_name, config.decoder.num_proposal_modes)) observed = set(output["proposal_mode_names"][0]) assert expected.issubset(observed)