Domain.yml use_entities syntax deprecated

It looks like the use_entities syntax for 1.0 no longer supports this format:

  - chitchat: null
    use_entities: false

Using that gave me a stack trace after which I spent way too much time trying to figure out why something that has been working fine for a year broke. No mention of this in the 1.0 Migration Guide and no Deprecation error message from the rasa command.

I corrected it by using the syntax:

  - chitchat: {use_entities: false}

Here’s the stack trace you get when you use the now deprecated syntax.

Traceback (most recent call last):
  File "/usr/local/bin/rasa", line 10, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/site-packages/rasa/__main__.py", line 70, in main
    cmdline_arguments.func(cmdline_arguments)
  File "/usr/local/lib/python3.6/site-packages/rasa/cli/train.py", line 121, in train_core
    kwargs=extract_additional_arguments(args),
  File "/usr/local/lib/python3.6/site-packages/rasa/train.py", line 215, in train_core
    kwargs=kwargs,
  File "uvloop/loop.pyx", line 1451, in uvloop.loop.Loop.run_until_complete
  File "/usr/local/lib/python3.6/site-packages/rasa/train.py", line 252, in train_core_async
    domain = Domain.load(domain, skill_imports)
  File "/usr/local/lib/python3.6/site-packages/rasa/core/domain.py", line 77, in load
    other = cls.from_path(path, skill_imports)
  File "/usr/local/lib/python3.6/site-packages/rasa/core/domain.py", line 91, in from_path
    domain = cls.from_file(path)
  File "/usr/local/lib/python3.6/site-packages/rasa/core/domain.py", line 104, in from_file
    return cls.from_yaml(rasa.utils.io.read_file(path))
  File "/usr/local/lib/python3.6/site-packages/rasa/core/domain.py", line 114, in from_yaml
    return cls.from_dict(data)
  File "/usr/local/lib/python3.6/site-packages/rasa/core/domain.py", line 121, in from_dict
    intent_properties = cls.collect_intent_properties(data.get("intents", {}))
  File "/usr/local/lib/python3.6/site-packages/rasa/core/domain.py", line 217, in collect_intent_properties
    if "use_entities" not in properties:
TypeError: argument of type 'NoneType' is not iterable
1 Like

We figured this out in a github issue, the correct syntax is

- chitchat:
    use_entities: false

But in the rasa-demo, this syntax is used:

intents:
  - enter_data: {use_entities: false}
  - affirm

Which one is correct?

@erohmensing. Also, in the documentation, it says another syntax:

use_entities: None

I tested both, but didn’t find it has an effect. Does this parameter control whether slots should be filled based on extracted entities? Not sure why it doesn’t have an effect.

@twittmin your first post should work,

- chitchat:
    use_entities: false

is equivalent to

intents:
  - chitchat: {use_entities: false}

That’s just the structure of yaml.

However, in 1.1.4 we’ve updated the use_entities to take lists (because now you can featurize certain entities). This is why it is None, although I believe false will also work, as we wanted to make it not a breaking change.

Your mistake here is in your understanding – this parameter does not control whether slots should be filled based on extracted entities, but rather whether picking up entities should affect the dialog flow. So e.g. if

* subscribe_me{"email": "some_emial"}

leads to a different response than

* subscribe_me

(e.g. in the second case you might want to ask their email), you are using entities. If a case where it doesn’t matter if an entity is picked up, you would use use_entities: None in order to avoid having to write stories like

* subscribe_me OR subscribe_me{"email": "some_email"} OR subscribe_me{"number": "5"} OR ...

@erohmensing That’s a good explanation. Thanks.