class_docstr: Concatenating embedding with float features before passing the input
  to DQN
code: def __init__(
      self,
      state_dense_dim: int,
      model_feature_config: rlt.ModelFeatureConfig,
  ) -> None:
      super().__init__()
      assert (
          state_dense_dim > 0
      ), "state_dense_dim must be > 0, got {}".format(state_dense_dim)
      self.state_dense_dim = state_dense_dim
      # for input prototype
      self._id_list_feature_names: List[str] = [
          config.name
          for config in model_feature_config.id_list_feature_configs
      ]
      self._id_score_list_feature_names: List[str] = [
          config.name
          for config in model_feature_config.id_score_list_feature_configs
      ]
  
      embedding_bag_configs: List[
          EmbeddingBagConfig
      ] = embedding_bag_configs_from_feature_configs(
          [model_feature_config],
      )
      assert (
          embedding_bag_configs
      ), "No embedding bag config generated. Please double check model_feature_config."
  
      # Assume all id features will be mapped to the same number of dimensions
      assert (
          len(
              {config.embedding_dim for config in embedding_bag_configs}
          )
          == 1
      ), "Please ensure all embedding_dims in id_mapping_config are the same"
      embedding_dim = embedding_bag_configs[0].embedding_dim
  
      self.embedding_bags = torch.nn.ModuleDict(
          {
              table_name: torch.nn.EmbeddingBag(
                  num_embeddings=id_mapping.embedding_table_size,
                  embedding_dim=id_mapping.embedding_dim,
                  mode=str(id_mapping.pooling_type.name).lower(),
              )
              for table_name, id_mapping in model_feature_config.id_mapping_config.items()
          }
      )
      self.feat2table: Dict[str, str] = {
          feature_name: config.id_mapping_name
          for feature_name, config in model_feature_config.name2config.items()
      }
      self._output_dim = (
          state_dense_dim
          + len(self._id_list_feature_names) * embedding_dim
          + len(self._id_score_list_feature_names) * embedding_dim
      )
  
file_path: ReAgent/reagent/models/embedding_bag_concat.py
imports: from typing import Dict, List
  import torch
  from reagent.core import types
  from reagent.core.utils import embedding_bag_configs_from_feature_configs
  from reagent.models.base import ModelBase
  from torchrec import EmbeddingBagConfig
label_desc: Use image node_id 1 to create a new EmbeddingBagConcat object from inherited base classes: ModelBase with example: obj = EmbeddingBagConcat(state_dense_dim, model_feature_config)