code: def step(self):
      loss = self.hp + random.random()
      i = self.iteration
      print(f"metrics at step {i}:", {"loss": loss})
      core_v2.train.report_validation_metrics(
          steps_completed=i, metrics={"loss": loss}
      )
      return {"loss": loss}
  
file_path: determined/examples/features/unmanaged/ray/ray_hp_search_cleanup.py
imports: import random
  import uuid
  from typing import Dict, Union
  import ray
  from ray import air, tune
  from ray.tune.schedulers import AsyncHyperBandScheduler
  from determined.experimental import core_v2
label_desc: Use image node_id 2 for calling the Trainable obj's underlying member method code with example usage: obj.step() and returns: dict