def __init__(self, generate_prompts):
        configs = []

        if not Settings.config.has_option("DEFAULT", "domains"):
            logger.error("You must specify the domains under the DEFAULT section of the config")
        domains = Settings.config.get("DEFAULT", "domains")
        logger.info("--Simulating dialogues over the domains: ", domains)
        self.possible_domains = domains.split(",")
        DomainUtils.checkDomainStrings(domainStrings=self.possible_domains)

        self.maxTurns = 30
        if Settings.config.has_option("simulate", "maxturns"):
            configs.append("maxturns")
            self.maxTurns = Settings.config.getint("simulate", "maxturns")
        self.forceNullPositive = False
        if Settings.config.has_option("simulate", "forcenullpositive"):
            configs.append("forcenullpositive")
            self.forceNullPositive = Settings.config.getboolean("simulate", "forcenullpositive")
        conf_scorer_name = "additive"
        if Settings.config.has_option("simulate", "confscorer"):
            conf_scorer_name = Settings.config.get("simulate", "confscorer")

        if Settings.config.has_section("simulate"):
            for opt in Settings.config.options("simulate"):
                if opt not in configs and opt not in Settings.config.defaults():
                    logger.error("Invalid config: " + opt)

        # [MultiDomain?] Dialogue Management/policy.
        # -----------------------------------------
        self.topic_manager = TopicManager.TopicManager()

        # Simulated User.
        # -----------------------------------------
        # TODO - deal with multi domain simulation - whilst changing Settings.py ill just pass domain here for now
        logger.debug("simulate.py -- XXXXXXX -- directly passing domain name in simulate at present...")
        self.simulator = UserSimulator.SimulatedUsersManager(domainStrings=self.possible_domains)

        # Error Simulator.
        # -----------------------------------------
        # TODO - it is a hack for now passing the domain string directly from config via self.possible_domains. look at this
        # self.errorSimulator = ErrorSimulator.CuedErrorSimulator(conf_scorer_name, domainString=self.possible_domains[0])
        self.errorSimulator = ErrorSimulator.SimulatedErrorManager(conf_scorer_name, self.possible_domains)

        # SemO.
        # -----------------------------------------
        self.semoClass = None
        if generate_prompts:
            self.semo_name = "PassthroughSemO"
            if Settings.config.has_option("hub", "semo"):
                self.semo_name = Settings.config.get("hub", "semo")
            # SemO.
            if self.semo_name == "PassthroughSemO":
                self.semoClass = SemO.PassthroughSemO()
            elif self.semo_name == "BasicSemO":
                self.semoClass = SemO.BasicSemO()
            else:
                logger.warning("Invalid SemO: %s. Using PassthroughSemO." % self.semo_name)
                self.semoClass = SemO.PassthroughSemO()

        # Evaluation Manager.
        # -----------------------------------------
        self.evaluator = Evaluation.EvaluationManager(self.possible_domains)
Пример #2
0
    def __init__(self, generate_prompts):
        configs = []

        if not Settings.config.has_option("DEFAULT", "domains"):
            logger.error(
                "You must specify the domains under the DEFAULT section of the config"
            )
        domains = Settings.config.get("DEFAULT", 'domains')
        logger.info('--Simulating dialogues over the domains: ', domains)
        self.possible_domains = domains.split(',')
        DomainUtils.checkDomainStrings(domainStrings=self.possible_domains)

        self.maxTurns = 30
        if Settings.config.has_option("simulate", "maxturns"):
            configs.append('maxturns')
            self.maxTurns = Settings.config.getint("simulate", "maxturns")
        self.forceNullPositive = False
        if Settings.config.has_option("simulate", "forcenullpositive"):
            configs.append('forcenullpositive')
            self.forceNullPositive = Settings.config.getboolean(
                "simulate", "forcenullpositive")
        conf_scorer_name = 'additive'
        if Settings.config.has_option('simulate', 'confscorer'):
            conf_scorer_name = Settings.config.get('simulate', 'confscorer')

        if Settings.config.has_section('simulate'):
            for opt in Settings.config.options('simulate'):
                if opt not in configs and opt not in Settings.config.defaults(
                ):
                    logger.error('Invalid config: ' + opt)

        # [MultiDomain?] Dialogue Management/policy.
        #-----------------------------------------
        self.topic_manager = TopicManager.TopicManager()

        # Simulated User.
        #-----------------------------------------
        # TODO - deal with multi domain simulation - whilst changing Settings.py ill just pass domain here for now
        logger.debug(
            'simulate.py -- XXXXXXX -- directly passing domain name in simulate at present...'
        )
        self.simulator = UserSimulator.SimulatedUsersManager(
            domainStrings=self.possible_domains)

        # Error Simulator.
        #-----------------------------------------
        # TODO - it is a hack for now passing the domain string directly from config via self.possible_domains. look at this
        #self.errorSimulator = ErrorSimulator.CuedErrorSimulator(conf_scorer_name, domainString=self.possible_domains[0])
        self.errorSimulator = ErrorSimulator.SimulatedErrorManager(
            conf_scorer_name, self.possible_domains)

        # SemO.
        #-----------------------------------------
        self.semoClass = None
        if generate_prompts:
            self.semo_name = 'PassthroughSemO'
            if Settings.config.has_option('hub', 'semo'):
                self.semo_name = Settings.config.get('hub', 'semo')
            # SemO.
            if self.semo_name == 'PassthroughSemO':
                self.semoClass = SemO.PassthroughSemO()
            elif self.semo_name == 'BasicSemO':
                self.semoClass = SemO.BasicSemO()
            else:
                logger.warning('Invalid SemO: %s. Using PassthroughSemO.' %
                               self.semo_name)
                self.semoClass = SemO.PassthroughSemO()

        # Evaluation Manager.
        #-----------------------------------------
        self.evaluator = Evaluation.EvaluationManager(self.possible_domains)