{"record":{"id":"590c504659673595","repo":"Unity-Technologies/ml-agents","slug":"the-group-behavior-name-does-not-correspond-to-a","errorCode":null,"errorMessage":"The group {behavior_name} does not correspond to an existing agent group in the environment","messagePattern":"The group (.+?) does not correspond to an existing agent group in the environment","errorType":"exception","errorClass":"UnityActionException","httpStatus":null,"severity":"error","filePath":"ml-agents-envs/mlagents_envs/environment.py","lineNumber":362,"sourceCode":"                    group_name\n                ].action_spec.empty_action(n_agents)\n        step_input = self._generate_step_input(self._env_actions)\n        with hierarchical_timer(\"communicator.exchange\"):\n            outputs = self._communicator.exchange(step_input, self._poll_process)\n        if outputs is None:\n            raise UnityCommunicatorStoppedException(\"Communicator has exited.\")\n        self._update_behavior_specs(outputs)\n        rl_output = outputs.rl_output\n        self._update_state(rl_output)\n        self._env_actions.clear()\n\n    @property\n    def behavior_specs(self) -> MappingType[str, BehaviorSpec]:\n        return BehaviorMapping(self._env_specs)\n\n    def _assert_behavior_exists(self, behavior_name: str) -> None:\n        if behavior_name not in self._env_specs:\n            raise UnityActionException(\n                f\"The group {behavior_name} does not correspond to an existing \"\n                f\"agent group in the environment\"\n            )\n\n    def set_actions(self, behavior_name: BehaviorName, action: ActionTuple) -> None:\n        self._assert_behavior_exists(behavior_name)\n        if behavior_name not in self._env_state:\n            return\n        action_spec = self._env_specs[behavior_name].action_spec\n        num_agents = len(self._env_state[behavior_name][0])\n        action = action_spec._validate_action(action, num_agents, behavior_name)\n        self._env_actions[behavior_name] = action\n\n    def set_action_for_agent(\n        self, behavior_name: BehaviorName, agent_id: AgentId, action: ActionTuple\n    ) -> None:\n        self._assert_behavior_exists(behavior_name)\n        if behavior_name not in self._env_state:","sourceCodeStart":344,"sourceCodeEnd":380,"githubUrl":"https://github.com/Unity-Technologies/ml-agents/blob/3ecb446f75d1e7400eb404c562dc005d3164cffc/ml-agents-envs/mlagents_envs/environment.py#L344-L380","documentation":"UnityActionException raised by UnityEnvironment._assert_behavior_exists when the given behavior_name is not a key in self._env_specs, i.e. that agent group does not exist in the current environment state. It is used as a guard by set_actions, set_action_for_agent, and get_steps to reject unknown behaviors before acting on them.","triggerScenarios":"Calling env.set_actions('<Behavior>', action), env.set_action_for_agent(...), or env.get_steps('<Behavior>') with a behavior name that is not present in env.behavior_specs (typo, behavior removed, or environment not stepped/reset yet so specs are empty).","commonSituations":"Hardcoded behavior names that changed after renaming the Behavior Name parameter in Unity; reading specs before the first reset so no behaviors are registered; a behavior only appears when its agents request a decision.","solutions":["Print/list env.behavior_specs.keys() and use the exact behavior name string.","Call env.reset() (or step once) before querying/setting actions so behavior specs are populated.","Fix typos and match the Behavior Name parameter set on the Agent in the Unity scene.","Guard calls: only use behaviors present in the current specs mapping."],"exampleFix":"// before\nenv.set_actions('Crawler', action_tuple)  # behavior renamed -> UnityActionException\n\n// after\nenv.reset()\nfor behavior in env.behavior_specs:\n    env.set_actions(behavior, action_tuple)","handlingStrategy":"validation","validationCode":"env.reset()\nbehavior_name = '3DBall'\nif behavior_name not in env.behavior_specs:\n    raise ValueError(\n        f'{behavior_name!r} not found. Available: {list(env.behavior_specs)}'\n    )\nenv.set_actions(behavior_name, action_tuple)","typeGuard":null,"tryCatchPattern":"from mlagents_envs.exception import UnityActionException\ntry:\n    steps = env.get_steps(behavior_name)\nexcept UnityActionException as e:\n    print(f'{e}. Available behaviors: {list(env.behavior_specs)}')\n    raise","preventionTips":["Derive behavior names from env.behavior_specs instead of hardcoding strings.","Rename a Behavior only in sync with the Python-side configuration.","Call reset() before the first get_steps/set_actions so specs are populated.","Note some behaviors appear only when their agents request decisions."],"tags":["behavior-name","agent-group","validation"],"backgroundTag":"unknown-behavior-name","analyzedSha":"3ecb446f75d1e7400eb404c562dc005d3164cffc","analyzedAt":"2026-09-02T16:33:12.832Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T21:17:11.164Z"}