Spaces:
Running
Running
from typing import NamedTuple | |
from urllib.parse import urlparse, parse_qs | |
from mlagents_envs.base_env import AgentId, GroupId | |
GlobalGroupId = str | |
GlobalAgentId = str | |
class BehaviorIdentifiers(NamedTuple): | |
""" | |
BehaviorIdentifiers is a named tuple of the identifiers that uniquely distinguish | |
an agent encountered in the trainer_controller. The named tuple consists of the | |
fully qualified behavior name, the name of the brain name (corresponds to trainer | |
in the trainer controller) and the team id. In the future, this can be extended | |
to support further identifiers. | |
""" | |
behavior_id: str | |
brain_name: str | |
team_id: int | |
def from_name_behavior_id(name_behavior_id: str) -> "BehaviorIdentifiers": | |
""" | |
Parses a name_behavior_id of the form name?team=0 | |
into a BehaviorIdentifiers NamedTuple. | |
This allows you to access the brain name and team id of an agent | |
:param name_behavior_id: String of behavior params in HTTP format. | |
:returns: A BehaviorIdentifiers object. | |
""" | |
parsed = urlparse(name_behavior_id) | |
name = parsed.path | |
ids = parse_qs(parsed.query) | |
team_id: int = 0 | |
if "team" in ids: | |
team_id = int(ids["team"][0]) | |
return BehaviorIdentifiers( | |
behavior_id=name_behavior_id, brain_name=name, team_id=team_id | |
) | |
def create_name_behavior_id(name: str, team_id: int) -> str: | |
""" | |
Reconstructs fully qualified behavior name from name and team_id | |
:param name: brain name | |
:param team_id: team ID | |
:return: name_behavior_id | |
""" | |
return name + "?team=" + str(team_id) | |
def get_global_agent_id(worker_id: int, agent_id: AgentId) -> GlobalAgentId: | |
""" | |
Create an agent id that is unique across environment workers using the worker_id. | |
""" | |
return f"agent_{worker_id}-{agent_id}" | |
def get_global_group_id(worker_id: int, group_id: GroupId) -> GlobalGroupId: | |
""" | |
Create a group id that is unique across environment workers when using the worker_id. | |
""" | |
return f"group_{worker_id}-{group_id}" | |