def test_invalid_slot_mapping(): form_name = "my_form" form = FormAction(form_name, None) slot_name = "test" tracker = DialogueStateTracker.from_events( "sender", [SlotSet(REQUESTED_SLOT, slot_name)] ) domain = Domain.from_dict( {"forms": [{form_name: {slot_name: [{"type": "invalid"}]}}]} ) with pytest.raises(ValueError): form.extract_requested_slot(tracker, domain)
def test_extract_requested_slot_mapping_does_not_apply(slot_mapping: Dict): form_name = "some_form" entity_name = "some_slot" form = FormAction(form_name, None) domain = Domain.from_dict( {"forms": { form_name: { entity_name: [slot_mapping] } }}) tracker = DialogueStateTracker.from_events( "default", [ SlotSet(REQUESTED_SLOT, "some_slot"), UserUttered( "bla", intent={ "name": "greet", "confidence": 1.0 }, entities=[{ "entity": entity_name, "value": "some_value" }], ), ActionExecuted(ACTION_LISTEN_NAME), ], ) slot_values = form.extract_requested_slot(tracker, domain) # check that the value was not extracted for incorrect intent assert slot_values == {}
def test_extract_requested_slot_from_entity( mapping_not_intent: Optional[Text], mapping_intent: Optional[Text], mapping_role: Optional[Text], mapping_group: Optional[Text], entities: List[Dict[Text, Any]], intent: Text, expected_slot_values: Dict[Text, Text], ): """Test extraction of a slot value from entity with the different restrictions.""" form_name = "some form" form = FormAction(form_name, None) mapping = form.from_entity( entity="some_entity", role=mapping_role, group=mapping_group, intent=mapping_intent, not_intent=mapping_not_intent, ) domain = Domain.from_dict({"forms": {form_name: {"some_slot": [mapping]}}}) tracker = DialogueStateTracker.from_events( "default", [ SlotSet(REQUESTED_SLOT, "some_slot"), UserUttered( "bla", intent={"name": intent, "confidence": 1.0}, entities=entities ), ], ) slot_values = form.extract_requested_slot(tracker, domain) assert slot_values == expected_slot_values
def test_extract_requested_slot_default(): """Test default extraction of a slot value from entity with the same name.""" form = FormAction("some form", None) tracker = DialogueStateTracker.from_events( "default", [ SlotSet(REQUESTED_SLOT, "some_slot"), UserUttered( "bla", entities=[{"entity": "some_slot", "value": "some_value"}] ), ActionExecuted(ACTION_LISTEN_NAME), ], ) slot_values = form.extract_requested_slot(tracker, Domain.empty()) assert slot_values == {"some_slot": "some_value"}