code: def build_serving_module(
      self,
      trainer_module: ReAgentLightningModule,
      normalization_data_map: Dict[str, NormalizationData],
  ) -> torch.nn.Module:
      assert isinstance(trainer_module, SACTrainer)
      actor_serving_module = (
          self.actor_net_builder.value.build_serving_module(
              trainer_module.actor_network,
              self.state_feature_config,
              normalization_data_map[NormalizationKey.STATE],
              normalization_data_map[NormalizationKey.ACTION],
              serve_mean_policy=self.serve_mean_policy,
          )
      )
      return actor_serving_module
  
file_path: ReAgent/reagent/model_managers/actor_critic/sac.py
imports: import logging
  from typing import Dict, Optional
  import torch
  from reagent.core.dataclasses import dataclass, field
  from reagent.core.parameters import NormalizationData, NormalizationKey, param_hash
  from reagent.model_managers.actor_critic_base import ActorCriticBase
  from reagent.net_builder.continuous_actor.gaussian_fully_connected import GaussianFullyConnected
  from reagent.net_builder.parametric_dqn.fully_connected import FullyConnected
  from reagent.net_builder.unions import ContinuousActorNetBuilder__Union, ParametricDQNNetBuilder__Union, ValueNetBuilder__Union
  from reagent.net_builder.value.fully_connected import FullyConnected
  from reagent.training import ReAgentLightningModule, SACTrainer, SACTrainerParameters
  from reagent.workflow.types import RewardOptions
label_desc: Use image node_id 4 for calling the SAC obj's underlying member method code with example usage: obj.build_serving_module(trainer_module, normalization_data_map) and returns: actor_serving_module