Esempio n. 1
0
def test_synonyms_are_parsed():
    parser = RasaYAMLReader()
    training_data = parser.reads(SYNONYM_EXAMPLE)

    assert len(training_data.entity_synonyms) == 2
    assert training_data.entity_synonyms["pink pig"] == "savings"
    assert training_data.entity_synonyms["savings account"] == "savings"
Esempio n. 2
0
def test_minimal_valid_example():
    parser = RasaYAMLReader()

    with pytest.warns(None) as record:
        parser.reads(MINIMAL_VALID_EXAMPLE)

    assert not len(record)
Esempio n. 3
0
def test_lookup_is_parsed():

    parser = RasaYAMLReader()
    training_data = parser.reads(LOOKUP_EXAMPLE)

    assert training_data.lookup_tables[0]["name"] == LOOKUP_ITEM_NAME
    assert len(training_data.lookup_tables[0]["elements"]) == 3
Esempio n. 4
0
def test_read_mixed_training_data_file():
    training_data_file = "data/test_mixed_yaml_training_data/training_data.yml"

    reader = RasaYAMLReader()

    with pytest.warns(None) as record:
        reader.read(training_data_file)
        assert not len(record)
Esempio n. 5
0
def test_regex_is_parsed():

    parser = RasaYAMLReader()
    training_data = parser.reads(REGEX_EXAMPLE)

    assert len(training_data.regex_features) == 2
    assert {"name": REGEX_NAME, "pattern": PATTERN_1} in training_data.regex_features
    assert {"name": REGEX_NAME, "pattern": PATTERN_2} in training_data.regex_features
Esempio n. 6
0
def test_wrong_format_raises():

    wrong_yaml_nlu_content = """
    !!
    """

    parser = RasaYAMLReader()
    with pytest.raises(YamlSyntaxException):
        parser.reads(wrong_yaml_nlu_content)
Esempio n. 7
0
def test_nlg_fails_to_read_empty():
    responses_yml = textwrap.dedent("""
      responses:
    """)

    reader = RasaYAMLReader()

    with pytest.raises(ValueError):
        reader.reads(responses_yml)
Esempio n. 8
0
def test_wrong_format_raises():

    wrong_yaml_nlu_content = """
    !!
    """

    parser = RasaYAMLReader()
    with pytest.raises(ValueError):
        parser.reads(wrong_yaml_nlu_content)
Esempio n. 9
0
def test_write_metadata_stripped():
    reader = RasaYAMLReader()
    result = reader.reads(INTENT_EXAMPLES_WITH_METADATA)

    # Add strippable characters to first example text
    result.training_examples[0].data["text"] += "    \r\n "

    dumped = RasaYAMLWriter().dumps(result)
    assert dumped == INTENT_EXAMPLES_WITH_METADATA
Esempio n. 10
0
def test_nlg_fails_on_empty_response():
    responses_yml = textwrap.dedent("""
      responses:
        utter_chitchat/ask_weather:
    """)

    reader = RasaYAMLReader()

    with pytest.raises(ValueError):
        reader.reads(responses_yml)
Esempio n. 11
0
def test_multiline_intent_example_is_skipped_when_no_leading_symbol():
    parser = RasaYAMLReader()

    with pytest.warns(None) as record:
        training_data = parser.reads(MULTILINE_INTENT_EXAMPLES_NO_LEADING_SYMBOL)

    # warning for the missing leading symbol
    assert len(record) == 1

    assert len(training_data.training_examples) == 1
    assert not len(training_data.entity_synonyms)
Esempio n. 12
0
def test_multiline_intent_is_parsed(example: Text):
    parser = RasaYAMLReader()

    with pytest.warns(None) as record:
        training_data = parser.reads(example)

    assert not len(record)

    assert len(training_data.training_examples) == 7
    assert training_data.training_examples[0].get(
        INTENT) == training_data.training_examples[1].get(INTENT)
    assert not len(training_data.entity_synonyms)
Esempio n. 13
0
def test_check_correct_entity_annotations(
        text: Text, warnings: int, whitespace_tokenizer: WhitespaceTokenizer):
    reader = RasaYAMLReader()

    training_data = reader.reads(text)
    whitespace_tokenizer.process_training_data(training_data)

    with pytest.warns(UserWarning) as record:
        EntityExtractorMixin.check_correct_entity_annotations(training_data)

    assert len(record) == warnings
    assert all([excerpt in record[0].message.args[0]]
               for excerpt in ["Misaligned entity annotation in sentence"])
Esempio n. 14
0
def test_nlg_reads_text():
    responses_yml = textwrap.dedent("""
      responses:
        utter_chitchat/ask_weather:
        - text: Where do you want to check the weather?
    """)

    reader = RasaYAMLReader()
    result = reader.reads(responses_yml)

    assert result.responses == {
        "utter_chitchat/ask_weather": [{
            "text":
            "Where do you want to check the weather?"
        }]
    }
Esempio n. 15
0
def test_responses_are_converted_from_markdown():
    responses_md = textwrap.dedent("""
      ## ask name
      * chitchat/ask_name
        - my name is Sara, Rasa's documentation bot!
    """)

    result = NLGMarkdownReader().reads(responses_md)
    dumped = RasaYAMLWriter().dumps(result)

    validation_reader = RasaYAMLReader()
    dumped_result = validation_reader.reads(dumped)

    assert dumped_result.responses == result.responses

    # dumping again should also not change the format
    assert dumped == RasaYAMLWriter().dumps(dumped_result)
Esempio n. 16
0
def test_intent_with_metadata_is_parsed():
    parser = RasaYAMLReader()

    with pytest.warns(None) as record:
        training_data = parser.reads(INTENT_EXAMPLES_WITH_METADATA)

    assert not len(record)

    assert len(training_data.training_examples) == 2
    example_1, example_2 = training_data.training_examples
    assert example_1.get(METADATA) == {
        METADATA_INTENT: ["johnny"],
        METADATA_EXAMPLE: {
            "sentiment": "positive"
        },
    }
    assert example_2.get(METADATA) == {METADATA_INTENT: ["johnny"]}
Esempio n. 17
0
def test_entity_is_extracted(example: Text, expected_num_entities: int):
    reader = RasaYAMLReader()

    intent_name = "test-intent"

    yaml_string = f"""
nlu:
- intent: {intent_name}
  examples: |
    - {example}
"""

    result = reader.reads(yaml_string)

    assert len(result.training_examples) == 1
    actual_example = result.training_examples[0]
    assert actual_example.data["intent"] == intent_name
    assert len(actual_example.data.get("entities", [])) == expected_num_entities
Esempio n. 18
0
def test_nlg_reads_any_multimedia():
    responses_yml = textwrap.dedent("""
      responses:
        utter_chitchat/ask_weather:
        - text: Where do you want to check the weather?
          image: https://example.com/weather.jpg
    """)

    reader = RasaYAMLReader()
    result = reader.reads(responses_yml)

    assert result.responses == {
        "utter_chitchat/ask_weather": [{
            "text":
            "Where do you want to check the weather?",
            "image":
            "https://example.com/weather.jpg",
        }]
    }
Esempio n. 19
0
def test_training_data_as_yaml_dict():
    from collections import OrderedDict

    parser = RasaYAMLReader()
    writer = RasaYAMLWriter()

    training_data = parser.reads("""
nlu:
- intent: some_intent
  examples: |
    - an example
responses:
  utter_something:
    - text: hello world
    """)
    structure = writer.training_data_to_dict(training_data)

    assert isinstance(structure, OrderedDict)
    assert "nlu" in structure
    assert "responses" in structure
Esempio n. 20
0
def test_responses_text_multiline_is_preserved():
    responses_yml = textwrap.dedent("""
      responses:
        utter_confirm:
        - text: |-
            First line
            Second line
            Third line
        - text: One more response
        utter_cancel:
        - text: First line
        - text: Second line
    """)

    reader = RasaYAMLReader()
    result = reader.reads(responses_yml)

    dumped = RasaYAMLWriter().dumps(result)

    validation_reader = RasaYAMLReader()
    dumped_result = validation_reader.reads(dumped)

    assert dumped_result.responses == result.responses

    # dumping again should also not change the format
    assert dumped == RasaYAMLWriter().dumps(dumped_result)
Esempio n. 21
0
def test_nlg_multimedia_load_dump_roundtrip():
    responses_yml = textwrap.dedent(
        """
      responses:
        utter_chitchat/ask_weather:
        - text: Where do you want to check the weather?
          image: https://example.com/weather.jpg

        utter_chitchat/ask_name:
        - text: My name is Sara.
    """
    )

    reader = RasaYAMLReader()
    result = reader.reads(responses_yml)

    dumped = RasaYAMLWriter().dumps(result)

    validation_reader = RasaYAMLReader()
    dumped_result = validation_reader.reads(dumped)

    assert dumped_result.responses == result.responses

    # dumping again should also not change the format
    assert dumped == RasaYAMLWriter().dumps(dumped_result)
Esempio n. 22
0
def test_intent_examples_multiline_consistency(tmp_path: pathlib.Path):
    """Test that multiline examples are written back as multiline examples."""

    training_data_file = (pathlib.Path("data") /
                          "test_multiline_intent_examples_yaml" / "nlu.yml")
    training_data_from_disc = RasaYAMLReader().read(
        filename=training_data_file)

    tmp_file = tmp_path / "nlu.yml"
    RasaYAMLWriter().dump(tmp_file, training_data_from_disc)
    rewritten_file_content = tmp_file.read_text(encoding="utf-8")
    original_file_content = training_data_file.read_text(encoding="utf-8")

    assert original_file_content == rewritten_file_content
Esempio n. 23
0
def test_metadata_roundtrip():
    reader = RasaYAMLReader()
    result = reader.reads(INTENT_EXAMPLES_WITH_METADATA)

    dumped = RasaYAMLWriter().dumps(result)
    assert dumped == INTENT_EXAMPLES_WITH_METADATA

    validation_reader = RasaYAMLReader()
    dumped_result = validation_reader.reads(dumped)

    assert dumped_result.training_examples == result.training_examples
Esempio n. 24
0
def test_wrong_schema_raises(example: Text):

    parser = RasaYAMLReader()
    with pytest.raises(ValueError):
        parser.reads(example)
Esempio n. 25
0
def test_wrong_schema_raises(example: Text):

    parser = RasaYAMLReader()
    with pytest.raises(YamlException):
        parser.reads(example)
Esempio n. 26
0
def test_yaml_examples_are_written(example: Text):
    parser = RasaYAMLReader()
    writer = RasaYAMLWriter()

    training_data = parser.reads(example)
    assert example.strip() == writer.dumps(training_data).strip()
Esempio n. 27
0
def test_synonyms_are_extracted_from_entities():
    parser = RasaYAMLReader()
    training_data = parser.reads(MULTILINE_INTENT_EXAMPLE_WITH_SYNONYM)

    assert len(training_data.entity_synonyms) == 1
Esempio n. 28
0
def test_minimal_yaml_nlu_file(tmp_path: pathlib.Path):
    target_file = tmp_path / "test_nlu_file.yaml"
    rasa.shared.utils.io.write_text_file(MINIMAL_VALID_EXAMPLE, target_file)
    assert RasaYAMLReader.is_yaml_nlu_file(target_file)