text: from typing import Dict
  
  
  class BrainInfo:
      def __init__(self, visual_observation, vector_observation, text_observations, memory=None,
                   reward=None, agents=None, local_done=None,
                   vector_action=None, text_action=None, max_reached=None):
          """
          Describes experience at current step of all agents linked to a brain.
          """
          self.visual_observations = visual_observation
          self.vector_observations = vector_observation
          self.text_observations = text_observations
          self.memories = memory
          self.rewards = reward
          self.local_done = local_done
          self.max_reached = max_reached
          self.agents = agents
          self.previous_vector_actions = vector_action
          self.previous_text_actions = text_action
  
  
  AllBrainInfo = Dict[str, BrainInfo]
  
  
  class BrainParameters:
      def __init__(self, brain_name, brain_param):
          """
          Contains all brain-specific parameters.
          :param brain_name: Name of brain.
          :param brain_param: Dictionary of brain parameters.
          """
          self.brain_name = brain_name
          self.vector_observation_space_size = brain_param["vectorObservationSize"]
          self.num_stacked_vector_observations = brain_param["numStackedVectorObservations"]
          self.number_visual_observations = len(brain_param["cameraResolutions"])
          self.camera_resolutions = brain_param["cameraResolutions"]
          self.vector_action_space_size = brain_param["vectorActionSize"]
          self.vector_action_descriptions = brain_param["vectorActionDescriptions"]
          self.vector_action_space_type = ["discrete", "continuous"][brain_param["vectorActionSpaceType"]]
          self.vector_observation_space_type = ["discrete", "continuous"][brain_param["vectorObservationSpaceType"]]
  
      def __str__(self):
          return '''Unity brain name: {0}
          Number of Visual Observations (per agent): {1}
          Vector Observation space type: {2}
          Vector Observation space size (per agent): {3}
          Number of stacked Vector Observation: {4}
          Vector Action space type: {5}
          Vector Action space size (per agent): {6}
          Vector Action descriptions: {7}'''.format(self.brain_name,
                                                    str(self.number_visual_observations),
                                                    self.vector_observation_space_type,
                                                    str(self.vector_observation_space_size),
                                                    str(self.num_stacked_vector_observations),
                                                    self.vector_action_space_type,
                                                    str(self.vector_action_space_size),
                                                    ', '.join(self.vector_action_descriptions))
  