code: def make_agent(
      agent_type, env, policy_hparams, policy_dir, sampling_temp,
      sim_env_kwargs_fn=None, frame_stack_size=None, rollout_agent_type=None,
      batch_size=None, inner_batch_size=None, env_type=None, **planner_kwargs
  ):
    
    if batch_size is None:
      batch_size = env.batch_size
    return {
        "random": lambda: rl_utils.RandomAgent(  # pylint: disable=g-long-lambda
            batch_size, env.observation_space, env.action_space
        ),
        "policy": lambda: rl_utils.PolicyAgent(  # pylint: disable=g-long-lambda
            batch_size, env.observation_space, env.action_space,
            policy_hparams, policy_dir, sampling_temp
        ),
        "planner": lambda: rl_utils.PlannerAgent(  # pylint: disable=g-long-lambda
            batch_size, make_agent(
                rollout_agent_type, env, policy_hparams, policy_dir,
                sampling_temp, batch_size=inner_batch_size
            ), make_env(env_type, env.env, sim_env_kwargs_fn()),
            lambda env: rl_utils.BatchStackWrapper(env, frame_stack_size),
            discount_factor=policy_hparams.gae_gamma, **planner_kwargs
        ),
    }[agent_type]()
docs: Factory function for Agents.