@@ -239,24 +239,28 @@ class TestCategoricalSlot(SlotTestCollection):
239
239
def create_slot (self , influence_conversation : bool ) -> Slot :
240
240
return CategoricalSlot (
241
241
"test" ,
242
- values = [1 , "two" , "小于" , {"three" : 3 }, None ],
242
+ values = [1 , "two" , "小于" , {"three" : 3 }, "nOnE" , " None" , "null" ],
243
243
influence_conversation = influence_conversation ,
244
244
)
245
245
246
- @pytest .fixture (params = [{"a" : "b" }, 2 , True , "asd" , "🌴" ])
246
+ # None is a special value reserved for unset slots.
247
+ @pytest .fixture (params = [{"a" : "b" }, 2 , True , "asd" , "🌴" , None ])
247
248
def invalid_value (self , request : SubRequest ) -> Any :
248
249
return request .param
249
250
250
251
@pytest .fixture (
251
252
params = [
252
- (None , [0 , 0 , 0 , 0 , 1 ]),
253
- (1 , [1 , 0 , 0 , 0 , 0 ]),
254
- ("two" , [0 , 1 , 0 , 0 , 0 ]),
255
- ("小于" , [0 , 0 , 1 , 0 , 0 ]),
256
- ({"three" : 3 }, [0 , 0 , 0 , 1 , 0 ]),
253
+ (None , [0 , 0 , 0 , 0 , 0 , 0 , 0 ]), # slot is unset
254
+ (1 , [1 , 0 , 0 , 0 , 0 , 0 , 0 ]),
255
+ ("two" , [0 , 1 , 0 , 0 , 0 , 0 , 0 ]),
256
+ ("小于" , [0 , 0 , 1 , 0 , 0 , 0 , 0 ]),
257
+ ({"three" : 3 }, [0 , 0 , 0 , 1 , 0 , 0 , 0 ]),
258
+ ("nOnE" , [0 , 0 , 0 , 0 , 1 , 0 , 0 ]),
259
+ ("None" , [0 , 0 , 0 , 0 , 1 , 0 , 0 ]), # same as for 'nOnE' (case insensivity)
260
+ ("null" , [0 , 0 , 0 , 0 , 0 , 0 , 1 ]),
257
261
(
258
262
rasa .shared .core .constants .DEFAULT_CATEGORICAL_SLOT_VALUE ,
259
- [0 , 0 , 0 , 0 , 0 ],
263
+ [0 , 0 , 0 , 0 , 0 , 0 , 0 ],
260
264
),
261
265
]
262
266
)
@@ -268,28 +272,32 @@ class TestCategoricalSlotDefaultValue(SlotTestCollection):
268
272
def create_slot (self , influence_conversation : bool ) -> Slot :
269
273
slot = CategoricalSlot (
270
274
"test" ,
271
- values = [1 , "two" , "小于" , {"three" : 3 }, None ],
275
+ values = [1 , "two" , "小于" , {"three" : 3 }, "nOnE" , " None" , "null" ],
272
276
influence_conversation = influence_conversation ,
273
277
)
274
278
slot .add_default_value ()
275
279
return slot
276
280
277
- @pytest .fixture (params = [{"a" : "b" }, 2 , True , "asd" , "🌴" ])
281
+ # None is a special value reserved for unset slots.
282
+ @pytest .fixture (params = [{"a" : "b" }, 2 , True , "asd" , "🌴" , None ])
278
283
def invalid_value (self , request : SubRequest ) -> Any :
279
284
return request .param
280
285
281
286
@pytest .fixture (
282
287
params = [
283
- (None , [0 , 0 , 0 , 0 , 1 , 0 ]),
284
- (1 , [1 , 0 , 0 , 0 , 0 , 0 ]),
285
- ("two" , [0 , 1 , 0 , 0 , 0 , 0 ]),
286
- ("小于" , [0 , 0 , 1 , 0 , 0 , 0 ]),
287
- ({"three" : 3 }, [0 , 0 , 0 , 1 , 0 , 0 ]),
288
+ (None , [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]), # slot is unset
289
+ (1 , [1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]),
290
+ ("two" , [0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ]),
291
+ ("小于" , [0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ]),
292
+ ({"three" : 3 }, [0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 ]),
293
+ ("nOnE" , [0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ]),
294
+ ("None" , [0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ]), # same as for 'nOnE' (case insensivity)
295
+ ("null" , [0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 ]),
288
296
(
289
297
rasa .shared .core .constants .DEFAULT_CATEGORICAL_SLOT_VALUE ,
290
- [0 , 0 , 0 , 0 , 0 , 1 ],
298
+ [0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ],
291
299
),
292
- ("unseen value" , [0 , 0 , 0 , 0 , 0 , 1 ]),
300
+ ("unseen value" , [0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ]),
293
301
]
294
302
)
295
303
def value_feature_pair (self , request : SubRequest ) -> Tuple [Any , List [float ]]:
@@ -323,3 +331,14 @@ def test_exception_if_featurized(self):
323
331
def test_raises_on_invalid_slot_type ():
324
332
with pytest .raises (InvalidSlotTypeException ):
325
333
Slot .resolve_by_type ("foobar" )
334
+
335
+
336
+ def test_categorical_slot_ignores_none_value ():
337
+ """Checks that None can't be added as a possible value for categorical slots."""
338
+ with pytest .warns (UserWarning ) as records :
339
+ slot = CategoricalSlot (name = "branch" , values = ["Berlin" , None , "San Francisco" ])
340
+
341
+ assert not ("none" in slot .values )
342
+
343
+ message_text = "Rasa will ignore `null` as a possible value for the 'branch' slot."
344
+ assert any (message_text in record .message .args [0 ] for record in records )
0 commit comments