async def read_from_file(self, filename: Union[Text, Path]) -> List[StoryStep]: """Read stories or rules from file. Args: filename: Path to the story/rule file. Returns: `StoryStep`s read from `filename`. """ self.source_name = filename try: file_content = io_utils.read_file(filename, io_utils.DEFAULT_ENCODING) validate_yaml_schema(file_content, CORE_SCHEMA_FILE) yaml_content = io_utils.read_yaml(file_content) except (ValueError, ParserError) as e: common_utils.raise_warning( f"Failed to read YAML from '{filename}', it will be skipped. Error: {e}" ) return [] except InvalidYamlFileError as e: raise ValueError from e return self.read_from_parsed_yaml(yaml_content)
def reads(self, string: Text, **kwargs: Any) -> "TrainingData": """Reads TrainingData in YAML format from a string. Args: string: String with YAML training data. **kwargs: Keyword arguments. Returns: New `TrainingData` object with parsed training data. """ from rasa.nlu.training_data import TrainingData from rasa.validator import Validator try: validate_yaml_schema(string, NLU_SCHEMA_FILE) except InvalidYamlFileError as e: raise ValueError from e yaml_content = io_utils.read_yaml(string) if not Validator.validate_training_data_format_version( yaml_content, self.filename): return TrainingData() for key, value in yaml_content.items(): # pytype: disable=attribute-error if key == KEY_NLU: self._parse_nlu(value) return TrainingData( self.training_examples, self.entity_synonyms, self.regex_features, self.lookup_tables, )
def from_yaml(cls, yaml: Text) -> "Domain": try: validate_yaml_schema(yaml, DOMAIN_SCHEMA_FILE) except InvalidYamlFileError as e: raise InvalidDomain(str(e)) data = rasa.utils.io.read_yaml(yaml) return cls.from_dict(data)
def validate(string: Text) -> None: """Check if the string adheres to the NLU yaml data schema. If the string is not in the right format, an exception will be raised.""" try: validation.validate_yaml_schema(string, NLU_SCHEMA_FILE) except validation.InvalidYamlFileError as e: raise ValueError from e
def test_nlu(args: argparse.Namespace) -> None: from rasa import data from rasa.test import compare_nlu_models, perform_nlu_cross_validation, test_nlu nlu_data = cli_utils.get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH) nlu_data = data.get_nlu_directory(nlu_data) output = args.out or DEFAULT_RESULTS_PATH io_utils.create_directory(output) if args.config is not None and len(args.config) == 1: args.config = os.path.abspath(args.config[0]) if os.path.isdir(args.config): config_dir = args.config config_files = os.listdir(config_dir) args.config = [ os.path.join(config_dir, os.path.abspath(config)) for config in config_files ] if isinstance(args.config, list): logger.info( "Multiple configuration files specified, running nlu comparison mode." ) config_files = [] for file in args.config: try: validation_utils.validate_yaml_schema( io_utils.read_file(file), CONFIG_SCHEMA_FILE, show_validation_errors=False, ) config_files.append(file) except validation_utils.InvalidYamlFileError: logger.debug( "Ignoring file '{}' as it is not a valid config file.". format(file)) continue compare_nlu_models( configs=config_files, nlu=nlu_data, output=output, runs=args.runs, exclusion_percentages=args.percentages, ) elif args.cross_validation: logger.info("Test model using cross validation.") config = cli_utils.get_validated_path(args.config, "config", DEFAULT_CONFIG_PATH) perform_nlu_cross_validation(config, nlu_data, output, vars(args)) else: model_path = cli_utils.get_validated_path(args.model, "model", DEFAULT_MODELS_PATH) test_nlu(model_path, nlu_data, output, vars(args))
def from_yaml(cls, yaml: Text, original_filename: Text = "") -> "Domain": from rasa.validator import Validator try: validate_yaml_schema(yaml, DOMAIN_SCHEMA_FILE) except InvalidYamlFileError as e: raise InvalidDomain(str(e)) data = rasa.utils.io.read_yaml(yaml) if not Validator.validate_training_data_format_version(data, original_filename): return Domain.empty() return cls.from_dict(data)
def test_validate_yaml_schema_raise_exception(file, schema): with pytest.raises(InvalidYamlFileError): validate_yaml_schema(rasa.utils.io.read_file(file), schema)
def test_validate_yaml_schema(file, schema): # should raise no exception validate_yaml_schema(rasa.utils.io.read_file(file), schema)
def test_validate_yaml_schema_raise_exception(file, schema): with pytest.raises(validation_utils.InvalidYamlFileError): validation_utils.validate_yaml_schema(io_utils.read_file(file), schema)
def test_validate_yaml_schema(file, schema): # should raise no exception validation_utils.validate_yaml_schema(io_utils.read_file(file), schema)