Rasa X can't handle '#' in slot values in stories

Hello, I’m testing Rasa X and came across an odd error. When a generated story (from interactive mode) sets a slot with a value that contains the character ‘#’, Rasa X fails to start. The error message is:

$ rasa x
Starting Rasa X in local mode... 🚀
Traceback (most recent call last):
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasa/core/training/dsl.py", line 234, in _parameters_from_json_string
    parsed_slots = json.loads(s)
  File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.6/json/decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 13 (char 12)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasa/core/training/dsl.py", line 293, in process_lines
    event_name, parameters = self._parse_event_line(line[1:])
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasa/core/training/dsl.py", line 261, in _parse_event_line
    parameters = StoryFileReader._parameters_from_json_string(slots_str, line)
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasa/core/training/dsl.py", line 249, in _parameters_from_json_string
    "object. Error: {}".format(line, e)
ValueError: Invalid to parse arguments in line ' slot{"example": "testing'. Failed to decode parametersas a json object. Make sure the eventname is followed by a proper json object. Error: Unterminated string starting at: line 1 column 13 (char 12)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasax/community/services/story_service.py", line 53, in get_story_steps
    return await reader.process_lines(lines)
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasa/core/training/dsl.py", line 313, in process_lines
    raise ValueError(msg)
ValueError: Error in line 2: Invalid to parse arguments in line ' slot{"example": "testing'. Failed to decode parametersas a json object. Make sure the eventname is followed by a proper json object. Error: Unterminated string starting at: line 1 column 13 (char 12)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasa/cli/x.py", line 322, in run_locally
    local.main(args, project_path, args.data, token=rasa_x_token)
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasax/community/local.py", line 190, in main
    project_path, data_path, session, args.port
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasax/community/local.py", line 157, in _initialize_with_local_data
    story_files, story_service, COMMUNITY_USERNAME, COMMUNITY_TEAM_NAME
  File "uvloop/loop.pyx", line 1451, in uvloop.loop.Loop.run_until_complete
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasax/community/initialise.py", line 109, in inject_stories
    story_files, team, username
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasax/community/services/story_service.py", line 193, in save_stories_from_files
    add_story_items_to_domain=False,
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasax/community/services/story_service.py", line 106, in save_stories
    steps = await self.get_story_steps(story)
  File "/home/local/user/.local/share/virtualenvs/test-rasax-9Mm1a-qJ/lib/python3.6/site-packages/rasax/community/services/story_service.py", line 57, in get_story_steps
    "'{}'\nError: {}".format(story_string, e)
rasa.core.exceptions.StoryParseError: Invalid story format. Failed to parse '##chars"}
    - slot{"example": "testing'
Error: Error in line 2: Invalid to parse arguments in line ' slot{"example": "testing'. Failed to decode parametersas a json object. Make sure the eventname is followed by a proper json object. Error: Unterminated string starting at: line 1 column 13 (char 12)

Sorry, something went wrong (see error above). Make sure to start Rasa X with valid data and valid domain and config files. Please, also check any warnings that popped up.
If you need help fixing the issue visit our forum: http://forum.rasa.com/.

I’ve just created this project with rasa init, added an example slot, and set it using interactive training. rasa train completes without problems, and the story can be triggered in rasa shell, only rasa x can’t deal with the ‘#’ character in the slot value.

The offending story:

## Generated Story 1484935921393187592
* greet
    - utter_greet
* mood_unhappy{"example": "testing#chars"}
    - slot{"example": "testing#chars"}
    - utter_cheer_up
    - utter_did_that_help
* affirm
    - utter_goodbye

Is this a bug, or completely unsupported? I’ve triggered this issue originally when trying to provide a URL in another chatbot, which included ‘#’.

I’m using rasa-x 0.19.5 with Python 3.6.8 in Ubuntu 18.04.02.

@kschoenrock This indeed seems like an error. I created an issue in our Rasa X repository. Hope we can tackle this soon. For the meantime I’m afraid you have to avoid # in your slot values (it’s somewhat dangerous using # in general, since they are used for comments in a lot of languages / formats).

Thank you for looking into this. The # itself is not strictly necessary for our training data, it was added “automatically” while analysing input from our users. The skill in this case allows the user to report a URL from our site for inspection by the support team.