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)