def __init__(self, configuration): super().__init__() # There is only one agent in this setting self.agent_id = 0 # Dialogue statistics self.dialogue_episode = 0 self.dialogue_turn = 0 self.num_successful_dialogues = 0 self.num_task_success = 0 self.cumulative_rewards = 0 self.total_dialogue_turns = 0 self.minibatch_length = 50 self.train_interval = 10 self.num_batches_per_epoch = 10 self.SAVE_LOG = True # The dialogue will terminate after MAX_TURNS (this agent will issue # a bye() dialogue act. self.MAX_TURNS = 15 self.dialogue_turn = -1 self.dialogue_manager = None self.user_model = None self.agent_goal = None self.goal_generator = None self.prev_turnstate = TurnState() self.curr_state = None self.recorder = DialogueEpisodeRecorder() # TODO: Handle this properly - get reward function type from config self.reward_func = SlotFillingReward() self.ontology, self.database = build_domain_settings( configuration["DIALOGUE"]) self.user_simulator = AgendaBasedUS( goal_generator=Goal.GoalGenerator(self.ontology, self.database), error_model=ErrorModel( self.ontology, slot_confuse_prob=0.0, op_confuse_prob=0.0, value_confuse_prob=0.0, ), ) self.dialogue_manager = DialogueManager.DialogueManager( configuration, self.ontology, self.database, self.agent_id, "system", configuration["AGENT_0"]["DM"]["policy"], )