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

204 lines
6.8 KiB
Python

from __future__ import annotations
import abc
import logging
import typing
from contextlib import contextmanager
from dataclasses import dataclass
from datetime import datetime
from pathlib import Path
from typing import List, Tuple, Union, Text, Generator, Dict, Any, Optional
from packaging import version
from rasa.constants import MINIMUM_COMPATIBLE_VERSION
from rasa.exceptions import UnsupportedModelVersionError
from rasa.engine.storage.resource import Resource
from rasa.shared.core.domain import Domain
from rasa.shared.data import TrainingType
if typing.TYPE_CHECKING:
from rasa.engine.graph import GraphSchema, GraphModelConfiguration
logger = logging.getLogger(__name__)
class ModelStorage(abc.ABC):
"""Serves as storage backend for `GraphComponents` which need persistence."""
@classmethod
@abc.abstractmethod
def create(cls, storage_path: Path) -> ModelStorage:
"""Creates the storage.
Args:
storage_path: Directory which will contain the persisted graph components.
"""
...
@classmethod
@abc.abstractmethod
def from_model_archive(
cls, storage_path: Path, model_archive_path: Union[Text, Path]
) -> Tuple[ModelStorage, ModelMetadata]:
"""Unpacks a model archive and initializes a `ModelStorage`.
Args:
storage_path: Directory which will contain the persisted graph components.
model_archive_path: The path to the model archive.
Returns:
Initialized model storage, and metadata about the model.
Raises:
`UnsupportedModelError` if the loaded meta data indicates that the model
has been created with an outdated Rasa version.
"""
...
@classmethod
@abc.abstractmethod
def metadata_from_archive(
cls, model_archive_path: Union[Text, Path]
) -> ModelMetadata:
"""Retrieves metadata from archive.
Args:
model_archive_path: The path to the model archive.
Returns:
Metadata about the model.
Raises:
`UnsupportedModelError` if the loaded meta data indicates that the model
has been created with an outdated Rasa version.
"""
...
@contextmanager
@abc.abstractmethod
def write_to(self, resource: Resource) -> Generator[Path, None, None]:
"""Persists data for a given resource.
This `Resource` can then be accessed in dependent graph nodes via
`model_storage.read_from`.
Args:
resource: The resource which should be persisted.
Returns:
A directory which can be used to persist data for the given `Resource`.
"""
...
@contextmanager
@abc.abstractmethod
def read_from(self, resource: Resource) -> Generator[Path, None, None]:
"""Provides the data of a persisted `Resource`.
Args:
resource: The `Resource` whose persisted should be accessed.
Returns:
A directory containing the data of the persisted `Resource`.
Raises:
ValueError: In case no persisted data for the given `Resource` exists.
"""
...
@abc.abstractmethod
def create_model_package(
self,
model_archive_path: Union[Text, Path],
model_configuration: GraphModelConfiguration,
domain: Domain,
) -> ModelMetadata:
"""Creates a model archive containing all data to load and run the model.
Args:
model_archive_path: The path to the archive which should be created.
model_configuration: The model configuration (schemas, language, etc.)
domain: The `Domain` which was used to train the model.
Returns:
The model metadata.
"""
...
@dataclass()
class ModelMetadata:
"""Describes a trained model."""
trained_at: datetime
rasa_open_source_version: Text
model_id: Text
assistant_id: Optional[Text]
domain: Domain
train_schema: GraphSchema
predict_schema: GraphSchema
project_fingerprint: Text
core_target: Optional[Text]
nlu_target: Text
language: Optional[Text]
spaces: Optional[List[Dict[Text, Any]]] = None
training_type: TrainingType = TrainingType.BOTH
def __post_init__(self) -> None:
"""Raises an exception when the metadata indicates an unsupported version.
Raises:
`UnsupportedModelException` if the `rasa_open_source_version` is lower
than the minimum compatible version
"""
minimum_version = version.parse(MINIMUM_COMPATIBLE_VERSION)
model_version = version.parse(self.rasa_open_source_version)
if model_version < minimum_version:
raise UnsupportedModelVersionError(model_version=model_version)
def as_dict(self) -> Dict[Text, Any]:
"""Returns serializable version of the `ModelMetadata`."""
return {
"domain": self.domain.as_dict(),
"trained_at": self.trained_at.isoformat(),
"model_id": self.model_id,
"assistant_id": self.assistant_id,
"rasa_open_source_version": self.rasa_open_source_version,
"train_schema": self.train_schema.as_dict(),
"predict_schema": self.predict_schema.as_dict(),
"training_type": self.training_type.value,
"project_fingerprint": self.project_fingerprint,
"core_target": self.core_target,
"nlu_target": self.nlu_target,
"language": self.language,
"spaces": self.spaces,
}
@classmethod
def from_dict(cls, serialized: Dict[Text, Any]) -> ModelMetadata:
"""Loads `ModelMetadata` which has been serialized using `metadata.as_dict()`.
Args:
serialized: Serialized `ModelMetadata` (e.g. read from disk).
Returns:
Instantiated `ModelMetadata`.
"""
from rasa.engine.graph import GraphSchema
return ModelMetadata(
trained_at=datetime.fromisoformat(serialized["trained_at"]),
rasa_open_source_version=serialized["rasa_open_source_version"],
model_id=serialized["model_id"],
assistant_id=serialized.get("assistant_id"),
domain=Domain.from_dict(serialized["domain"]),
train_schema=GraphSchema.from_dict(serialized["train_schema"]),
predict_schema=GraphSchema.from_dict(serialized["predict_schema"]),
training_type=TrainingType(serialized["training_type"]),
project_fingerprint=serialized["project_fingerprint"],
core_target=serialized["core_target"],
nlu_target=serialized["nlu_target"],
language=serialized["language"],
# optional, since introduced later
spaces=serialized.get("spaces"),
)