async def convert_and_write(cls, source_path: Path, output_path: Path) -> None: """Converts the given training data file and saves it to the output directory. Args: source_path: Path to the training data file. output_path: Path to the output directory. """ reader = NLGMarkdownReader() writer = RasaYAMLWriter() output_nlg_path = cls.generate_path_for_converted_training_data_file( source_path, output_path ) training_data = reader.read(source_path) converted_responses = {} for response_name, examples in training_data.responses.items(): new_response_name = cls._normalize_response_name(response_name) converted_responses[new_response_name] = examples converted_training_data = TrainingData(responses=converted_responses) writer.dump(output_nlg_path, converted_training_data) print_success(f"Converted NLG file: '{source_path}' >> '{output_nlg_path}'.")
def test_markdow_nlg_read_newlines(): md = """ ## Ask something * faq/ask_something - Super answer in 2\\nlines """ reader = NLGMarkdownReader() result = reader.reads(md) assert result.responses == { "faq/ask_something": [{ "text": "Super answer in 2\nlines" }] }
def _reader_factory(fformat: Text) -> Optional["TrainingDataReader"]: """Generates the appropriate reader class based on the file format.""" from rasa.shared.nlu.training_data.formats import ( RasaYAMLReader, MarkdownReader, WitReader, LuisReader, RasaReader, DialogflowReader, NLGMarkdownReader, ) reader = None if fformat == LUIS: reader = LuisReader() elif fformat == WIT: reader = WitReader() elif fformat in DIALOGFLOW_RELEVANT: reader = DialogflowReader() elif fformat == RASA: reader = RasaReader() elif fformat == MARKDOWN: reader = MarkdownReader() elif fformat == MARKDOWN_NLG: reader = NLGMarkdownReader() elif fformat == RASA_YAML: reader = RasaYAMLReader() return reader
def guess_format(filename: Text) -> Text: """Applies heuristics to guess the data format of a file. Args: filename: file whose type should be guessed Returns: Guessed file format. """ from rasa.shared.nlu.training_data.formats import RasaYAMLReader guess = UNK if not os.path.isfile(filename): return guess try: content = rasa.shared.utils.io.read_file(filename) js = json.loads(content) except ValueError: if MarkdownReader.is_markdown_nlu_file(filename): guess = MARKDOWN elif NLGMarkdownReader.is_markdown_nlg_file(filename): guess = MARKDOWN_NLG elif RasaYAMLReader.is_yaml_nlu_file(filename): guess = RASA_YAML else: for file_format, format_heuristic in _json_format_heuristics.items(): if format_heuristic(js, filename): guess = file_format break logger.debug(f"Training data format of '{filename}' is '{guess}'.") return guess
def convert_and_write(cls, source_path: Path, output_path: Path) -> None: """Converts the given training data file and saves it to the output directory. Args: source_path: Path to the training data file. output_path: Path to the output directory. """ reader = NLGMarkdownReader() writer = RasaYAMLWriter() output_nlg_path = cls.generate_path_for_converted_training_data_file( source_path, output_path) yaml_training_data = reader.read(source_path) writer.dump(output_nlg_path, yaml_training_data) print_success( f"Converted NLG file: '{source_path}' >> '{output_nlg_path}'.")
def filter(cls, source_path: Path) -> bool: """Checks if the given training data file contains NLG data in `Markdown` format and can be converted to `YAML`. Args: source_path: Path to the training data file. Returns: `True` if the given file can be converted, `False` otherwise """ return NLGMarkdownReader.is_markdown_nlg_file(source_path)
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)
def test_skip_markdown_reading_deprecation(): with pytest.warns(None) as warnings: NLGMarkdownReader(ignore_deprecation_warning=True) assert not warnings
def test_markdown_reading_deprecation(): with pytest.warns(FutureWarning): NLGMarkdownReader()