def test_should_be_deserializable(self): # When register_processing_unit(TestIntentClassifier) register_processing_unit(TestSlotFiller) config = ProbabilisticIntentParserConfig( intent_classifier_config=TestIntentClassifierConfig(), slot_filler_config=TestSlotFillerConfig() ) parser_dict = { "unit_name": "probabilistic_intent_parser", "slot_fillers": [ { "intent": "MakeCoffee", "slot_filler_name": "slot_filler_MakeCoffee" }, { "intent": "MakeTea", "slot_filler_name": "slot_filler_MakeTea" } ], "config": config.to_dict(), } self.tmp_file_path.mkdir() (self.tmp_file_path / "intent_classifier").mkdir() (self.tmp_file_path / "slot_filler_MakeCoffee").mkdir() (self.tmp_file_path / "slot_filler_MakeTea").mkdir() self.writeJsonContent(self.tmp_file_path / "intent_parser.json", parser_dict) self.writeJsonContent( self.tmp_file_path / "intent_classifier" / "metadata.json", {"unit_name": "test_intent_classifier"}) self.writeJsonContent( self.tmp_file_path / "slot_filler_MakeCoffee" / "metadata.json", {"unit_name": "test_slot_filler"}) self.writeJsonContent( self.tmp_file_path / "slot_filler_MakeTea" / "metadata.json", {"unit_name": "test_slot_filler"}) # When parser = ProbabilisticIntentParser.from_path(self.tmp_file_path) # Then self.assertDictEqual(parser.config.to_dict(), config.to_dict()) self.assertIsNotNone(parser.intent_classifier) self.assertListEqual(sorted(parser.slot_fillers), ["MakeCoffee", "MakeTea"])
def test_should_be_deserializable(self): # When class TestIntentClassifierConfig(ProcessingUnitConfig): unit_name = "test_intent_classifier" def to_dict(self): return {"unit_name": self.unit_name} @classmethod def from_dict(cls, obj_dict): return TestIntentClassifierConfig() class TestIntentClassifier(IntentClassifier): unit_name = "test_intent_classifier" config_type = TestIntentClassifierConfig def get_intent(self, text, intents_filter): return None def fit(self, dataset): return self def to_dict(self): return { "unit_name": self.unit_name, } @classmethod def from_dict(cls, unit_dict): conf = cls.config_type() return TestIntentClassifier(conf) class TestSlotFillerConfig(ProcessingUnitConfig): unit_name = "test_slot_filler" def to_dict(self): return {"unit_name": self.unit_name} @classmethod def from_dict(cls, obj_dict): return TestSlotFillerConfig() class TestSlotFiller(SlotFiller): unit_name = "test_slot_filler" config_type = TestSlotFillerConfig def get_slots(self, text): return [] def fit(self, dataset, intent): return self def to_dict(self): return { "unit_name": self.unit_name, } @classmethod def from_dict(cls, unit_dict): conf = cls.config_type() return TestSlotFiller(conf) register_processing_unit(TestIntentClassifier) register_processing_unit(TestSlotFiller) config = ProbabilisticIntentParserConfig( intent_classifier_config=TestIntentClassifierConfig(), slot_filler_config=TestSlotFillerConfig()) parser_dict = { "unit_name": "probabilistic_intent_parser", "intent_classifier": { "unit_name": "test_intent_classifier" }, "slot_fillers": { "MakeCoffee": { "unit_name": "test_slot_filler" }, "MakeTea": { "unit_name": "test_slot_filler" } }, "config": config.to_dict(), } # When parser = ProbabilisticIntentParser.from_dict(parser_dict) # Then self.assertDictEqual(parser.config.to_dict(), config.to_dict()) self.assertIsNotNone(parser.intent_classifier) self.assertListEqual(sorted(parser.slot_fillers), ["MakeCoffee", "MakeTea"])