def __init__(self, args):
        """
        Initializes the internal structures of the SlotFillingDST. Loads the
        DataBase and Ontology, retrieves the DataBase table name, and creates
        the dialogue State.
        :param args:
        """

        super(SlotFillingDST, self).__init__()

        if 'ontology' not in args:
            raise AttributeError('SlotFillingDST: Please provide ontology!')
        if 'database' not in args:
            raise AttributeError('SlotFillingDST: Please provide database!')
        if 'domain' not in args:
            raise AttributeError('SlotFillingDST: Please provide domain!')

        ontology = args['ontology']
        database = args['database']
        domain = args['domain']

        self.ontology = None
        if isinstance(ontology, Ontology):
            self.ontology = ontology
        elif isinstance(ontology, str):
            self.ontology = Ontology(ontology)
        else:
            raise ValueError('Unacceptable ontology type %s ' % ontology)

        self.database = None
        if isinstance(database, DataBase):
            self.database = database

        elif isinstance(database, str):
            if database[-3:] == '.db':
                self.database = SQLDataBase(database)
            elif database[-5:] == '.json':
                self.database = JSONDataBase(database)
            else:
                raise ValueError('Unacceptable database type %s ' % database)

        else:
            raise ValueError('Unacceptable datbase type %s ' % database)

        # Get Table name
        self.db_table_name = self.database.get_table_name()

        self.DB_ITEMS = 0  # This will raise an error!

        self.domain = domain
        if domain in ['CamRest', 'SlotFilling']:
            self.DState = \
                SlotFillingDialogueState(
                    {'slots': self.ontology.ontology['system_requestable']})
        else:
            print('Warning! domain has not been defined. Using Slot-Filling '
                  'dialogue State')
            self.DState = \
                SlotFillingDialogueState(
                    {'slots': self.ontology.ontology['system_requestable']})

        Initializes the internal structures of the SlotFillingDST. Loads the
        DataBase and Ontology, retrieves the DataBase table name, and creates
        the dialogue State.
        :param args:
        
plato/agent/component/dialogue_state_tracker/slot_filling_dst.py