def test_pass_conversation_id_to_interactive_learning( monkeypatch: MonkeyPatch): from rasa.core.train import do_interactive_learning from rasa.core.training import interactive as interactive_learning parser = argparse.ArgumentParser() sub_parser = parser.add_subparsers() interactive.add_subparser(sub_parser, []) expected_conversation_id = "🎁" args = parser.parse_args([ "interactive", "--conversation-id", expected_conversation_id, "--skip-visualization", ]) _serve_application = Mock() monkeypatch.setattr(interactive_learning, "_serve_application", _serve_application) do_interactive_learning(args, Mock()) _serve_application.assert_called_once_with(ANY, ANY, True, expected_conversation_id, 5005)
def test_no_interactive_without_core_data(default_stack_config: Text, monkeypatch: MonkeyPatch) -> None: parser = argparse.ArgumentParser() sub_parser = parser.add_subparsers() interactive.add_subparser(sub_parser, []) args = parser.parse_args([ "interactive", "--config", default_stack_config, "--data", "examples/moodbot/data/nlu.md", ]) interactive._set_not_required_args(args) mock = Mock() monkeypatch.setattr(train, "train", mock.train_model) monkeypatch.setattr(interactive, "perform_interactive_learning", mock.perform_interactive_learning) with pytest.raises(SystemExit): interactive.interactive(args) mock.train_model.assert_not_called() mock.perform_interactive_learning.assert_not_called()
def test_train_core_called_when_no_model_passed_and_core( default_stack_config: Text, monkeypatch: MonkeyPatch) -> None: parser = argparse.ArgumentParser() sub_parser = parser.add_subparsers() interactive.add_subparser(sub_parser, []) args = parser.parse_args([ "interactive", "core", "--config", default_stack_config, "--stories", "examples/moodbot/data/stories.yml", "--domain", "examples/moodbot/domain.yml", ]) interactive._set_not_required_args(args) # Mock actual training and interactive learning methods mock = Mock() monkeypatch.setattr(train, "train_core", mock.train_core) monkeypatch.setattr(interactive, "perform_interactive_learning", mock.perform_interactive_learning) interactive.interactive(args) mock.train_core.assert_called_once()
def create_argument_parser() -> argparse.ArgumentParser: """Parse all the command line arguments for the training script.""" parser = argparse.ArgumentParser( prog="rasa", formatter_class=argparse.ArgumentDefaultsHelpFormatter, description="Rasa command line interface. Rasa allows you to build " "your own conversational assistants 🤖. The 'rasa' command " "allows you to easily run most common commands like " "creating a new bot, training or evaluating models.") parser.add_argument("--version", action='store_true', default=argparse.SUPPRESS, help="Print installed Rasa version") parent_parser = argparse.ArgumentParser(add_help=False) add_logging_option_arguments(parent_parser) parent_parsers = [parent_parser] subparsers = parser.add_subparsers(help='Rasa commands') scaffold.add_subparser(subparsers, parents=parent_parsers) run.add_subparser(subparsers, parents=parent_parsers) shell.add_subparser(subparsers, parents=parent_parsers) train.add_subparser(subparsers, parents=parent_parsers) interactive.add_subparser(subparsers, parents=parent_parsers) test.add_subparser(subparsers, parents=parent_parsers) show.add_subparser(subparsers, parents=parent_parsers) data.add_subparser(subparsers, parents=parent_parsers) up.add_subparser(subparsers, parents=parent_parsers) return parser
def test_generate_conversation_id_for_interactive_learning(monkeypatch: MonkeyPatch): parser = argparse.ArgumentParser() sub_parser = parser.add_subparsers() interactive.add_subparser(sub_parser, []) args = parser.parse_args(["interactive"]) assert args.conversation_id
def test_pass_arguments_to_rasa_train(default_stack_config: Text, monkeypatch: MonkeyPatch) -> None: # Create parser parser = argparse.ArgumentParser() sub_parser = parser.add_subparsers() interactive.add_subparser(sub_parser, []) # Parse interactive command args = parser.parse_args(["interactive", "--config", default_stack_config]) interactive._set_not_required_args(args) # Mock actual training mock = Mock(return_value=TrainingResult(code=0)) monkeypatch.setattr(rasa, "train", mock.method) # If the `Namespace` object does not have all required fields this will throw train.train(args) # Assert `train` was actually called mock.method.assert_called_once()
def test_no_interactive_without_core_data(stack_config_path: Text, monkeypatch: MonkeyPatch, nlu_data_path: Text) -> None: parser = argparse.ArgumentParser() sub_parser = parser.add_subparsers() interactive.add_subparser(sub_parser, []) args = parser.parse_args([ "interactive", "--config", stack_config_path, "--data", nlu_data_path ]) interactive._set_not_required_args(args) mock = Mock() monkeypatch.setattr(train, "run_training", mock.train_model) monkeypatch.setattr(interactive, "perform_interactive_learning", mock.perform_interactive_learning) with pytest.raises(SystemExit): interactive.interactive(args) mock.train_model.assert_not_called() mock.perform_interactive_learning.assert_not_called()
def test_train_called_when_no_model_passed(stack_config_path: Text, monkeypatch: MonkeyPatch) -> None: parser = argparse.ArgumentParser() sub_parser = parser.add_subparsers() interactive.add_subparser(sub_parser, []) args = parser.parse_args([ "interactive", "--config", stack_config_path, "--data", "examples/moodbot/data", ]) interactive._set_not_required_args(args) # Mock actual training and interactive learning methods mock = Mock() monkeypatch.setattr(train, "run_training", mock.train_model) monkeypatch.setattr(interactive, "perform_interactive_learning", mock.perform_interactive_learning) interactive.interactive(args) mock.train_model.assert_called_once()
def create_argument_parser() -> argparse.ArgumentParser: """Parse all the command line arguments for the training script.""" parser = argparse.ArgumentParser( prog="rasa", formatter_class=argparse.ArgumentDefaultsHelpFormatter, description="Rasa command line interface. Rasa allows you to build " "your own conversational assistants 🤖. The 'rasa' command " "allows you to easily run most common commands like " "creating a new bot, training or evaluating models.", ) parser.add_argument( "--version", action="store_true", default=argparse.SUPPRESS, help="Print installed Rasa version", ) parent_parser = argparse.ArgumentParser(add_help=False) # 一级命令解析器 add_logging_options(parent_parser) parent_parsers = [parent_parser] subparsers = parser.add_subparsers(help="Rasa commands") # 二级命令解析器 scaffold.add_subparser(subparsers, parents=parent_parsers) # 解析rasa init run.add_subparser(subparsers, parents=parent_parsers) # 解析rasa run shell.add_subparser(subparsers, parents=parent_parsers) # 解析rasa shell train.add_subparser(subparsers, parents=parent_parsers) # 解析 rasa train interactive.add_subparser(subparsers, parents=parent_parsers) # 解析rasa interactive test.add_subparser(subparsers, parents=parent_parsers) # 解析rasa test visualize.add_subparser(subparsers, parents=parent_parsers) # 解析rasa visualize data.add_subparser(subparsers, parents=parent_parsers) # 解析rasa data x.add_subparser(subparsers, parents=parent_parsers) # 解析rasa x return parser