class_docstr: This is the multi-agent version of ExternalEnv.
class_docstr_tok: ["This","is","the","multi-agent","version","of","ExternalEnv","."]
code: def start_episode(
      self,
      episode_id: Optional[str] = None,
      training_enabled: bool = True,
  ) -> str:
      if episode_id is None:
          episode_id = uuid.uuid4().hex
  
      if episode_id in self._finished:
          raise ValueError(
              "Episode {} has already completed.".format(episode_id)
          )
  
      if episode_id in self._episodes:
          raise ValueError(
              "Episode {} is already started".format(episode_id)
          )
  
      self._episodes[episode_id] = _ExternalEnvEpisode(
          episode_id,
          self._results_avail_condition,
          training_enabled,
          multiagent=True,
      )
  
      return episode_id
  
file_path: ray/rllib/env/external_multi_agent_env.py
imports: import uuid
  import gymnasium
  from typing import Optional
  from ray.rllib.utils.annotations import override, PublicAPI
  from ray.rllib.env.external_env import ExternalEnv, _ExternalEnvEpisode
  from ray.rllib.utils.typing import MultiAgentDict
label_desc: Use image node_id 3 for calling the ExternalMultiAgentEnv obj's underlying member method code with example usage: obj.start_episode(episode_id, training_enabled) and returns: episode_id