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)
Beispiel #2
0
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()
Beispiel #4
0
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
Beispiel #5
0
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()
Beispiel #7
0
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()
Beispiel #8
0
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()
Beispiel #9
0
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