anhtld commited on
Commit
3c27add
·
verified ·
1 Parent(s): a9a48b7

Auto-sync: 2026-06-27 10:26:03

Browse files
dovla_cil/eval/maniskill_policy_rollout.py CHANGED
@@ -115,7 +115,7 @@ def evaluate_maniskill_policy_rollout(
115
 
116
  trainer_config = checkpoint.get("trainer_config", {})
117
  dataset = CILDataset(dataset_dir)
118
- group_ids = (
119
  list(dataset.group_ids)
120
  if all_groups
121
  else _validation_group_ids(
@@ -124,6 +124,7 @@ def evaluate_maniskill_policy_rollout(
124
  seed=int(trainer_config.get("seed", 0)),
125
  )
126
  )
 
127
  if max_groups is not None:
128
  if max_groups <= 0:
129
  raise ValueError("max_groups must be positive when provided")
@@ -134,10 +135,12 @@ def evaluate_maniskill_policy_rollout(
134
  observation_mode=model_config.observation_mode,
135
  )
136
  if selection_mode == "retrieval_lattice":
 
 
137
  cases = _attach_retrieved_lattice_candidates(
138
  dataset,
139
  cases,
140
- eval_group_ids=group_ids,
141
  obs_dim=model_config.obs_dim,
142
  observation_mode=model_config.observation_mode,
143
  )
@@ -268,6 +271,67 @@ def _prepare_rollout_cases(
268
  return cases
269
 
270
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  def _evaluate_task_cases(
272
  task_id: str,
273
  cases: list[_RolloutCase],
 
115
 
116
  trainer_config = checkpoint.get("trainer_config", {})
117
  dataset = CILDataset(dataset_dir)
118
+ split_group_ids = (
119
  list(dataset.group_ids)
120
  if all_groups
121
  else _validation_group_ids(
 
124
  seed=int(trainer_config.get("seed", 0)),
125
  )
126
  )
127
+ group_ids = list(split_group_ids)
128
  if max_groups is not None:
129
  if max_groups <= 0:
130
  raise ValueError("max_groups must be positive when provided")
 
135
  observation_mode=model_config.observation_mode,
136
  )
137
  if selection_mode == "retrieval_lattice":
138
+ if all_groups:
139
+ raise ValueError("retrieval_lattice requires a held-out validation split")
140
  cases = _attach_retrieved_lattice_candidates(
141
  dataset,
142
  cases,
143
+ heldout_group_ids=split_group_ids,
144
  obs_dim=model_config.obs_dim,
145
  observation_mode=model_config.observation_mode,
146
  )
 
271
  return cases
272
 
273
 
274
+ def _attach_retrieved_lattice_candidates(
275
+ dataset: CILDataset,
276
+ cases: list[_RolloutCase],
277
+ *,
278
+ heldout_group_ids: list[str],
279
+ obs_dim: int,
280
+ observation_mode: str,
281
+ ) -> list[_RolloutCase]:
282
+ if observation_mode != "state":
283
+ raise ValueError("retrieval_lattice currently supports state observations only")
284
+ heldout = set(heldout_group_ids)
285
+ bank: dict[str, list[tuple[str, np.ndarray, list[list[list[float]]], list[str]]]] = (
286
+ defaultdict(list)
287
+ )
288
+ for group_id in dataset.group_ids:
289
+ if group_id in heldout:
290
+ continue
291
+ records = dataset.get_group(group_id)
292
+ if not records:
293
+ continue
294
+ task_ids = {record.task_id for record in records}
295
+ if len(task_ids) != 1:
296
+ continue
297
+ feature = np.asarray(
298
+ vectorize_toy_observation(records[0].observation_inline or {}, obs_dim=obs_dim),
299
+ dtype=np.float32,
300
+ )
301
+ bank[next(iter(task_ids))].append(
302
+ (
303
+ group_id,
304
+ feature,
305
+ [_numeric_action_values(record) for record in records],
306
+ [str(record.candidate_type) for record in records],
307
+ )
308
+ )
309
+
310
+ output: list[_RolloutCase] = []
311
+ for case in cases:
312
+ candidates = bank.get(case.task_id, [])
313
+ if not candidates:
314
+ output.append(case)
315
+ continue
316
+ query = np.asarray(
317
+ vectorize_toy_observation(case.observation, obs_dim=obs_dim),
318
+ dtype=np.float32,
319
+ )
320
+ source_group_id, _feature, actions, candidate_types = min(
321
+ candidates,
322
+ key=lambda item: float(np.mean((item[1] - query) ** 2)),
323
+ )
324
+ output.append(
325
+ replace(
326
+ case,
327
+ candidate_action_values=actions,
328
+ candidate_types=candidate_types,
329
+ candidate_source_group_id=source_group_id,
330
+ )
331
+ )
332
+ return output
333
+
334
+
335
  def _evaluate_task_cases(
336
  task_id: str,
337
  cases: list[_RolloutCase],