code: def _get_q_value(
      self,
      model_out: TensorType,
      actions: TensorType,
      q_model: TorchModelV2,
  ) -> TensorType:
      if self._is_action_discrete:
          rows = torch.arange(len(actions)).to(actions)
          q_vals = q_model(model_out)[rows, actions].unsqueeze(-1)
      else:
          q_vals = q_model(torch.cat([model_out, actions], -1))
  
      return q_vals
  
imports: from typing import Dict, List, Union
  import gymnasium
  import numpy
  from ray.rllib.models.torch.misc import SlimFC
  from ray.rllib.models.torch.torch_modelv2 import TorchModelV2
  from ray.rllib.models.utils import get_activation_fn
  from ray.rllib.utils.framework import try_import_torch
  from ray.rllib.utils.typing import ModelConfigDict, TensorType
label_desc: Use image node_id 4 for calling the CRRModel obj's underlying member method code with example usage: obj._get_q_value(model_out, actions, q_model) and returns: q_vals