async def test_events_schema( monkeypatch: MonkeyPatch, default_agent: Agent, config_path: Text ): # this allows us to patch the printing part used in debug mode to collect the # reported events monkeypatch.setenv("RASA_TELEMETRY_DEBUG", "true") monkeypatch.setenv("RASA_TELEMETRY_ENABLED", "true") mock = Mock() monkeypatch.setattr(telemetry, "print_telemetry_event", mock) with open(TELEMETRY_EVENTS_JSON) as f: schemas = json.load(f)["events"] initial = asyncio.all_tasks() # Generate all known backend telemetry events, and then use events.json to # validate their schema. training_data = TrainingDataImporter.load_from_config(config_path) with telemetry.track_model_training(training_data, "rasa"): await asyncio.sleep(1) telemetry.track_telemetry_disabled() telemetry.track_data_split(0.5, "nlu") telemetry.track_validate_files(True) telemetry.track_data_convert("yaml", "nlu") telemetry.track_tracker_export(5, TrackerStore(domain=None), EventBroker()) telemetry.track_interactive_learning_start(True, False) telemetry.track_server_start([CmdlineInput()], None, None, 42, True) telemetry.track_project_init("tests/") telemetry.track_shell_started("nlu") telemetry.track_rasa_x_local() telemetry.track_visualization() telemetry.track_core_model_test(5, True, default_agent) telemetry.track_nlu_model_test(TrainingData()) pending = asyncio.all_tasks() - initial await asyncio.gather(*pending) assert mock.call_count == 15 for args, _ in mock.call_args_list: event = args[0] # `metrics_id` automatically gets added to all event but is # not part of the schema so we need to remove it before validation del event["properties"]["metrics_id"] jsonschema.validate( instance=event["properties"], schema=schemas[event["event"]] )
def _convert_nlu_data(args: argparse.Namespace) -> None: import rasa.nlu.convert if args.format in ["json", "yaml"]: rasa.nlu.convert.convert_training_data(args.data, args.out, args.format, args.language) telemetry.track_data_convert(args.format, "nlu") else: rasa.shared.utils.cli.print_error_and_exit( "Could not recognize output format. Supported output formats: 'json' " "and 'yaml'. Specify the desired output format with '--format'.")
def _convert_nlg_data(args: argparse.Namespace) -> None: from rasa.nlu.training_data.converters.nlg_markdown_to_yaml_converter import ( NLGMarkdownToYamlConverter, ) if args.format == "yaml": rasa.utils.common.run_in_loop( _convert_to_yaml(args, NLGMarkdownToYamlConverter())) telemetry.track_data_convert(args.format, "nlg") else: rasa.shared.utils.cli.print_error_and_exit( "Could not recognize output format. Supported output formats: " "'yaml'. Specify the desired output format with '--format'.")
def _migrate_responses(args: argparse.Namespace) -> None: """Migrate retrieval intent responses to the new 2.0 format. It does so modifying the stories and domain files. """ if args.format == "yaml": rasa.utils.common.run_in_loop( _convert_to_yaml(args.out, args.domain, DomainResponsePrefixConverter())) rasa.utils.common.run_in_loop( _convert_to_yaml(args.out, args.data, StoryResponsePrefixConverter())) telemetry.track_data_convert(args.format, "responses") else: rasa.shared.utils.cli.print_error_and_exit( "Could not recognize output format. Supported output formats: " "'yaml'. Specify the desired output format with '--format'.")
def _convert_nlu_data(args: argparse.Namespace) -> None: from rasa.nlu.training_data.converters.nlu_markdown_to_yaml_converter import ( NLUMarkdownToYamlConverter, ) if args.format in ["json", "md"]: rasa.nlu.convert.convert_training_data(args.data, args.out, args.format, args.language) telemetry.track_data_convert(args.format, "nlu") elif args.format == "yaml": rasa.utils.common.run_in_loop( _convert_to_yaml(args.out, args.data, NLUMarkdownToYamlConverter())) telemetry.track_data_convert(args.format, "nlu") else: rasa.shared.utils.cli.print_error_and_exit( "Could not recognize output format. Supported output formats: 'json', " "'md', 'yaml'. Specify the desired output format with '--format'.")
def _migrate_model_config(args: argparse.Namespace) -> None: """Migrates old "rule-like" policies to the new `RulePolicy`. Updates the config, domain, and generates the required rules. Args: args: The commandline args with the required paths. """ import rasa.core.config configuration_file = Path(args.config) model_configuration = _get_configuration(configuration_file) domain_file = Path(args.domain) domain = _get_domain(domain_file) rule_output_file = _get_rules_path(args.out) ( model_configuration, domain, new_rules, ) = rasa.core.config.migrate_mapping_policy_to_rules( model_configuration, domain) model_configuration, fallback_rule = rasa.core.config.migrate_fallback_policies( model_configuration) if new_rules: _backup(domain_file) domain.persist_clean(domain_file) if fallback_rule: new_rules.append(fallback_rule) if new_rules or model_configuration["policies"]: _backup(configuration_file) rasa.shared.utils.io.write_yaml(model_configuration, configuration_file) _dump_rules(rule_output_file, new_rules) telemetry.track_data_convert("yaml", "config") _print_success_message(new_rules, rule_output_file)