Files
wehub-resource-sync dc6079821b
Docs Tests / Check for file changes (push) Has been cancelled
Docs Tests / Test Documentation (push) Has been cancelled
Docs Tests / Documentation Linting Checks (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-policies) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (ubuntu-24.04, 3.10) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (ubuntu-24.04, 3.8) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (ubuntu-24.04, 3.9) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (windows-2022, 3.10) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (windows-2022, 3.8) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (windows-2022, 3.9) (push) Has been cancelled
Continuous Integration / Check for file changes (push) Has been cancelled
Continuous Integration / Wait for docs tests (push) Has been cancelled
Continuous Integration / Code Quality (push) Has been cancelled
Continuous Integration / Check for changelog (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Upload coverage reports to codeclimate (push) Has been cancelled
Continuous Integration / Run Non-Sequential Integration Tests (push) Has been cancelled
Continuous Integration / Run Broker Integration Tests (push) Has been cancelled
Continuous Integration / Run Sequential Integration Tests (push) Has been cancelled
Continuous Integration / Build Docker base images and setup environment (push) Has been cancelled
Continuous Integration / Build Docker (default) (push) Has been cancelled
Continuous Integration / Build Docker (full) (push) Has been cancelled
Continuous Integration / Build Docker (mitie-en) (push) Has been cancelled
Continuous Integration / Build Docker (spacy-de) (push) Has been cancelled
Continuous Integration / Build Docker (spacy-en) (push) Has been cancelled
Continuous Integration / Build Docker (spacy-it) (push) Has been cancelled
Continuous Integration / Deploy to PyPI (push) Has been cancelled
Continuous Integration / Notify Slack & Publish Release Notes (push) Has been cancelled
Publish Documentation / Evaluate release tag (push) Has been cancelled
Publish Documentation / Prebuild Docs (push) Has been cancelled
Publish Documentation / Preview Docs (push) Has been cancelled
Publish Documentation / Check for file changes (push) Has been cancelled
Publish Documentation / Publish Docs (push) Has been cancelled
Automatic PR Merger / mergepal (push) Has been cancelled
CI Github Actions / Run Tests (push) Has been cancelled
Semgrep / Semgrep Workflow Security Scan (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:24:47 +08:00

226 lines
6.9 KiB
Python

import json
import logging
import os
import re
from typing import Any, Dict, Optional, Text, Match, List
import scipy.sparse
from rasa.shared.nlu.constants import (
ENTITIES,
EXTRACTOR,
PRETRAINED_EXTRACTORS,
ENTITY_ATTRIBUTE_START,
ENTITY_ATTRIBUTE_END,
ENTITY_ATTRIBUTE_VALUE,
ENTITY_ATTRIBUTE_TYPE,
ENTITY_ATTRIBUTE_ROLE,
ENTITY_ATTRIBUTE_GROUP,
)
from rasa.shared.constants import UTTER_PREFIX
import rasa.shared.utils.io
import rasa.shared.data
logger = logging.getLogger(__name__)
ESCAPE_DCT = {"\b": "\\b", "\f": "\\f", "\n": "\\n", "\r": "\\r", "\t": "\\t"}
ESCAPE_CHARS = set(ESCAPE_DCT.keys())
ESCAPE = re.compile(f'[{"".join(ESCAPE_DCT.values())}]')
UNESCAPE_DCT = {espaced_char: char for char, espaced_char in ESCAPE_DCT.items()}
UNESCAPE = re.compile(f'[{"".join(UNESCAPE_DCT.values())}]')
GROUP_COMPLETE_MATCH = 0
def transform_entity_synonyms(
synonyms: List[Dict[Text, Any]], known_synonyms: Optional[Dict[Text, Any]] = None
) -> Dict[Text, Any]:
"""Transforms the entity synonyms into a text->value dictionary"""
entity_synonyms = known_synonyms if known_synonyms else {}
for s in synonyms:
if "value" in s and "synonyms" in s:
for synonym in s["synonyms"]:
entity_synonyms[synonym] = s["value"]
return entity_synonyms
def check_duplicate_synonym(
entity_synonyms: Dict[Text, Any], text: Text, syn: Text, context_str: Text = ""
) -> None:
if text in entity_synonyms and entity_synonyms[text] != syn:
rasa.shared.utils.io.raise_warning(
f"Found inconsistent entity synonyms while {context_str}, "
f"overwriting {text}->{entity_synonyms[text]} "
f"with {text}->{syn} during merge."
)
def get_file_format_extension(resource_name: Text) -> Text:
"""
Get the file extension based on training data format. It supports both a folder and
a file, and tries to guess the format as follows:
- if the resource is a file and has a known format, return this format's extension
- if the resource is a folder and all the resources have the
same known format, return it's extension
- otherwise, default to DEFAULT_FILE_FORMAT (yml).
Args:
resource_name: The name of the resource, can be a file or a folder.
Returns:
The resource file format.
"""
from rasa.shared.nlu.training_data import loading
if resource_name is None or not os.path.exists(resource_name):
raise AttributeError(f"Resource '{resource_name}' does not exist.")
files = rasa.shared.utils.io.list_files(resource_name)
file_formats = list(map(lambda f: loading.guess_format(f), files))
if not file_formats:
return rasa.shared.data.yaml_file_extension()
known_file_formats = {loading.RASA_YAML: rasa.shared.data.yaml_file_extension()}
fformat = file_formats[0]
if all(f == fformat for f in file_formats):
return known_file_formats.get(fformat, rasa.shared.data.yaml_file_extension())
return rasa.shared.data.yaml_file_extension()
def remove_untrainable_entities_from(example: Dict[Text, Any]) -> None:
"""Remove untrainable entities from serialised training example `example`.
Entities with an untrainable extractor will be removed. Untrainable extractors
are defined in `rasa.nlu.constants.PRETRAINED_EXTRACTORS`.
Args:
example: Serialised training example to inspect.
"""
example_entities = example.get(ENTITIES)
if not example_entities:
# example contains no entities, so there's nothing to do
return None
trainable_entities = []
for entity in example_entities:
if entity.get(EXTRACTOR) in PRETRAINED_EXTRACTORS:
logger.debug(
f"Excluding entity '{json.dumps(entity)}' from training data. "
f"Entity examples extracted by the following classes are not "
f"dumped to training data in markdown format: "
f"`{'`, `'.join(sorted(PRETRAINED_EXTRACTORS))}`."
)
else:
trainable_entities.append(entity)
example[ENTITIES] = trainable_entities
def intent_response_key_to_template_key(intent_response_key: Text) -> Text:
"""Resolve the response template key for a given intent response key.
Args:
intent_response_key: retrieval intent with the response key suffix attached.
Returns: The corresponding response template.
"""
return f"{UTTER_PREFIX}{intent_response_key}"
def template_key_to_intent_response_key(template_key: Text) -> Text:
"""Resolve the intent response key for the given response template.
Args:
template_key: Name of the response template.
Returns: The corresponding intent response key.
"""
return template_key.split(UTTER_PREFIX)[1]
def has_string_escape_chars(s: Text) -> bool:
"""Checks whether there are any of the escape characters in the string."""
intersection = ESCAPE_CHARS.intersection(set(s))
return len(intersection) > 0
def encode_string(s: Text) -> Text:
"""Return an encoded python string."""
def replace(match: Match) -> Text:
return ESCAPE_DCT[match.group(GROUP_COMPLETE_MATCH)]
return ESCAPE.sub(replace, s)
def decode_string(s: Text) -> Text:
"""Return a decoded python string."""
def replace(match: Match) -> Text:
return UNESCAPE_DCT[match.group(GROUP_COMPLETE_MATCH)]
return UNESCAPE.sub(replace, s)
def build_entity(
start: int,
end: int,
value: Text,
entity_type: Text,
role: Optional[Text] = None,
group: Optional[Text] = None,
**kwargs: Any,
) -> Dict[Text, Any]:
"""Builds a standard entity dictionary.
Adds additional keyword parameters.
Args:
start: start position of entity
end: end position of entity
value: text value of the entity
entity_type: name of the entity type
role: role of the entity
group: group of the entity
**kwargs: additional parameters
Returns:
an entity dictionary
"""
entity = {
ENTITY_ATTRIBUTE_START: start,
ENTITY_ATTRIBUTE_END: end,
ENTITY_ATTRIBUTE_VALUE: value,
ENTITY_ATTRIBUTE_TYPE: entity_type,
}
if role:
entity[ENTITY_ATTRIBUTE_ROLE] = role
if group:
entity[ENTITY_ATTRIBUTE_GROUP] = group
entity.update(kwargs)
return entity
def sparse_matrix_to_string(m: scipy.sparse.spmatrix) -> Text:
"""Turns a sparse matrix into a string.
Will return a line "(i,j) v" for each value in the matrix.
taken from official scipy source to operate on full sparse matrix to not have
to change the `maxprint` property in-place.
https://github.com/scipy/scipy/blob/v1.7.0/scipy/sparse/base.py#L258
"""
# make sure sparse matrix is in COOrdinate format
m_coo = m.tocoo()
triples = zip(list(zip(m_coo.row, m_coo.col)), m_coo.data)
return "\n".join([(" %s\t%s" % t) for t in triples])