def METHOD_NAME(self, opt: Opt, top_agent: Agent):
    """
    Initialize a shared version of a top-level agent.
    This just makes sure that each "agent" has the same params, but different
    history objects.
    :param opt_key:
        which sub agent to create with the shared model.
    """
    opt.update(opt['override'])
    if 'model' in opt['override']:
        model_class = load_agent_module(opt['override']['model'])
    else:
        model_class = type(top_agent)
    shared = top_agent.share()
    shared['opt'] = opt
    return model_class(opt, shared)