docstr: choose_action - chooses the most likely action
  if 'deterministic' - take the mean of the policy which is the prediction of the policy network.
  else - use the exploration policy
  :param curr_state:
  :return: action wrapped in ActionInfo
docstr_tok: ["choose_action","-","chooses","the","most","likely","action","if","'deterministic","'","-","take","the","mean","of","the","policy","which","is","the","prediction","of","the","policy","network",".","else","-","use","the","exploration","policy",":","param","curr_state",":",":","return",":","action","wrapped","in","ActionInfo"]
code: def choose_action(self, curr_state):
      """
      choose_action - chooses the most likely action
      if 'deterministic' - take the mean of the policy which is the prediction of the policy network.
      else - use the exploration policy
      :param curr_state:
      :return: action wrapped in ActionInfo
      """
      if not isinstance(self.spaces.action, BoxActionSpace):
          raise ValueError(
              "SAC works only for continuous control problems"
          )
      # convert to batch so we can run it through the network
      tf_input_state = self.prepare_batch_for_inference(
          curr_state, "policy"
      )
      # use the online network for prediction
      policy_network = self.networks["policy"].online_network
      policy_head = policy_network.output_heads[0]
      result = policy_network.predict(
          tf_input_state,
          outputs=[policy_head.policy_mean, policy_head.actions],
      )
      action_mean, action_sample = result
  
      # if using deterministic policy, take the mean values. else, use exploration policy to sample from the pdf
      if (
          self.phase == RunPhase.TEST
          and self.ap.algorithm.use_deterministic_for_evaluation
      ):
          action = action_mean[0]
      else:
          action = action_sample[0]
  
      self.action_signal.add_sample(action)
  
      action_info = ActionInfo(action=action)
      return action_info
  
imports: from typing import Union
  import copy
  import numpy
  from collections import OrderedDict
  from rl_coach.agents.agent import Agent
  from rl_coach.agents.policy_optimization_agent import PolicyOptimizationAgent
  from rl_coach.architectures.head_parameters import SACQHeadParameters, SACPolicyHeadParameters, VHeadParameters
  from rl_coach.architectures.middleware_parameters import FCMiddlewareParameters
  from rl_coach.base_parameters import AlgorithmParameters, NetworkParameters, AgentParameters, EmbedderScheme, MiddlewareScheme
  from rl_coach.core_types import ActionInfo, EnvironmentSteps, RunPhase
  from rl_coach.exploration_policies.additive_noise import AdditiveNoiseParameters
  from rl_coach.memories.non_episodic.experience_replay import ExperienceReplayParameters
  from rl_coach.architectures.embedder_parameters import InputEmbedderParameters
  from rl_coach.spaces import BoxActionSpace
label_desc: Use image node_id 6 for calling the SoftActorCriticAgent obj's underlying member method code with example usage: obj.choose_action(curr_state) and returns: action_info