Repository: skit-ai/dialogy (language: python)

Issue:
Refactor deserializer for entities
The [deserializer](https://github.com/skit-ai/dialogy/blob/bc4fad666b13f43dd1b614803acfef44368c6a8a/dialogy/types/entity/deserialize/__init__.py#L14) for entities is clunky. Each entity addition requires an entry. We should use a register pattern.

The [tests](https://github.com/skit-ai/dialogy/tree/master/tests/plugin/text/test_list_search_plugin) for list_search_plugin run slowly. Also the names list entity and list search are very confusing.

Workflow's `debug=False` should disable debug logs for all plugins.


Discussion / hints:

Fix patch:
diff --git a/.coveragerc b/.coveragerc
index e69de29b..159dbb87 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -0,0 +1,3 @@
+[run]
+omit =
+        */project.py
diff --git a/Makefile b/Makefile
index eb4c397b..a325d539 100644
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,7 @@ typecheck:
 	@mypy -p dialogy
 
 test: ## Run the tests.conf
-	@pytest --cov=dialogy --cov-report html --cov-report term:skip-covered tests/
+	@pytest --cov=dialogy --cov-report html --durations=5 --cov-report term:skip-covered tests/
 
 docs:
 	@echo -e "🦆🦕🐬🐶"
diff --git a/dialogy/constants/__init__.py b/dialogy/constants/__init__.py
index e9155b46..6e1b3f84 100644
--- a/dialogy/constants/__init__.py
+++ b/dialogy/constants/__init__.py
@@ -19,16 +19,17 @@
 SLOTS = "slots"
 
 DUCKLING_ENTITY_KEYS = ("body", "dim", "end", "latent", "start", "value")
-DUCKLING_TIME_VALUES_ENTITY_KEYS = ("grain", "type", "value", "values")
+DUCKLING_TIME_VALUES_ENTITY_KEYS = "grain type value values"
 DUCKLING_TIME_INTERVAL_ENTITY_KEYS = (
-    ("from", "type", "values"),
-    ("to", "type", "values"),
-    ("from", "to", "type", "values"),
+    "from type values",
+    "to type values",
+    "from to type values",
 )
 
 # Time Entity types
 DATE = "date"
 TIME = "time"
+TIME_INTERVAL = "time_interval"
 DATETIME = "datetime"
 MINUTE = "minute"
 HOUR = "hour"
diff --git a/dialogy/plugins/text/classification/mlp.py b/dialogy/plugins/text/classification/mlp.py
index e6f93cd2..e34503b5 100644
--- a/dialogy/plugins/text/classification/mlp.py
+++ b/dialogy/plugins/text/classification/mlp.py
@@ -6,6 +6,7 @@
 import ast
 import operator
 import os
+from pprint import pformat
 from typing import Any, Dict, List, Optional
 
 import joblib
@@ -14,6 +15,7 @@
 from sklearn.feature_extraction.text import TfidfVectorizer
 from sklearn.metrics import f1_score, make_scorer
 from sklearn.model_selection import GridSearchCV
+from sklearn.model_selection._search import BaseSearchCV
 from sklearn.neural_network import MLPClassifier
 from sklearn.pipeline import Pipeline
 from tqdm import tqdm
@@ -75,13 +77,13 @@ def __init__(
         try:
             if os.path.exists(self.mlp_model_path):
                 self.init_model()
-        except EOFError:
-            logger.error(
+        except EOFError:  # pragma: no cover
+            logger.error(  # pragma: no cover
                 f"Plugin {self.__class__.__name__} Failed to load MLPClassifier Model from {self.mlp_model_path}. "
                 "Ignore this message if you are training but if you are using this in production or testing, then this is serious!"
             )
 
-    def init_model(self) -> Dict[str, Any]:
+    def init_model(self, param_search: BaseSearchCV = GridSearchCV) -> Dict[str, Any]:
         """
         Initialize the model if artifacts are available.
         """
@@ -94,7 +96,7 @@ def init_model(self) -> Dict[str, Any]:
             else {}
         )
 
-        self.model_pipeline = Pipeline(
+        pipeline = Pipeline(
             [
                 (
                     const.TFIDF,
@@ -121,9 +123,11 @@ def init_model(self) -> Dict[str, Any]:
         )
         USE = "use"
         if args and args[const.USE_GRIDSEARCH][USE]:
-            GRID = self.get_gridsearch_grid(**args[const.USE_GRIDSEARCH][const.PARAMS])
-            self.model_pipeline = GridSearchCV(
-                estimator=self.model_pipeline,
+            GRID = self.get_gridsearch_grid(
+                pipeline, **args[const.USE_GRIDSEARCH][const.PARAMS]
+            )
+            self.model_pipeline = param_search(
+                estimator=pipeline,
                 param_grid=GRID,
                 cv=args[const.USE_GRIDSEARCH][const.CV],
                 n_jobs=const.GRIDSEARCH_WORKERS,
@@ -131,10 +135,14 @@ def init_model(self) -> Dict[str, Any]:
                 scoring=make_scorer(f1_score, average=const.GRID_SCORETYPE),
                 return_train_score=True,
             )
+        else:
+            self.model_pipeline = pipeline
 
         return args
 
-    def get_gridsearch_grid(self, **kwargs: Any) -> List[Dict[str, List[Any]]]:
+    def get_gridsearch_grid(
+        self, pipeline: Pipeline, **kwargs: Any
+    ) -> List[Dict[str, List[Any]]]:
         """
         Gets gridsearch hyperparameters for the model in proper grid params format.
 
@@ -142,11 +150,10 @@ def get_gridsearch_grid(self, **kwargs: Any) -> List[Dict[str, List[Any]]]:
             ValueError: If a gridsearch parameter doesn't exist in sklearns TFIDF and MLPClassifier modules.
         """
         grid_params: Dict[str, List[Any]] = {}
+        tfidf_params = pipeline[const.TFIDF].get_params().keys()
+        mlp_params = pipeline[const.MLP].get_params().keys()
         for k, v in kwargs.items():
-            if (
-                k not in self.model_pipeline[const.TFIDF].get_params().keys()
-                and k not in self.model_pipeline[const.MLP].get_params().keys()
-            ):
+            if k not in tfidf_params and k not in mlp_params:
                 raise ValueError(
                     f"Hyperparam defined for gridsearch {k} doesn't exist,\nRefer: https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html\nand https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html"
                 )
@@ -245,7 +252,9 @@ def validate(self, training_data: pd.DataFrame) -> bool:
                 return False
         return True
 
-    def train(self, training_data: pd.DataFrame) -> None:
+    def train(
+        self, training_data: pd.DataFrame, param_search: BaseSearchCV = GridSearchCV
+    ) -> None:
         """
         Train an intent-classifier on the provided training data.
 
@@ -260,8 +269,10 @@ def train(self, training_data: pd.DataFrame) -> None:
             return
 
         if self.valid_mlpmodel:
-            logger.warning(f"Model already exists on {self.mlp_model_path}")
-            return
+            logger.warning(
+                f"Model already exists on {self.mlp_model_path}"
+            )  # pragma: no cover
+            return  # pragma: no cover
 
         skip_labels_filter = training_data[self.label_column].isin(self.skip_labels)
         training_data = training_data[~skip_labels_filter].copy()
@@ -272,20 +283,16 @@ def train(self, training_data: pd.DataFrame) -> None:
             columns={self.data_column: const.TEXT, self.label_column: const.LABELS},
             inplace=True,
         )
-        args = self.init_model()
+        args = self.init_model(param_search=param_search)
         logger.debug(
             f"Displaying a few samples (this goes into the model):\n{training_data.sample(sample_size)}\nLabels: {self.labels_num}."
         )
+
         self.model_pipeline.fit(training_data[const.TEXT], training_data[const.LABELS])
         USE = "use"
         if args and args[const.USE_GRIDSEARCH][USE]:
             logger.debug(
-                "Best gridsearch params found:\n"
-                + str(
-                    "\n".join(
-                        str(items) for items in self.model_pipeline.best_params_.items()
-                    )
-                )
+                f"Best gridsearch params found:\n{pformat(self.model_pipeline.best_params_)}"
             )
         self.save()
 
diff --git a/dialogy/plugins/text/classification/xlmr.py b/dialogy/plugins/text/classification/xlmr.py
index 59475605..cd1eae2a 100644
--- a/dialogy/plugins/text/classification/xlmr.py
+++ b/dialogy/plugins/text/classification/xlmr.py
@@ -114,8 +114,10 @@ def init_model(self, label_count: Optional[int] = None) -> None:
             label_count = len(self.labelencoder.classes_)
             model_dir = self.model_dir
         if not label_count:
-            raise ValueError(f"Plugin {self} needs either the training data "
-                "or an existing labelencoder to initialize.")
+            raise ValueError(
+                f"Plugin {self} needs either the training data "
+                "or an existing labelencoder to initialize."
+            )
         args = (
             self.args_map[self.purpose]
             if self.args_map and self.purpose in self.args_map
@@ -247,7 +249,7 @@ def train(self, training_data: pd.DataFrame) -> None:
         training_data = training_data[~skip_labels_filter].copy()
 
         encoder = self.labelencoder.fit(training_data[self.label_column])
-        print(training_data)
+
         sample_size = 5 if len(training_data) > 5 else len(training_data)
         training_data.rename(
             columns={self.data_column: const.TEXT, self.label_column: const.LABELS},
diff --git a/dialogy/plugins/text/duckling_plugin/__init__.py b/dialogy/plugins/text/duckling_plugin/__init__.py
index d1ffa0d2..a7a8cd9d 100644
--- a/dialogy/plugins/text/duckling_plugin/__init__.py
+++ b/dialogy/plugins/text/duckling_plugin/__init__.py
@@ -445,7 +445,7 @@
 from dialogy.base import Guard, Input, Output, Plugin
 from dialogy.base.entity_extractor import EntityScoringMixin
 from dialogy.types import BaseEntity, Intent
-from dialogy.types.entity.deserialize import deserialize_duckling_entity
+from dialogy.types.entity.deserialize import EntityDeserializer
 from dialogy.utils import dt2timestamp, lang_detect_from_text, logger
 
 
@@ -655,7 +655,7 @@ def select_datetime(
             operation = self.get_operator(filter_type)
 
         if not self.reference_time:
-            return entities # pragma: no cover
+            return entities  # pragma: no cover
 
         time_entities, other_entities = py_.partition(
             entities, lambda entity: entity.dim == const.TIME
@@ -709,7 +709,7 @@ def _reshape(
         """
         deserialized_entities = []
         for entity_json in entities_json:
-            entity = deserialize_duckling_entity(
+            entity = EntityDeserializer.deserialize_duckling(
                 entity_json,
                 alternative_index,
                 reference_time=reference_time,
diff --git a/dialogy/plugins/text/list_search_plugin/__init__.py b/dialogy/plugins/text/list_search_plugin/__init__.py
index 3ecdd821..63ce997e 100644
--- a/dialogy/plugins/text/list_search_plugin/__init__.py
+++ b/dialogy/plugins/text/list_search_plugin/__init__.py
@@ -13,6 +13,7 @@
 
 import stanza
 from loguru import logger
+from stanza.models.common.doc import Document
 from thefuzz import fuzz
 
 from dialogy import constants as const
@@ -141,11 +142,14 @@ def search_regex(
         self,
         query: str,
         entity_type: str = "",
-        entity_patterns: List[str] = [""],
-        match_dict: Dict[Any, Any] = {},
+        entity_patterns: Optional[List[str]] = None,
+        match_dict: Optional[Dict[Any, Any]] = None,
     ) -> Tuple[Text, Label, Value, Span, Score]:
+        match_dict
         max_length = 0
         final_match = None
+        entity_patterns = entity_patterns or []
+        match_dict = match_dict or {}
 
         for pattern in entity_patterns:
             result = re.search(pattern, query)
@@ -161,31 +165,38 @@ def search_regex(
             return (match_text, entity_type, final_match, match_span, 1.0)
         return ("", entity_type, "", (0, 0), 0.0)
 
+    def get_words_from_nlp(
+        self, nlp: stanza.Pipeline, query: str
+    ) -> List[Dict[str, Any]]:
+        document: Document = nlp(query)
+        document_json = document.to_dict()
+        return document_json[0]
+
     def dp_search(
         self,
         query: str,
-        nlp: Any,
+        nlp: stanza.Pipeline,
         entity_type: str = "",
-        entity_patterns: List[str] = [""],
-        match_dict: Dict[Any, Any] = {},
+        entity_patterns: Optional[List[str]] = None,
+        match_dict: Optional[Dict[Any, Any]] = None,
     ) -> Tuple[Text, Label, Value, Span, Score]:
-
-        sentence = nlp(query).sentences[0]
+        entity_patterns = entity_patterns or []
+        match_dict = match_dict or {}
+        words = self.get_words_from_nlp(nlp, query)
         value = ""
         pos_tags = ["PROPN", "NOUN", "ADP"]
         result_dict = {}
-        for word in sentence.words:
-            if word.upos in pos_tags:
+        for word in words:
+            if word["upos"] in pos_tags:
                 if value == "":
-                    span_start = word.start_char
-                span_end = word.end_char
+                    span_start = word["start_char"]
+                span_end = word["end_char"]
 
                 """
                 joining individual tokens that together are the real entity,
                 Since we are dealing with Multi-Word entities here
-
                 """
-                value = value + str(word.text) + " "
+                value = value + str(word["text"]) + " "
         if value != "":
             for pattern in entity_patterns:
                 val = fuzz.ratio(pattern, value) / 100
diff --git a/dialogy/types/__init__.py b/dialogy/types/__init__.py
index 8fb8b177..e2e7c0bf 100644
--- a/dialogy/types/__init__.py
+++ b/dialogy/types/__init__.py
@@ -28,7 +28,7 @@
 from dialogy.types.entity.amount_of_money import CurrencyEntity
 from dialogy.types.entity.base_entity import BaseEntity, entity_synthesis
 from dialogy.types.entity.credit_card_number import CreditCardNumberEntity
-from dialogy.types.entity.deserialize import deserialize_duckling_entity
+from dialogy.types.entity.deserialize import EntityDeserializer
 from dialogy.types.entity.duration import DurationEntity
 from dialogy.types.entity.keyword import KeywordEntity
 from dialogy.types.entity.numerical import NumericalEntity
diff --git a/dialogy/types/entity/amount_of_money/__init__.py b/dialogy/types/entity/amount_of_money/__init__.py
index a71a2a40..a888a63f 100644
--- a/dialogy/types/entity/amount_of_money/__init__.py
+++ b/dialogy/types/entity/amount_of_money/__init__.py
@@ -13,8 +13,10 @@
 
 from dialogy import constants as const
 from dialogy.types.entity.base_entity import BaseEntity
+from dialogy.types.entity.deserialize import EntityDeserializer
 
 
+@EntityDeserializer.register(const.AMOUNT_OF_MONEY)
 @attr.s
 class CurrencyEntity(BaseEntity):
     """
@@ -33,7 +35,7 @@ class CurrencyEntity(BaseEntity):
 
     unit: str = attr.ib(validator=attr.validators.instance_of(str), kw_only=True)
     entity_type: str = attr.ib(
-        default="amount-of-money",
+        default=const.AMOUNT_OF_MONEY,
         validator=attr.validators.instance_of(str),
         kw_only=True,
     )
@@ -53,7 +55,9 @@ def get_value(self) -> Any:
         return f"{self.unit}{value:.2f}"
 
     @classmethod
-    def from_duckling(cls, d: Dict[str, Any], alternative_index: int) -> CurrencyEntity:
+    def from_duckling(
+        cls, d: Dict[str, Any], alternative_index: int, **kwargs: Any
+    ) -> CurrencyEntity:
         value = d[const.VALUE][const.VALUE]
         return cls(
             range={const.START: d[const.START], const.END: d[const.END]},
diff --git a/dialogy/types/entity/base_entity/__init__.py b/dialogy/types/entity/base_entity/__init__.py
index dfc3f200..6c359c43 100644
--- a/dialogy/types/entity/base_entity/__init__.py
+++ b/dialogy/types/entity/base_entity/__init__.py
@@ -246,6 +246,12 @@ def from_dict(
             return attr.evolve(reference, **dict_)
         return cls(**dict_)
 
+    @classmethod
+    def from_duckling(
+        cls, d: Dict[str, Any], alternative_index: int, **kwargs: Any
+    ) -> BaseEntity:
+        raise NotImplementedError  # pragma: no cover
+
 
 # = entity_synthesis =
 def entity_synthesis(entity: BaseEntity, property_: str, value: Any) -> BaseEntity:
diff --git a/dialogy/types/entity/credit_card_number/__init__.py b/dialogy/types/entity/credit_card_number/__init__.py
index 7688db7f..964fb7a3 100644
--- a/dialogy/types/entity/credit_card_number/__init__.py
+++ b/dialogy/types/entity/credit_card_number/__init__.py
@@ -55,12 +55,14 @@
 
 from dialogy import constants as const
 from dialogy.types import BaseEntity
+from dialogy.types.entity.deserialize import EntityDeserializer
 
 
+@EntityDeserializer.register(const.CREDIT_CARD_NUMBER)
 @attr.s
 class CreditCardNumberEntity(BaseEntity):
     entity_type: Optional[str] = attr.ib(
-        repr=False, default="credit-card-number", kw_only=True
+        repr=False, default=const.CREDIT_CARD_NUMBER, kw_only=True
     )
     issuer: str = attr.ib(validator=attr.validators.instance_of(str), kw_only=True)
     value: Optional[str] = attr.ib(default=None, kw_only=True)
@@ -70,7 +72,7 @@ class CreditCardNumberEntity(BaseEntity):
 
     @classmethod
     def from_duckling(
-        cls, d: Dict[str, Any], alternative_index: int
+        cls, d: Dict[str, Any], alternative_index: int, **kwargs: Any
     ) -> CreditCardNumberEntity:
         value = d[const.VALUE][const.VALUE]
         return cls(
diff --git a/dialogy/types/entity/deserialize/__init__.py b/dialogy/types/entity/deserialize/__init__.py
index 1046163a..fadd3dc6 100644
--- a/dialogy/types/entity/deserialize/__init__.py
+++ b/dialogy/types/entity/deserialize/__init__.py
@@ -1,70 +1,80 @@
-from typing import Any, Dict, Optional
+from functools import wraps
+from typing import Any, Callable, Dict, Optional
 
 from dialogy import constants as const
-from dialogy.types.entity.amount_of_money import CurrencyEntity
 from dialogy.types.entity.base_entity import BaseEntity
-from dialogy.types.entity.credit_card_number import CreditCardNumberEntity
-from dialogy.types.entity.duration import DurationEntity
-from dialogy.types.entity.numerical import NumericalEntity
-from dialogy.types.entity.people import PeopleEntity
-from dialogy.types.entity.time import TimeEntity
-from dialogy.types.entity.time_interval import TimeIntervalEntity
 
 
-def deserialize_duckling_entity(
-    duckling_entity_dict: Dict[str, Any],
-    alternative_index: int,
-    reference_time: Optional[int] = None,
-    timezone: str = "UTC",
-    duration_cast_operator: Optional[str] = None,
-    constraints: Optional[Dict[str, Any]] = None,
-) -> BaseEntity:
-    keys = tuple(sorted(duckling_entity_dict.keys()))
-    if keys != const.DUCKLING_ENTITY_KEYS:
-        raise ValueError(
-            f"Invalid Duckling entity keys: {keys} expected {const.DUCKLING_ENTITY_KEYS}."
-        )
-
-    dimension = duckling_entity_dict[const.DIM]
-    if dimension not in const.DUCKLING_DIMS:
-        raise ValueError(
-            f"Invalid Duckling dimension: {dimension} expected {const.DUCKLING_DIMS}."
-        )
+class EntityDeserializer:
+    entitiy_classes: Dict[str, BaseEntity] = {}
 
-    value_keys = tuple(sorted(duckling_entity_dict[const.VALUE].keys()))
+    @classmethod
+    def register(cls, dim: str) -> Callable[[Any], Any]:
+        @wraps(cls)
+        def decorator(entity_class: BaseEntity) -> BaseEntity:
+            cls.entitiy_classes[dim] = entity_class
+            return entity_class
 
-    if dimension == const.PEOPLE:
-        return PeopleEntity.from_duckling(duckling_entity_dict, alternative_index)
+        return decorator
 
-    elif dimension == const.TIME:
-        if value_keys == const.DUCKLING_TIME_VALUES_ENTITY_KEYS:
-            return TimeEntity.from_duckling(duckling_entity_dict, alternative_index, constraints)
-
-        elif (
-            dimension == const.TIME
-            and value_keys in const.DUCKLING_TIME_INTERVAL_ENTITY_KEYS
-        ):
-            return TimeIntervalEntity.from_duckling(
-                duckling_entity_dict, alternative_index
+    @classmethod
+    def validate(cls, duckling_entity_dict: Dict[str, Any]) -> None:
+        keys = tuple(sorted(duckling_entity_dict.keys()))
+        if keys != const.DUCKLING_ENTITY_KEYS:
+            raise ValueError(
+                f"Invalid Duckling entity keys: {keys} expected {const.DUCKLING_ENTITY_KEYS}."
             )
 
-        else:
+        dimension = cls.get_dimension(duckling_entity_dict)
+        if dimension not in const.DUCKLING_DIMS:
             raise ValueError(
-                f"Dimension {const.TIME} recieved invalid keys {value_keys} expected either {const.DUCKLING_TIME_VALUES_ENTITY_KEYS} or {const.DUCKLING_TIME_INTERVAL_ENTITY_KEYS}."
+                f"Invalid Duckling dimension: {dimension} expected {const.DUCKLING_DIMS}."
             )
 
-    elif dimension == const.AMOUNT_OF_MONEY:
-        return CurrencyEntity.from_duckling(duckling_entity_dict, alternative_index)
+    @staticmethod
+    def get_keys_in_value_as_str(duckling_entity_dict: Dict[str, Any]) -> str:
+        return " ".join(sorted(duckling_entity_dict[const.VALUE].keys()))
 
-    elif dimension == const.NUMBER:
-        return NumericalEntity.from_duckling(duckling_entity_dict, alternative_index)
+    @staticmethod
+    def get_dimension(duckling_entity_dict: Dict[str, Any]) -> str:
+        return duckling_entity_dict[const.DIM]
 
-    elif dimension == const.DURATION:
-        entity = DurationEntity.from_duckling(duckling_entity_dict, alternative_index)
-        if duration_cast_operator and reference_time:
-            return entity.as_time(reference_time, timezone, duration_cast_operator)
-        return entity
-    else:  # dimension == const.CREDIT_CARD_NUMBER:
-        return CreditCardNumberEntity.from_duckling(
-            duckling_entity_dict, alternative_index
+    @classmethod
+    def get_entity_class_str(cls, duckling_entity_dict: Dict[str, Any]) -> str:
+        return (
+            const.TIME_INTERVAL
+            if cls.get_keys_in_value_as_str(duckling_entity_dict)
+            in const.DUCKLING_TIME_INTERVAL_ENTITY_KEYS
+            else cls.get_dimension(duckling_entity_dict)
         )
+
+    @classmethod
+    def deserialize_duckling(
+        cls,
+        duckling_entity_dict: Dict[str, Any],
+        alternative_index: int,
+        reference_time: Optional[int] = None,
+        timezone: str = "UTC",
+        duration_cast_operator: Optional[str] = None,
+        constraints: Optional[Dict[str, Any]] = None,
+    ) -> BaseEntity:
+        cls.validate(duckling_entity_dict)
+        entity_class_name = cls.get_entity_class_str(duckling_entity_dict)
+        EntityClass: BaseEntity = cls.entitiy_classes[entity_class_name]
+
+        try:
+            entity = EntityClass.from_duckling(
+                duckling_entity_dict,
+                alternative_index,
+                constraints=constraints,
+                duration_cast_operator=duration_cast_operator,
+                timezone=timezone,
+                reference_time=reference_time,
+            )
+        except KeyError as e:
+            raise ValueError(
+                f"Failed to deserialize {EntityClass} "
+                f"from duckling response: {duckling_entity_dict}. Exception: {e}"
+            ) from e
+
+        return entity
diff --git a/dialogy/types/entity/duration/__init__.py b/dialogy/types/entity/duration/__init__.py
index 94f3421e..e017921c 100644
--- a/dialogy/types/entity/duration/__init__.py
+++ b/dialogy/types/entity/duration/__init__.py
@@ -48,16 +48,18 @@
 
 import operator
 from datetime import timedelta
-from typing import Any, Dict
+from typing import Any, Dict, Optional, Union
 
 import attr
 
 from dialogy import constants as const
 from dialogy.types.entity.base_entity import BaseEntity
+from dialogy.types.entity.deserialize import EntityDeserializer
 from dialogy.types.entity.time import TimeEntity
 from dialogy.utils import unix_ts_to_datetime
 
 
+@EntityDeserializer.register(const.DURATION)
 @attr.s
 class DurationEntity(BaseEntity):
     """
@@ -75,12 +77,20 @@ class DurationEntity(BaseEntity):
     unit: str = attr.ib(validator=attr.validators.instance_of(str), kw_only=True)
     normalized: Dict[str, Any] = attr.ib(default=attr.Factory(dict))
     _meta: Dict[str, str] = attr.ib(default=attr.Factory(dict))
-    entity_type: str = attr.ib(default="duration", kw_only=True)
+    entity_type: str = attr.ib(default=const.DURATION, kw_only=True)
 
     @classmethod
-    def from_duckling(cls, d: Dict[str, Any], alternative_index: int) -> DurationEntity:
+    def from_duckling(
+        cls,
+        d: Dict[str, Any],
+        alternative_index: int,
+        reference_time: Optional[int] = None,
+        timezone: Optional[str] = None,
+        duration_cast_operator: Optional[str] = None,
+        **kwargs: Any
+    ) -> Union[DurationEntity, TimeEntity]:
         value = d[const.VALUE][const.NORMALIZED][const.VALUE]
-        return cls(
+        entity = cls(
             range={const.START: d[const.START], const.END: d[const.END]},
             body=d[const.BODY],
             dim=d[const.DIM],
@@ -90,6 +100,9 @@ def from_duckling(cls, d: Dict[str, Any], alternative_index: int) -> DurationEnt
             unit=d[const.VALUE][const.UNIT],
             normalized=d[const.VALUE][const.NORMALIZED],
         )
+        if reference_time and timezone and duration_cast_operator:
+            return entity.as_time(reference_time, timezone, duration_cast_operator)
+        return entity
 
     def as_time(
         self, reference_unix_ts: int, timezone: str, duration_cast_operator: str
diff --git a/dialogy/types/entity/numerical/__init__.py b/dialogy/types/entity/numerical/__init__.py
index 2b22d5f4..899b68b8 100644
--- a/dialogy/types/entity/numerical/__init__.py
+++ b/dialogy/types/entity/numerical/__init__.py
@@ -86,10 +86,12 @@
 
 from dialogy import constants as const
 from dialogy.types.entity.base_entity import BaseEntity
+from dialogy.types.entity.deserialize import EntityDeserializer
 from dialogy.types.entity.time import TimeEntity
 from dialogy.utils import unix_ts_to_datetime
 
 
+@EntityDeserializer.register(const.NUMBER)
 @attr.s
 class NumericalEntity(BaseEntity):
     """
@@ -109,11 +111,11 @@ class NumericalEntity(BaseEntity):
     origin = attr.ib(
         type=str, default="value", validator=attr.validators.instance_of(str)
     )
-    entity_type: Optional[str] = attr.ib(default="number", order=False)
+    entity_type: Optional[str] = attr.ib(default=const.NUMBER, order=False)
 
     @classmethod
     def from_duckling(
-        cls, d: Dict[str, Any], alternative_index: int
+        cls, d: Dict[str, Any], alternative_index: int, **kwargs: Any
     ) -> NumericalEntity:
         value = d[const.VALUE][const.VALUE]
         return cls(
diff --git a/dialogy/types/entity/people/__init__.py b/dialogy/types/entity/people/__init__.py
index dc8df642..c332b688 100644
--- a/dialogy/types/entity/people/__init__.py
+++ b/dialogy/types/entity/people/__init__.py
@@ -52,8 +52,10 @@
 
 from dialogy import constants as const
 from dialogy.types.entity.base_entity import BaseEntity
+from dialogy.types.entity.deserialize import EntityDeserializer
 
 
+@EntityDeserializer.register(const.PEOPLE)
 @attr.s
 class PeopleEntity(BaseEntity):
     """
@@ -66,10 +68,12 @@ class PeopleEntity(BaseEntity):
     """
 
     unit = attr.ib(type=str, default="", validator=attr.validators.instance_of(str))
-    entity_type: Optional[str] = attr.ib(default="people", order=False)
+    entity_type: Optional[str] = attr.ib(default=const.PEOPLE, order=False)
 
     @classmethod
-    def from_duckling(cls, d: Dict[str, Any], alternative_index: int) -> PeopleEntity:
+    def from_duckling(
+        cls, d: Dict[str, Any], alternative_index: int, **kwargs: Any
+    ) -> PeopleEntity:
         value = d[const.VALUE][const.VALUE]
         return cls(
             range={const.START: d[const.START], const.END: d[const.END]},
diff --git a/dialogy/types/entity/time/__init__.py b/dialogy/types/entity/time/__init__.py
index 022c59fe..de1ad829 100644
--- a/dialogy/types/entity/time/__init__.py
+++ b/dialogy/types/entity/time/__init__.py
@@ -50,18 +50,19 @@
 """
 from __future__ import annotations
 
+import operator
 from datetime import datetime
-from typing import Any, Dict, List, Optional, Callable
+from typing import Any, Dict, List, Optional
 
 import attr
-import operator
 import pydash as py_
-from copy import deepcopy
 
 from dialogy import constants as const
 from dialogy.types.entity.base_entity import BaseEntity
+from dialogy.types.entity.deserialize import EntityDeserializer
 
 
+@EntityDeserializer.register(const.TIME)
 @attr.s
 class TimeEntity(BaseEntity):
     """
@@ -76,11 +77,14 @@ class TimeEntity(BaseEntity):
     - `grain` tells us the smallest unit of time in the utterance
     """
 
-    origin: str = attr.ib(default="value")
-    dim: str = attr.ib(default="time")
+    origin: str = attr.ib(default=const.VALUE)
+    dim: str = attr.ib(default=const.TIME)
     grain: str = attr.ib(default=None, validator=attr.validators.instance_of(str))
-    __TIMERANGE_OPERATION_ALIAS: Dict[str, Any] = {const.LTE: operator.le, const.GTE: operator.ge}
-    
+    __TIMERANGE_OPERATION_ALIAS: Dict[str, Any] = {
+        const.LTE: operator.le,
+        const.GTE: operator.ge,
+    }
+
     def get_value(self) -> Any:
         """
         Return the date string in ISO format from the dictionary passed
@@ -192,36 +196,46 @@ def set_entity_type(self) -> None:
             self.entity_type = const.TIME
 
     @classmethod
-    def pick_value(cls, d_values: List[Dict[str, Any]], grain: str, constraints: Dict[str, Any]) -> List[Dict[str, Any]]:        
-        is_time = grain in const.TIME_UNITS 
+    def pick_value(
+        cls, d_values: List[Dict[str, Any]], grain: str, constraints: Dict[str, Any]
+    ) -> List[Dict[str, Any]]:
+        is_time = grain in const.TIME_UNITS
         constraint = constraints.get(const.TIME)
         req_value = d_values[0]
         if not is_time or not constraint:
             return [req_value]
 
         opt_items = [
-            (cls.__TIMERANGE_OPERATION_ALIAS.get(opt), measure) \
-                for opt, measure in constraint.items()
+            (cls.__TIMERANGE_OPERATION_ALIAS.get(opt), measure)
+            for opt, measure in constraint.items()
         ]
         for datetime_val in d_values:
             datetime_ = datetime.fromisoformat(datetime_val[const.VALUE])
             if all(
-                opt(getattr(datetime_, const.HOUR), measure[const.HOUR]) for opt, measure in opt_items if opt
+                opt(getattr(datetime_, const.HOUR), measure[const.HOUR])
+                for opt, measure in opt_items
+                if opt
             ):
                 req_value = datetime_val
                 break
         return [req_value]
 
     @classmethod
-    def from_duckling(cls, d: Dict[str, Any], alternative_index: int, constraints: Optional[Dict[str, Any]] = None) -> TimeEntity:
+    def from_duckling(
+        cls,
+        d: Dict[str, Any],
+        alternative_index: int,
+        constraints: Optional[Dict[str, Any]] = None,
+        **kwargs: Any
+    ) -> TimeEntity:
         datetime_values = d[const.VALUE][const.VALUES]
         if len(datetime_values) > 1 and constraints:
             datetime_values = cls.pick_value(
                 d_values=datetime_values,
                 grain=datetime_values[0][const.GRAIN],
-                constraints=constraints
+                constraints=constraints,
             )
-        
+
         time_entity = cls(
             range={const.START: d[const.START], const.END: d[const.END]},
             body=d[const.BODY],
diff --git a/dialogy/types/entity/time_interval/__init__.py b/dialogy/types/entity/time_interval/__init__.py
index e4dd1179..3efab370 100644
--- a/dialogy/types/entity/time_interval/__init__.py
+++ b/dialogy/types/entity/time_interval/__init__.py
@@ -54,9 +54,11 @@
 import attr
 
 from dialogy import constants as const
+from dialogy.types.entity.deserialize import EntityDeserializer
 from dialogy.types.entity.time import TimeEntity
 
 
+@EntityDeserializer.register(const.TIME_INTERVAL)
 @attr.s
 class TimeIntervalEntity(TimeEntity):
     """
@@ -149,7 +151,13 @@ def get_value(self) -> Any:
             )
 
     @classmethod
-    def from_duckling(cls, d: Dict[str, Any], alternative_index: int, constraints: Optional[Dict[str, Any]] = None) -> TimeEntity:
+    def from_duckling(
+        cls,
+        d: Dict[str, Any],
+        alternative_index: int,
+        constraints: Optional[Dict[str, Any]] = None,
+        **kwargs: Any,
+    ) -> TimeEntity:
         from_value = d[const.VALUE].get(const.FROM)
         to_value = d[const.VALUE].get(const.TO)
         grain_source = from_value or to_value
diff --git a/dialogy/utils/file_handler.py b/dialogy/utils/file_handler.py
index 0da19342..6f35e1c9 100644
--- a/dialogy/utils/file_handler.py
+++ b/dialogy/utils/file_handler.py
@@ -4,6 +4,8 @@
 from json.decoder import JSONDecodeError
 from typing import Any, Dict, List, Optional
 
+from loguru import logger
+
 
 def load_file(
     file_path: Optional[str] = None, mode: str = "r", loader: Any = None
@@ -28,7 +30,7 @@ def load_file(
             else:
                 return loader(file)
     else:
-        return None
+        return None  # pragma: no cover
 
 
 def save_file(
@@ -84,7 +86,7 @@ def save_to_json(params: Dict[str, Any], dir_path: str, file_name: str) -> None:
                 for key, val in params.items():
                     existing_config[key] = val
         except JSONDecodeError:
-            print(
+            logger.error(
                 f"Failed to load json file {full_path}, writing on newly created file."
             )
     params = existing_config or params
diff --git a/dialogy/utils/temperature_scaling.py b/dialogy/utils/temperature_scaling.py
index 695760bb..eabf8aba 100644
--- a/dialogy/utils/temperature_scaling.py
+++ b/dialogy/utils/temperature_scaling.py
@@ -1,5 +1,5 @@
 import os
-from typing import Any, Dict, List, Optional, Tuple, Union
+from typing import Any, Tuple
 
 import matplotlib.patches as mpatches
 import matplotlib.pyplot as plt
@@ -9,10 +9,6 @@
 import torch.nn as nn
 import torch.optim as optim
 from torch import Tensor
-from tqdm import tqdm
-
-import dialogy.constants as const
-from dialogy.utils import logger
 
 DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
 
@@ -61,6 +57,7 @@ def save_reliability_graph(
     prefix: str,
 ) -> None:
     ECE, MCE = get_metrics(preds, labels_oneh)
+
     bins, _, bin_accs, _, _ = calc_bins(preds, labels_oneh)
 
     fig = plt.figure(figsize=(8, 8))
@@ -91,6 +88,7 @@ def save_reliability_graph(
     # ECE and MCE legend
     ECE_patch = mpatches.Patch(color="green", label="ECE = {:.2f}%".format(ECE * 100))
     MCE_patch = mpatches.Patch(color="red", label="MCE = {:.2f}%".format(MCE * 100))
+
     plt.legend(handles=[ECE_patch, MCE_patch])
 
     plt.savefig(
@@ -107,15 +105,18 @@ def fit_ts_parameter(
     labels_list: npt.NDArray[np.int64],
     lr: float = 0.001,
     max_iter: int = 10000,
+    device: torch.device = DEVICE,
 ) -> float:
-    logits_tensor = torch.from_numpy(logits_list).to(DEVICE)
-    labels_tensor = torch.from_numpy(labels_list).to(DEVICE)
-    temperature = nn.Parameter(torch.ones(1).to(DEVICE))
+    logits_tensor = torch.from_numpy(logits_list).to(device)
+    labels_tensor = torch.from_numpy(labels_list).to(device)
+    temperature = nn.Parameter(torch.ones(1).to(device))
     criterion = nn.CrossEntropyLoss()
     optimizer = optim.LBFGS(
         [temperature], lr=lr, max_iter=max_iter, line_search_fn="strong_wolfe"
     )
 
+    import time
+
     def _eval() -> Any:
         loss = criterion(T_scaling(logits_tensor, temperature), labels_tensor)
         loss.backward()
diff --git a/dialogy/workflow/workflow.py b/dialogy/workflow/workflow.py
index ab9d2a07..648cd5cf 100644
--- a/dialogy/workflow/workflow.py
+++ b/dialogy/workflow/workflow.py
@@ -183,6 +183,9 @@ def __attrs_post_init__(self) -> None:
         """
         self.__reset()
         self.lock = Lock()
+        for plugin in self.plugins:
+            if isinstance(plugin, Plugin):
+                plugin.debug = self.debug & plugin.debug
 
     def __reset(self) -> None:
         """
diff --git a/docs/.buildinfo b/docs/.buildinfo
index d20fc42c..3c497bc3 100644
--- a/docs/.buildinfo
+++ b/docs/.buildinfo
@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 6ea2d3cce8d5c5e82333a8d094ceebed
+config: a48b3e18e35a2d4101c2fd3c5288dac1
 tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/_modules/dialogy/base/output.html b/docs/_modules/dialogy/base/output.html
index 4837d7d9..41a13c07 100644
--- a/docs/_modules/dialogy/base/output.html
+++ b/docs/_modules/dialogy/base/output.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html" /><link rel="search" title="Search" href="../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.base.output - dialogy 0.9.5 documentation</title>
+        <title>dialogy.base.output - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -268,13 +268,13 @@ <h1>Source code for dialogy.base.output</h1><div class="highlight"><pre>
 
 <span class="kn">import</span> <span class="nn">attr</span>
 
-<span class="kn">from</span> <span class="nn">dialogy.types</span> <span class="kn">import</span> <span class="n">BaseEntity</span><span class="p">,</span> <span class="n">Intent</span>
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
-
+<span class="kn">from</span> <span class="nn">dialogy.types</span> <span class="kn">import</span> <span class="n">BaseEntity</span><span class="p">,</span> <span class="n">Intent</span>
 
 <span class="n">JSON_LIST_TYPE</span> <span class="o">=</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span>
 <span class="n">ORIGINAL_INTENT_TYPE</span> <span class="o">=</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">float</span><span class="p">]]</span>
 
+
 <div class="viewcode-block" id="Output"><a class="viewcode-back" href="../../../source/dialogy.base.output.html#dialogy.base.output.Output">[docs]</a><span class="nd">@attr</span><span class="o">.</span><span class="n">frozen</span>
 <span class="k">class</span> <span class="nc">Output</span><span class="p">:</span>
     <span class="sd">"""</span>
@@ -293,7 +293,9 @@ <h1>Source code for dialogy.base.output</h1><div class="highlight"><pre>
 <span class="sd">    :ref:`ListEntityPlugin &lt;ListEntityPlugin&gt;` or :ref:`ListSearchPlugin &lt;ListSearchPlugin&gt;`.</span>
 <span class="sd">    """</span>
 
-    <span class="n">original_intent</span><span class="p">:</span> <span class="n">ORIGINAL_INTENT_TYPE</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">Factory</span><span class="p">(</span><span class="nb">dict</span><span class="p">),</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">original_intent</span><span class="p">:</span> <span class="n">ORIGINAL_INTENT_TYPE</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span>
+        <span class="n">default</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">Factory</span><span class="p">(</span><span class="nb">dict</span><span class="p">),</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span>
+    <span class="p">)</span>
 
     <span class="nd">@intents</span><span class="o">.</span><span class="n">validator</span>  <span class="c1"># type: ignore</span>
     <span class="k">def</span> <span class="nf">_are_intents_valid</span><span class="p">(</span>
@@ -340,13 +342,17 @@ <h1>Source code for dialogy.base.output</h1><div class="highlight"><pre>
                 <span class="sa">f</span><span class="s2">"original_intent must contain </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">NAME</span><span class="si">}</span><span class="s2"> but </span><span class="si">{</span><span class="n">original_intent</span><span class="si">}</span><span class="s2"> was provided."</span>
             <span class="p">)</span>
         <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">original_intent</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">NAME</span><span class="p">],</span> <span class="nb">str</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"original_intent[</span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">NAME</span><span class="si">}</span><span class="s2">] must be a str, not </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">original_intent</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">NAME</span><span class="p">])</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">"original_intent[</span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">NAME</span><span class="si">}</span><span class="s2">] must be a str, not </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">original_intent</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">NAME</span><span class="p">])</span><span class="si">}</span><span class="s2">"</span>
+            <span class="p">)</span>
         <span class="k">if</span> <span class="n">const</span><span class="o">.</span><span class="n">SCORE</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">original_intent</span><span class="p">:</span>
             <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span>
                 <span class="sa">f</span><span class="s2">"original_intent must contain </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">SCORE</span><span class="si">}</span><span class="s2"> but </span><span class="si">{</span><span class="n">original_intent</span><span class="si">}</span><span class="s2"> was provided."</span>
             <span class="p">)</span>
         <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">original_intent</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">SCORE</span><span class="p">],</span> <span class="nb">float</span><span class="p">):</span>
-            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"original_intent[</span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">SCORE</span><span class="si">}</span><span class="s2">] must be a float, not </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">original_intent</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">SCORE</span><span class="p">])</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
+            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">"original_intent[</span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">SCORE</span><span class="si">}</span><span class="s2">] must be a float, not </span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">original_intent</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">SCORE</span><span class="p">])</span><span class="si">}</span><span class="s2">"</span>
+            <span class="p">)</span>
 
 <div class="viewcode-block" id="Output.json"><a class="viewcode-back" href="../../../source/dialogy.base.output.html#dialogy.base.output.Output.json">[docs]</a>    <span class="k">def</span> <span class="nf">json</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">Output</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Union</span><span class="p">[</span><span class="n">JSON_LIST_TYPE</span><span class="p">,</span> <span class="n">ORIGINAL_INTENT_TYPE</span><span class="p">]]:</span>
         <span class="sd">"""</span>
diff --git a/docs/_modules/dialogy/constants.html b/docs/_modules/dialogy/constants.html
index b339f6f8..a0392cfc 100644
--- a/docs/_modules/dialogy/constants.html
+++ b/docs/_modules/dialogy/constants.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../genindex.html" /><link rel="search" title="Search" href="../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.constants - dialogy 0.9.5 documentation</title>
+        <title>dialogy.constants - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -239,17 +239,19 @@ <h1>Source code for dialogy.constants</h1><div class="highlight"><pre>
 <span class="n">SLOTS</span> <span class="o">=</span> <span class="s2">"slots"</span>
 
 <span class="n">DUCKLING_ENTITY_KEYS</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"body"</span><span class="p">,</span> <span class="s2">"dim"</span><span class="p">,</span> <span class="s2">"end"</span><span class="p">,</span> <span class="s2">"latent"</span><span class="p">,</span> <span class="s2">"start"</span><span class="p">,</span> <span class="s2">"value"</span><span class="p">)</span>
-<span class="n">DUCKLING_TIME_VALUES_ENTITY_KEYS</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"grain"</span><span class="p">,</span> <span class="s2">"type"</span><span class="p">,</span> <span class="s2">"value"</span><span class="p">,</span> <span class="s2">"values"</span><span class="p">)</span>
+<span class="n">DUCKLING_TIME_VALUES_ENTITY_KEYS</span> <span class="o">=</span> <span class="s2">"grain type value values"</span>
 <span class="n">DUCKLING_TIME_INTERVAL_ENTITY_KEYS</span> <span class="o">=</span> <span class="p">(</span>
-    <span class="p">(</span><span class="s2">"from"</span><span class="p">,</span> <span class="s2">"type"</span><span class="p">,</span> <span class="s2">"values"</span><span class="p">),</span>
-    <span class="p">(</span><span class="s2">"to"</span><span class="p">,</span> <span class="s2">"type"</span><span class="p">,</span> <span class="s2">"values"</span><span class="p">),</span>
-    <span class="p">(</span><span class="s2">"from"</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">,</span> <span class="s2">"type"</span><span class="p">,</span> <span class="s2">"values"</span><span class="p">),</span>
+    <span class="s2">"from type values"</span><span class="p">,</span>
+    <span class="s2">"to type values"</span><span class="p">,</span>
+    <span class="s2">"from to type values"</span><span class="p">,</span>
 <span class="p">)</span>
 
 <span class="c1"># Time Entity types</span>
 <span class="n">DATE</span> <span class="o">=</span> <span class="s2">"date"</span>
 <span class="n">TIME</span> <span class="o">=</span> <span class="s2">"time"</span>
+<span class="n">TIME_INTERVAL</span> <span class="o">=</span> <span class="s2">"time_interval"</span>
 <span class="n">DATETIME</span> <span class="o">=</span> <span class="s2">"datetime"</span>
+<span class="n">MINUTE</span> <span class="o">=</span> <span class="s2">"minute"</span>
 <span class="n">HOUR</span> <span class="o">=</span> <span class="s2">"hour"</span>
 <span class="n">DAY</span> <span class="o">=</span> <span class="s2">"day"</span>
 <span class="n">MONTH</span> <span class="o">=</span> <span class="s2">"month"</span>
@@ -264,6 +266,9 @@ <h1>Source code for dialogy.constants</h1><div class="highlight"><pre>
 <span class="n">PAST</span> <span class="o">=</span> <span class="s2">"past"</span>
 <span class="n">ANY</span> <span class="o">=</span> <span class="s2">"__any__"</span>
 
+<span class="n">LTE</span> <span class="o">=</span> <span class="s2">"lte"</span>
+<span class="n">GTE</span> <span class="o">=</span> <span class="s2">"gte"</span>
+
 <span class="n">DUCKLING_DIMS</span> <span class="o">=</span> <span class="p">[</span><span class="n">PEOPLE</span><span class="p">,</span> <span class="n">NUMBER</span><span class="p">,</span> <span class="n">AMOUNT_OF_MONEY</span><span class="p">,</span> <span class="n">DURATION</span><span class="p">,</span> <span class="n">CREDIT_CARD_NUMBER</span><span class="p">,</span> <span class="n">TIME</span><span class="p">]</span>
 
 <span class="n">BODY</span> <span class="o">=</span> <span class="s2">"body"</span>
@@ -395,7 +400,7 @@ <h1>Source code for dialogy.constants</h1><div class="highlight"><pre>
 <span class="n">NGRAM_RANGE</span> <span class="o">=</span> <span class="s2">"ngram_range"</span>
 <span class="n">GRIDSEARCH_WORKERS</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>  <span class="c1"># -1 means use all available cores</span>
 
-<span class="c1">#Calibration Constants</span>
+<span class="c1"># Calibration Constants</span>
 <span class="n">MODEL_CALIBRATION</span> <span class="o">=</span> <span class="s2">"model_calibration"</span>
 <span class="n">TS_PARAMETER</span> <span class="o">=</span> <span class="s2">"ts_parameter"</span>
 <span class="n">CALIBRATION_CONFIG_FILE</span> <span class="o">=</span> <span class="s2">"calibration_config.json"</span>
diff --git a/docs/_modules/dialogy/plugins/text/classification/mlp.html b/docs/_modules/dialogy/plugins/text/classification/mlp.html
index 88cecd8a..19a9e069 100644
--- a/docs/_modules/dialogy/plugins/text/classification/mlp.html
+++ b/docs/_modules/dialogy/plugins/text/classification/mlp.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../../genindex.html" /><link rel="search" title="Search" href="../../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.classification.mlp - dialogy 0.9.1 documentation</title>
+        <title>dialogy.plugins.text.classification.mlp - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../../index.html"><div class="brand">dialogy 0.9.1 documentation</div></a>
+      <a href="../../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.1 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -160,11 +160,13 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.base.input.html">Input</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.base.output.html">Output</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.workflow.html">Workflow</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.base.plugin.html">Base Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.base.plugin.html">Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.intent.html">Intent</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.entity.base_entity.html">Entity</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Types</span></p>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.intent.html">Intent</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.entity.keyword.html">Pattern Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.entity.amount_of_money.html">Currency Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.entity.credit_card_number.html">Credit Card Number Entity</a></li>
@@ -173,7 +175,6 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.entity.time.html">Time Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.entity.time_interval.html">Time Interval Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.entity.duration.html">Duration Entity</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Plugins</span></p>
 <ul>
@@ -185,6 +186,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.plugins.text.list_search_plugin.html">Fuzzy Entity Search</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.base.entity_extractor.html">Entity Scoring</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.plugins.text.lb_plugin.html">Lower Bound Duckling Entities</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../../source/dialogy.plugins.text.combine_date_time.html">Combine DateTime Over Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Misc</span></p>
 <ul>
@@ -224,6 +226,7 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
 <span class="kn">import</span> <span class="nn">ast</span>
 <span class="kn">import</span> <span class="nn">operator</span>
 <span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pformat</span>
 <span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span>
 
 <span class="kn">import</span> <span class="nn">joblib</span>
@@ -232,6 +235,7 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
 <span class="kn">from</span> <span class="nn">sklearn.feature_extraction.text</span> <span class="kn">import</span> <span class="n">TfidfVectorizer</span>
 <span class="kn">from</span> <span class="nn">sklearn.metrics</span> <span class="kn">import</span> <span class="n">f1_score</span><span class="p">,</span> <span class="n">make_scorer</span>
 <span class="kn">from</span> <span class="nn">sklearn.model_selection</span> <span class="kn">import</span> <span class="n">GridSearchCV</span>
+<span class="kn">from</span> <span class="nn">sklearn.model_selection._search</span> <span class="kn">import</span> <span class="n">BaseSearchCV</span>
 <span class="kn">from</span> <span class="nn">sklearn.neural_network</span> <span class="kn">import</span> <span class="n">MLPClassifier</span>
 <span class="kn">from</span> <span class="nn">sklearn.pipeline</span> <span class="kn">import</span> <span class="n">Pipeline</span>
 <span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">tqdm</span>
@@ -293,13 +297,13 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
         <span class="k">try</span><span class="p">:</span>
             <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mlp_model_path</span><span class="p">):</span>
                 <span class="bp">self</span><span class="o">.</span><span class="n">init_model</span><span class="p">()</span>
-        <span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
-            <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+        <span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>  <span class="c1"># pragma: no cover</span>
+            <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>  <span class="c1"># pragma: no cover</span>
                 <span class="sa">f</span><span class="s2">"Plugin </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> Failed to load MLPClassifier Model from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">mlp_model_path</span><span class="si">}</span><span class="s2">. "</span>
                 <span class="s2">"Ignore this message if you are training but if you are using this in production or testing, then this is serious!"</span>
             <span class="p">)</span>
 
-<div class="viewcode-block" id="MLPMultiClass.init_model"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.init_model">[docs]</a>    <span class="k">def</span> <span class="nf">init_model</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
+<div class="viewcode-block" id="MLPMultiClass.init_model"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.init_model">[docs]</a>    <span class="k">def</span> <span class="nf">init_model</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">param_search</span><span class="p">:</span> <span class="n">BaseSearchCV</span> <span class="o">=</span> <span class="n">GridSearchCV</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
         <span class="sd">"""</span>
 <span class="sd">        Initialize the model if artifacts are available.</span>
 <span class="sd">        """</span>
@@ -312,7 +316,7 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
             <span class="k">else</span> <span class="p">{}</span>
         <span class="p">)</span>
 
-        <span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span>
+        <span class="n">pipeline</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span>
             <span class="p">[</span>
                 <span class="p">(</span>
                     <span class="n">const</span><span class="o">.</span><span class="n">TFIDF</span><span class="p">,</span>
@@ -339,9 +343,11 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
         <span class="p">)</span>
         <span class="n">USE</span> <span class="o">=</span> <span class="s2">"use"</span>
         <span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">USE_GRIDSEARCH</span><span class="p">][</span><span class="n">USE</span><span class="p">]:</span>
-            <span class="n">GRID</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_gridsearch_grid</span><span class="p">(</span><span class="o">**</span><span class="n">args</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">USE_GRIDSEARCH</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">PARAMS</span><span class="p">])</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span> <span class="o">=</span> <span class="n">GridSearchCV</span><span class="p">(</span>
-                <span class="n">estimator</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span><span class="p">,</span>
+            <span class="n">GRID</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_gridsearch_grid</span><span class="p">(</span>
+                <span class="n">pipeline</span><span class="p">,</span> <span class="o">**</span><span class="n">args</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">USE_GRIDSEARCH</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">PARAMS</span><span class="p">]</span>
+            <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span> <span class="o">=</span> <span class="n">param_search</span><span class="p">(</span>
+                <span class="n">estimator</span><span class="o">=</span><span class="n">pipeline</span><span class="p">,</span>
                 <span class="n">param_grid</span><span class="o">=</span><span class="n">GRID</span><span class="p">,</span>
                 <span class="n">cv</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">USE_GRIDSEARCH</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">CV</span><span class="p">],</span>
                 <span class="n">n_jobs</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">GRIDSEARCH_WORKERS</span><span class="p">,</span>
@@ -349,10 +355,14 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
                 <span class="n">scoring</span><span class="o">=</span><span class="n">make_scorer</span><span class="p">(</span><span class="n">f1_score</span><span class="p">,</span> <span class="n">average</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">GRID_SCORETYPE</span><span class="p">),</span>
                 <span class="n">return_train_score</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
             <span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span> <span class="o">=</span> <span class="n">pipeline</span>
 
         <span class="k">return</span> <span class="n">args</span></div>
 
-<div class="viewcode-block" id="MLPMultiClass.get_gridsearch_grid"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.get_gridsearch_grid">[docs]</a>    <span class="k">def</span> <span class="nf">get_gridsearch_grid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="n">Any</span><span class="p">]]]:</span>
+<div class="viewcode-block" id="MLPMultiClass.get_gridsearch_grid"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.get_gridsearch_grid">[docs]</a>    <span class="k">def</span> <span class="nf">get_gridsearch_grid</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span> <span class="n">pipeline</span><span class="p">:</span> <span class="n">Pipeline</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="n">Any</span><span class="p">]]]:</span>
         <span class="sd">"""</span>
 <span class="sd">        Gets gridsearch hyperparameters for the model in proper grid params format.</span>
 
@@ -360,11 +370,10 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
 <span class="sd">            ValueError: If a gridsearch parameter doesn't exist in sklearns TFIDF and MLPClassifier modules.</span>
 <span class="sd">        """</span>
         <span class="n">grid_params</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">List</span><span class="p">[</span><span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
+        <span class="n">tfidf_params</span> <span class="o">=</span> <span class="n">pipeline</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">TFIDF</span><span class="p">]</span><span class="o">.</span><span class="n">get_params</span><span class="p">()</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
+        <span class="n">mlp_params</span> <span class="o">=</span> <span class="n">pipeline</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">MLP</span><span class="p">]</span><span class="o">.</span><span class="n">get_params</span><span class="p">()</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
         <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-            <span class="k">if</span> <span class="p">(</span>
-                <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">TFIDF</span><span class="p">]</span><span class="o">.</span><span class="n">get_params</span><span class="p">()</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
-                <span class="ow">and</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">MLP</span><span class="p">]</span><span class="o">.</span><span class="n">get_params</span><span class="p">()</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
-            <span class="p">):</span>
+            <span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">tfidf_params</span> <span class="ow">and</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mlp_params</span><span class="p">:</span>
                 <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
                     <span class="sa">f</span><span class="s2">"Hyperparam defined for gridsearch </span><span class="si">{</span><span class="n">k</span><span class="si">}</span><span class="s2"> doesn't exist,</span><span class="se">\n</span><span class="s2">Refer: https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html</span><span class="se">\n</span><span class="s2">and https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html"</span>
                 <span class="p">)</span>
@@ -463,7 +472,9 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
                 <span class="k">return</span> <span class="kc">False</span>
         <span class="k">return</span> <span class="kc">True</span></div>
 
-<div class="viewcode-block" id="MLPMultiClass.train"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.train">[docs]</a>    <span class="k">def</span> <span class="nf">train</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">training_data</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+<div class="viewcode-block" id="MLPMultiClass.train"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.train">[docs]</a>    <span class="k">def</span> <span class="nf">train</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span> <span class="n">training_data</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">param_search</span><span class="p">:</span> <span class="n">BaseSearchCV</span> <span class="o">=</span> <span class="n">GridSearchCV</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
         <span class="sd">"""</span>
 <span class="sd">        Train an intent-classifier on the provided training data.</span>
 
@@ -478,8 +489,10 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
             <span class="k">return</span>
 
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">valid_mlpmodel</span><span class="p">:</span>
-            <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Model already exists on </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">mlp_model_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
-            <span class="k">return</span>
+            <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">"Model already exists on </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">mlp_model_path</span><span class="si">}</span><span class="s2">"</span>
+            <span class="p">)</span>  <span class="c1"># pragma: no cover</span>
+            <span class="k">return</span>  <span class="c1"># pragma: no cover</span>
 
         <span class="n">skip_labels_filter</span> <span class="o">=</span> <span class="n">training_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">label_column</span><span class="p">]</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">skip_labels</span><span class="p">)</span>
         <span class="n">training_data</span> <span class="o">=</span> <span class="n">training_data</span><span class="p">[</span><span class="o">~</span><span class="n">skip_labels_filter</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
@@ -490,20 +503,16 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
             <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="bp">self</span><span class="o">.</span><span class="n">data_column</span><span class="p">:</span> <span class="n">const</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">label_column</span><span class="p">:</span> <span class="n">const</span><span class="o">.</span><span class="n">LABELS</span><span class="p">},</span>
             <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
         <span class="p">)</span>
-        <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">init_model</span><span class="p">()</span>
+        <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">init_model</span><span class="p">(</span><span class="n">param_search</span><span class="o">=</span><span class="n">param_search</span><span class="p">)</span>
         <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
             <span class="sa">f</span><span class="s2">"Displaying a few samples (this goes into the model):</span><span class="se">\n</span><span class="si">{</span><span class="n">training_data</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">sample_size</span><span class="p">)</span><span class="si">}</span><span class="se">\n</span><span class="s2">Labels: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">labels_num</span><span class="si">}</span><span class="s2">."</span>
         <span class="p">)</span>
+
         <span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">training_data</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">TEXT</span><span class="p">],</span> <span class="n">training_data</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">LABELS</span><span class="p">])</span>
         <span class="n">USE</span> <span class="o">=</span> <span class="s2">"use"</span>
         <span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">USE_GRIDSEARCH</span><span class="p">][</span><span class="n">USE</span><span class="p">]:</span>
             <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-                <span class="s2">"Best gridsearch params found:</span><span class="se">\n</span><span class="s2">"</span>
-                <span class="o">+</span> <span class="nb">str</span><span class="p">(</span>
-                    <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
-                        <span class="nb">str</span><span class="p">(</span><span class="n">items</span><span class="p">)</span> <span class="k">for</span> <span class="n">items</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span><span class="o">.</span><span class="n">best_params_</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
-                    <span class="p">)</span>
-                <span class="p">)</span>
+                <span class="sa">f</span><span class="s2">"Best gridsearch params found:</span><span class="se">\n</span><span class="si">{</span><span class="n">pformat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model_pipeline</span><span class="o">.</span><span class="n">best_params_</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
             <span class="p">)</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span></div>
 
@@ -567,5 +576,7 @@ <h1>Source code for dialogy.plugins.text.classification.mlp</h1><div class="high
     <script src="../../../../../_static/scripts/furo.js"></script>
     <script src="../../../../../_static/clipboard.min.js"></script>
     <script src="../../../../../_static/copybutton.js"></script>
+    <script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
+    <script>mermaid.initialize({startOnLoad:true});</script>
     </body>
 </html>
\ No newline at end of file
diff --git a/docs/_modules/dialogy/plugins/text/classification/retain_intent.html b/docs/_modules/dialogy/plugins/text/classification/retain_intent.html
index 5acc39d9..dae86896 100644
--- a/docs/_modules/dialogy/plugins/text/classification/retain_intent.html
+++ b/docs/_modules/dialogy/plugins/text/classification/retain_intent.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../../genindex.html" /><link rel="search" title="Search" href="../../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.classification.retain_intent - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.classification.retain_intent - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -225,10 +225,11 @@ <h1>Source code for dialogy.plugins.text.classification.retain_intent</h1><div c
 <span class="sd">Here, we will track the original intent, the one produced by a classifier.</span>
 <span class="sd">"""</span>
 <span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span>
-<span class="kn">from</span> <span class="nn">dialogy.base</span> <span class="kn">import</span> <span class="n">Output</span><span class="p">,</span> <span class="n">Plugin</span><span class="p">,</span> <span class="n">Guard</span><span class="p">,</span> <span class="n">Input</span>
+
+<span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
+<span class="kn">from</span> <span class="nn">dialogy.base</span> <span class="kn">import</span> <span class="n">Guard</span><span class="p">,</span> <span class="n">Input</span><span class="p">,</span> <span class="n">Output</span><span class="p">,</span> <span class="n">Plugin</span>
 <span class="kn">from</span> <span class="nn">dialogy.base.output</span> <span class="kn">import</span> <span class="n">ORIGINAL_INTENT_TYPE</span>
 <span class="kn">from</span> <span class="nn">dialogy.types</span> <span class="kn">import</span> <span class="n">Intent</span>
-<span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
 
 
 <div class="viewcode-block" id="RetainOriginalIntentPlugin"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.retain_intent.RetainOriginalIntentPlugin">[docs]</a><span class="k">class</span> <span class="nc">RetainOriginalIntentPlugin</span><span class="p">(</span><span class="n">Plugin</span><span class="p">):</span>
@@ -237,22 +238,18 @@ <h1>Source code for dialogy.plugins.text.classification.retain_intent</h1><div c
         <span class="n">replace_output</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
         <span class="n">dest</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"output.original_intent"</span><span class="p">,</span>
         <span class="n">guards</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Guard</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-        <span class="n">debug</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="n">debug</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
     <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">replace_output</span><span class="o">=</span><span class="n">replace_output</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span> <span class="n">guards</span><span class="o">=</span><span class="n">guards</span><span class="p">,</span> <span class="n">debug</span><span class="o">=</span><span class="n">debug</span><span class="p">)</span>
+        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
+            <span class="n">replace_output</span><span class="o">=</span><span class="n">replace_output</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="n">dest</span><span class="p">,</span> <span class="n">guards</span><span class="o">=</span><span class="n">guards</span><span class="p">,</span> <span class="n">debug</span><span class="o">=</span><span class="n">debug</span>
+        <span class="p">)</span>
 
 <div class="viewcode-block" id="RetainOriginalIntentPlugin.retain"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.retain_intent.RetainOriginalIntentPlugin.retain">[docs]</a>    <span class="k">def</span> <span class="nf">retain</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">intents</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Intent</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">ORIGINAL_INTENT_TYPE</span><span class="p">:</span>
         <span class="k">if</span> <span class="ow">not</span> <span class="n">intents</span><span class="p">:</span>
             <span class="k">return</span> <span class="p">{}</span>
 
-        <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">intents</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-            <span class="k">return</span> <span class="p">{}</span>
-
         <span class="n">intent</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="o">=</span> <span class="n">intents</span>
-        <span class="k">return</span> <span class="p">{</span>
-            <span class="n">const</span><span class="o">.</span><span class="n">NAME</span><span class="p">:</span> <span class="n">intent</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-            <span class="n">const</span><span class="o">.</span><span class="n">SCORE</span><span class="p">:</span> <span class="n">intent</span><span class="o">.</span><span class="n">score</span>
-        <span class="p">}</span></div>
+        <span class="k">return</span> <span class="p">{</span><span class="n">const</span><span class="o">.</span><span class="n">NAME</span><span class="p">:</span> <span class="n">intent</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">const</span><span class="o">.</span><span class="n">SCORE</span><span class="p">:</span> <span class="n">intent</span><span class="o">.</span><span class="n">score</span><span class="p">}</span></div>
 
 <div class="viewcode-block" id="RetainOriginalIntentPlugin.utility"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.retain_intent.RetainOriginalIntentPlugin.utility">[docs]</a>    <span class="k">def</span> <span class="nf">utility</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="n">Input</span><span class="p">,</span> <span class="n">output</span><span class="p">:</span> <span class="n">Output</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">ORIGINAL_INTENT_TYPE</span><span class="p">:</span>
         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">retain</span><span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">intents</span><span class="p">)</span></div></div>
diff --git a/docs/_modules/dialogy/plugins/text/classification/xlmr.html b/docs/_modules/dialogy/plugins/text/classification/xlmr.html
index 9074df0c..dcdf32e0 100644
--- a/docs/_modules/dialogy/plugins/text/classification/xlmr.html
+++ b/docs/_modules/dialogy/plugins/text/classification/xlmr.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../../genindex.html" /><link rel="search" title="Search" href="../../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.classification.xlmr - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.classification.xlmr - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -236,7 +236,7 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
 <span class="kn">import</span> <span class="nn">dialogy.constants</span> <span class="k">as</span> <span class="nn">const</span>
 <span class="kn">from</span> <span class="nn">dialogy.base</span> <span class="kn">import</span> <span class="n">Guard</span><span class="p">,</span> <span class="n">Input</span><span class="p">,</span> <span class="n">Output</span><span class="p">,</span> <span class="n">Plugin</span>
 <span class="kn">from</span> <span class="nn">dialogy.types</span> <span class="kn">import</span> <span class="n">Intent</span>
-<span class="kn">from</span> <span class="nn">dialogy.utils</span> <span class="kn">import</span> <span class="n">load_file</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">save_file</span><span class="p">,</span> <span class="n">read_from_json</span>
+<span class="kn">from</span> <span class="nn">dialogy.utils</span> <span class="kn">import</span> <span class="n">load_file</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">read_from_json</span><span class="p">,</span> <span class="n">save_file</span>
 
 
 <div class="viewcode-block" id="XLMRMultiClass"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.xlmr.XLMRMultiClass">[docs]</a><span class="k">class</span> <span class="nc">XLMRMultiClass</span><span class="p">(</span><span class="n">Plugin</span><span class="p">):</span>
@@ -289,12 +289,13 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
         <span class="bp">self</span><span class="o">.</span><span class="n">labelencoder_file_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">model_dir</span><span class="p">,</span> <span class="n">const</span><span class="o">.</span><span class="n">LABELENCODER_FILE</span>
         <span class="p">)</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">ts_parameter</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="n">read_from_json</span><span class="p">(</span>
-            <span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">TS_PARAMETER</span><span class="p">],</span>
-            <span class="n">model_dir</span><span class="p">,</span>
-            <span class="n">const</span><span class="o">.</span><span class="n">CALIBRATION_CONFIG_FILE</span>
-        <span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">TS_PARAMETER</span><span class="p">)</span> <span class="ow">or</span> <span class="mf">1.0</span>
-        
+        <span class="bp">self</span><span class="o">.</span><span class="n">ts_parameter</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="p">(</span>
+            <span class="n">read_from_json</span><span class="p">(</span>
+                <span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">TS_PARAMETER</span><span class="p">],</span> <span class="n">model_dir</span><span class="p">,</span> <span class="n">const</span><span class="o">.</span><span class="n">CALIBRATION_CONFIG_FILE</span>
+            <span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">TS_PARAMETER</span><span class="p">)</span>
+            <span class="ow">or</span> <span class="mf">1.0</span>
+        <span class="p">)</span>
+
         <span class="bp">self</span><span class="o">.</span><span class="n">threshold</span> <span class="o">=</span> <span class="n">threshold</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">skip_labels</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">skip_labels</span> <span class="ow">or</span> <span class="nb">set</span><span class="p">())</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">purpose</span> <span class="o">=</span> <span class="n">purpose</span>
@@ -315,7 +316,7 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
                 <span class="bp">self</span><span class="o">.</span><span class="n">init_model</span><span class="p">()</span>
         <span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-                <span class="sa">f</span><span class="s2">"Plugin </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> Failed to load labelencoder from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">labelencoder_file_path</span><span class="si">}</span><span class="s2">. "</span>
+                <span class="sa">f</span><span class="s2">"Plugin </span><span class="si">{</span><span class="bp">self</span><span class="si">}</span><span class="s2"> Failed to load labelencoder from </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">labelencoder_file_path</span><span class="si">}</span><span class="s2">. "</span>
                 <span class="s2">"Ignore this message if you are training but if you are using this in production or testing, then this is serious!"</span>
             <span class="p">)</span>
 
@@ -334,7 +335,8 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
             <span class="n">model_dir</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_dir</span>
         <span class="k">if</span> <span class="ow">not</span> <span class="n">label_count</span><span class="p">:</span>
             <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-                <span class="sa">f</span><span class="s2">"Plugin </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> needs either the training data or an existing labelencoder to initialize."</span>
+                <span class="sa">f</span><span class="s2">"Plugin </span><span class="si">{</span><span class="bp">self</span><span class="si">}</span><span class="s2"> needs either the training data "</span>
+                <span class="s2">"or an existing labelencoder to initialize."</span>
             <span class="p">)</span>
         <span class="n">args</span> <span class="o">=</span> <span class="p">(</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">args_map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">purpose</span><span class="p">]</span>
@@ -365,13 +367,17 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
     <span class="k">def</span> <span class="nf">valid_labelencoder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
         <span class="k">return</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">labelencoder</span><span class="p">,</span> <span class="s2">"classes_"</span><span class="p">)</span>
 
-<div class="viewcode-block" id="XLMRMultiClass.inference"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.xlmr.XLMRMultiClass.inference">[docs]</a>    <span class="k">def</span> <span class="nf">inference</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Intent</span><span class="p">]:</span>
+<div class="viewcode-block" id="XLMRMultiClass.inference"><a class="viewcode-back" href="../../../../../source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.xlmr.XLMRMultiClass.inference">[docs]</a>    <span class="k">def</span> <span class="nf">inference</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]],</span> <span class="n">state</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Intent</span><span class="p">]:</span>
         <span class="sd">"""</span>
 <span class="sd">        Predict the intent of a list of texts.</span>
 <span class="sd">        If the model has been trained using the state features, it expects the text to also be appended with the state token else the predictions would be spurious.</span>
 
 <span class="sd">        :param texts: A list of strings, derived from ASR transcripts.</span>
+<span class="sd">        :param state: A list of states, mapped to the ASR transcripts.</span>
 <span class="sd">        :type texts: List[str]</span>
+<span class="sd">        :type state: List[str]</span>
 <span class="sd">        :raises AttributeError: In case the labelencoder is not available.</span>
 <span class="sd">        :return: A list of intents corresponding to texts.</span>
 <span class="sd">        :rtype: List[Intent]</span>
@@ -385,25 +391,23 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No model found for plugin </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">!"</span><span class="p">)</span>
             <span class="k">return</span> <span class="p">[</span><span class="n">fallback_output</span><span class="p">]</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_state</span><span class="p">:</span>
-            <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-                <span class="k">if</span> <span class="s2">"&lt;st&gt;"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
-                    <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-                        <span class="sa">f</span><span class="s2">"use_state = True but </span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2"> doesn't contain &lt;st&gt; &lt;/st&gt; tags, </span><span class="se">\</span>
-<span class="s2">                        which means that training data is different from this data. This can lead to anomalous results"</span>
-                    <span class="p">)</span>
-                    <span class="k">return</span> <span class="p">[</span><span class="n">fallback_output</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_state</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">state</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">"Plugin </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> requires state to be passed to the model."</span>
+            <span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_state</span> <span class="ow">and</span> <span class="n">state</span><span class="p">:</span>
+            <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">texts</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
+            <span class="n">texts</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2"> &lt;s&gt; </span><span class="si">{</span><span class="n">state</span><span class="si">}</span><span class="s2"> &lt;/s&gt;"</span> <span class="k">for</span> <span class="n">state</span><span class="p">,</span> <span class="n">text</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">state</span><span class="p">,</span> <span class="n">texts</span><span class="p">)]</span>
         <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">valid_labelencoder</span><span class="p">:</span>
             <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span>
                 <span class="s2">"Seems like you forgot to "</span>
                 <span class="sa">f</span><span class="s2">"save the </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> plugin."</span>
             <span class="p">)</span>
-
         <span class="n">predictions</span><span class="p">,</span> <span class="n">logits</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">texts</span><span class="p">)</span>
         <span class="k">if</span> <span class="ow">not</span> <span class="n">predictions</span><span class="p">:</span>
             <span class="k">return</span> <span class="p">[</span><span class="n">fallback_output</span><span class="p">]</span>
 
-        
         <span class="n">logits</span> <span class="o">=</span> <span class="n">logits</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">ts_parameter</span>
         <span class="n">confidence_scores</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">logit</span><span class="p">)</span> <span class="o">/</span> <span class="nb">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">logit</span><span class="p">))</span> <span class="k">for</span> <span class="n">logit</span> <span class="ow">in</span> <span class="n">logits</span><span class="p">]</span>
         <span class="n">intents_confidence_order</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argsort</span><span class="p">(</span><span class="n">confidence_scores</span><span class="p">)[</span><span class="mi">0</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
@@ -415,12 +419,12 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
         <span class="p">]</span>
 
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_calibration</span><span class="p">:</span>
-            <span class="n">ordered_confidence_scores</span> <span class="o">=</span> <span class="p">[</span><span class="n">logits</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">idx</span><span class="p">]</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">argsort</span><span class="p">(</span><span class="n">logits</span><span class="p">)[</span><span class="mi">0</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="c1"># ordered logits for calibration</span>
+            <span class="n">ordered_confidence_scores</span> <span class="o">=</span> <span class="p">[</span>
+                <span class="n">logits</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">idx</span><span class="p">]</span> <span class="k">for</span> <span class="n">idx</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">argsort</span><span class="p">(</span><span class="n">logits</span><span class="p">)[</span><span class="mi">0</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+            <span class="p">]</span>  <span class="c1"># ordered logits for calibration</span>
 
         <span class="k">return</span> <span class="p">[</span>
-            <span class="n">Intent</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">intent</span><span class="p">,</span> <span class="n">score</span><span class="o">=</span><span class="nb">round</span><span class="p">(</span><span class="n">score</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">round</span><span class="p">))</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-                <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
-            <span class="p">)</span>
+            <span class="n">Intent</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">intent</span><span class="p">,</span> <span class="n">score</span><span class="o">=</span><span class="nb">round</span><span class="p">(</span><span class="n">score</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">round</span><span class="p">))</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
             <span class="k">for</span> <span class="n">intent</span><span class="p">,</span> <span class="n">score</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">predicted_intents</span><span class="p">,</span> <span class="n">ordered_confidence_scores</span><span class="p">)</span>
         <span class="p">]</span></div>
 
@@ -465,6 +469,7 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
         <span class="n">training_data</span> <span class="o">=</span> <span class="n">training_data</span><span class="p">[</span><span class="o">~</span><span class="n">skip_labels_filter</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
 
         <span class="n">encoder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">labelencoder</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">training_data</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">label_column</span><span class="p">])</span>
+
         <span class="n">sample_size</span> <span class="o">=</span> <span class="mi">5</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">training_data</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">5</span> <span class="k">else</span> <span class="nb">len</span><span class="p">(</span><span class="n">training_data</span><span class="p">)</span>
         <span class="n">training_data</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
             <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="bp">self</span><span class="o">.</span><span class="n">data_column</span><span class="p">:</span> <span class="n">const</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">label_column</span><span class="p">:</span> <span class="n">const</span><span class="o">.</span><span class="n">LABELS</span><span class="p">},</span>
@@ -475,7 +480,7 @@ <h1>Source code for dialogy.plugins.text.classification.xlmr</h1><div class="hig
         <span class="p">)</span>
         <span class="c1"># Add state as an additonal field to text</span>
         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">use_state</span><span class="p">:</span>
-            <span class="n">training_data</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">TEXT</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">"&lt;st&gt; "</span> <span class="o">+</span> <span class="n">training_data</span><span class="p">[</span><span class="s2">"state"</span><span class="p">]</span> <span class="o">+</span> <span class="s2">" &lt;/st&gt;"</span>
+            <span class="n">training_data</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">TEXT</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">"&lt;s&gt; "</span> <span class="o">+</span> <span class="n">training_data</span><span class="p">[</span><span class="s2">"state"</span><span class="p">]</span> <span class="o">+</span> <span class="s2">" &lt;/s&gt;"</span>
         <span class="n">training_data</span> <span class="o">=</span> <span class="n">training_data</span><span class="p">[[</span><span class="n">const</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span> <span class="n">const</span><span class="o">.</span><span class="n">LABELS</span><span class="p">]]</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">init_model</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">encoder</span><span class="o">.</span><span class="n">classes_</span><span class="p">))</span>
         <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
diff --git a/docs/_modules/dialogy/plugins/text/duckling_plugin.html b/docs/_modules/dialogy/plugins/text/duckling_plugin.html
index 98507625..0670904a 100644
--- a/docs/_modules/dialogy/plugins/text/duckling_plugin.html
+++ b/docs/_modules/dialogy/plugins/text/duckling_plugin.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.duckling_plugin - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.duckling_plugin - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -665,7 +665,7 @@ <h1>Source code for dialogy.plugins.text.duckling_plugin</h1><div class="highlig
 <span class="kn">from</span> <span class="nn">dialogy.base</span> <span class="kn">import</span> <span class="n">Guard</span><span class="p">,</span> <span class="n">Input</span><span class="p">,</span> <span class="n">Output</span><span class="p">,</span> <span class="n">Plugin</span>
 <span class="kn">from</span> <span class="nn">dialogy.base.entity_extractor</span> <span class="kn">import</span> <span class="n">EntityScoringMixin</span>
 <span class="kn">from</span> <span class="nn">dialogy.types</span> <span class="kn">import</span> <span class="n">BaseEntity</span><span class="p">,</span> <span class="n">Intent</span>
-<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">deserialize_duckling_entity</span>
+<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">EntityDeserializer</span>
 <span class="kn">from</span> <span class="nn">dialogy.utils</span> <span class="kn">import</span> <span class="n">dt2timestamp</span><span class="p">,</span> <span class="n">lang_detect_from_text</span><span class="p">,</span> <span class="n">logger</span>
 
 
@@ -725,6 +725,7 @@ <h1>Source code for dialogy.plugins.text.duckling_plugin</h1><div class="highlig
         <span class="n">timeout</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">,</span>
         <span class="n">url</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"http://0.0.0.0:8000/parse"</span><span class="p">,</span>
         <span class="n">locale</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"en_IN"</span><span class="p">,</span>
+        <span class="n">constraints</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
         <span class="n">temporal_intents</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
         <span class="n">dest</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
         <span class="n">guards</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Guard</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
@@ -759,6 +760,7 @@ <h1>Source code for dialogy.plugins.text.duckling_plugin</h1><div class="highlig
         <span class="bp">self</span><span class="o">.</span><span class="n">reference_time_column</span> <span class="o">=</span> <span class="n">reference_time_column</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">datetime_filters</span> <span class="o">=</span> <span class="n">datetime_filters</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">activate_latent_entities</span> <span class="o">=</span> <span class="n">activate_latent_entities</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">constraints</span> <span class="o">=</span> <span class="n">constraints</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">Session</span><span class="p">()</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">mount</span><span class="p">(</span>
             <span class="s2">"http://"</span><span class="p">,</span>
@@ -872,6 +874,9 @@ <h1>Source code for dialogy.plugins.text.duckling_plugin</h1><div class="highlig
         <span class="k">else</span><span class="p">:</span>
             <span class="n">operation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_operator</span><span class="p">(</span><span class="n">filter_type</span><span class="p">)</span>
 
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">reference_time</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">entities</span>  <span class="c1"># pragma: no cover</span>
+
         <span class="n">time_entities</span><span class="p">,</span> <span class="n">other_entities</span> <span class="o">=</span> <span class="n">py_</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span>
             <span class="n">entities</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">entity</span><span class="p">:</span> <span class="n">entity</span><span class="o">.</span><span class="n">dim</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">TIME</span>
         <span class="p">)</span>
@@ -924,12 +929,13 @@ <h1>Source code for dialogy.plugins.text.duckling_plugin</h1><div class="highlig
 <span class="sd">        """</span>
         <span class="n">deserialized_entities</span> <span class="o">=</span> <span class="p">[]</span>
         <span class="k">for</span> <span class="n">entity_json</span> <span class="ow">in</span> <span class="n">entities_json</span><span class="p">:</span>
-            <span class="n">entity</span> <span class="o">=</span> <span class="n">deserialize_duckling_entity</span><span class="p">(</span>
+            <span class="n">entity</span> <span class="o">=</span> <span class="n">EntityDeserializer</span><span class="o">.</span><span class="n">deserialize_duckling</span><span class="p">(</span>
                 <span class="n">entity_json</span><span class="p">,</span>
                 <span class="n">alternative_index</span><span class="p">,</span>
                 <span class="n">reference_time</span><span class="o">=</span><span class="n">reference_time</span><span class="p">,</span>
                 <span class="n">timezone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">timezone</span><span class="p">,</span>
                 <span class="n">duration_cast_operator</span><span class="o">=</span><span class="n">duration_cast_operator</span><span class="p">,</span>
+                <span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">constraints</span><span class="p">,</span>
             <span class="p">)</span>
             <span class="n">entity</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
             <span class="n">deserialized_entities</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">entity</span><span class="p">)</span>
diff --git a/docs/_modules/dialogy/plugins/text/list_search_plugin.html b/docs/_modules/dialogy/plugins/text/list_search_plugin.html
index 14aa57d6..32f60eb3 100644
--- a/docs/_modules/dialogy/plugins/text/list_search_plugin.html
+++ b/docs/_modules/dialogy/plugins/text/list_search_plugin.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.list_search_plugin - dialogy 0.9.1 documentation</title>
+        <title>dialogy.plugins.text.list_search_plugin - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.1 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.1 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -160,11 +160,13 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.input.html">Input</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.output.html">Output</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.workflow.html">Workflow</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.plugin.html">Base Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.plugin.html">Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.base_entity.html">Entity</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Types</span></p>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.keyword.html">Pattern Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.amount_of_money.html">Currency Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.credit_card_number.html">Credit Card Number Entity</a></li>
@@ -173,7 +175,6 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time.html">Time Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time_interval.html">Time Interval Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.duration.html">Duration Entity</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Plugins</span></p>
 <ul>
@@ -185,6 +186,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.list_search_plugin.html">Fuzzy Entity Search</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.entity_extractor.html">Entity Scoring</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.lb_plugin.html">Lower Bound Duckling Entities</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.combine_date_time.html">Combine DateTime Over Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Misc</span></p>
 <ul>
@@ -231,6 +233,7 @@ <h1>Source code for dialogy.plugins.text.list_search_plugin</h1><div class="high
 
 <span class="kn">import</span> <span class="nn">stanza</span>
 <span class="kn">from</span> <span class="nn">loguru</span> <span class="kn">import</span> <span class="n">logger</span>
+<span class="kn">from</span> <span class="nn">stanza.models.common.doc</span> <span class="kn">import</span> <span class="n">Document</span>
 <span class="kn">from</span> <span class="nn">thefuzz</span> <span class="kn">import</span> <span class="n">fuzz</span>
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
@@ -359,11 +362,14 @@ <h1>Source code for dialogy.plugins.text.list_search_plugin</h1><div class="high
         <span class="bp">self</span><span class="p">,</span>
         <span class="n">query</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
         <span class="n">entity_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span>
-        <span class="n">entity_patterns</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">""</span><span class="p">],</span>
-        <span class="n">match_dict</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span>
+        <span class="n">entity_patterns</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">match_dict</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
     <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Text</span><span class="p">,</span> <span class="n">Label</span><span class="p">,</span> <span class="n">Value</span><span class="p">,</span> <span class="n">Span</span><span class="p">,</span> <span class="n">Score</span><span class="p">]:</span>
+        <span class="n">match_dict</span>
         <span class="n">max_length</span> <span class="o">=</span> <span class="mi">0</span>
         <span class="n">final_match</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="n">entity_patterns</span> <span class="o">=</span> <span class="n">entity_patterns</span> <span class="ow">or</span> <span class="p">[]</span>
+        <span class="n">match_dict</span> <span class="o">=</span> <span class="n">match_dict</span> <span class="ow">or</span> <span class="p">{}</span>
 
         <span class="k">for</span> <span class="n">pattern</span> <span class="ow">in</span> <span class="n">entity_patterns</span><span class="p">:</span>
             <span class="n">result</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
@@ -379,31 +385,38 @@ <h1>Source code for dialogy.plugins.text.list_search_plugin</h1><div class="high
             <span class="k">return</span> <span class="p">(</span><span class="n">match_text</span><span class="p">,</span> <span class="n">entity_type</span><span class="p">,</span> <span class="n">final_match</span><span class="p">,</span> <span class="n">match_span</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span>
         <span class="k">return</span> <span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="n">entity_type</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">)</span></div>
 
+<div class="viewcode-block" id="ListSearchPlugin.get_words_from_nlp"><a class="viewcode-back" href="../../../../source/dialogy.plugins.text.list_search_plugin.html#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.get_words_from_nlp">[docs]</a>    <span class="k">def</span> <span class="nf">get_words_from_nlp</span><span class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span> <span class="n">nlp</span><span class="p">:</span> <span class="n">stanza</span><span class="o">.</span><span class="n">Pipeline</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="nb">str</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]:</span>
+        <span class="n">document</span><span class="p">:</span> <span class="n">Document</span> <span class="o">=</span> <span class="n">nlp</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
+        <span class="n">document_json</span> <span class="o">=</span> <span class="n">document</span><span class="o">.</span><span class="n">to_dict</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">document_json</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></div>
+
 <div class="viewcode-block" id="ListSearchPlugin.dp_search"><a class="viewcode-back" href="../../../../source/dialogy.plugins.text.list_search_plugin.html#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.dp_search">[docs]</a>    <span class="k">def</span> <span class="nf">dp_search</span><span class="p">(</span>
         <span class="bp">self</span><span class="p">,</span>
         <span class="n">query</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-        <span class="n">nlp</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
+        <span class="n">nlp</span><span class="p">:</span> <span class="n">stanza</span><span class="o">.</span><span class="n">Pipeline</span><span class="p">,</span>
         <span class="n">entity_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span>
-        <span class="n">entity_patterns</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">""</span><span class="p">],</span>
-        <span class="n">match_dict</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span>
+        <span class="n">entity_patterns</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">match_dict</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="n">Any</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
     <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">Text</span><span class="p">,</span> <span class="n">Label</span><span class="p">,</span> <span class="n">Value</span><span class="p">,</span> <span class="n">Span</span><span class="p">,</span> <span class="n">Score</span><span class="p">]:</span>
-
-        <span class="n">sentence</span> <span class="o">=</span> <span class="n">nlp</span><span class="p">(</span><span class="n">query</span><span class="p">)</span><span class="o">.</span><span class="n">sentences</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="n">entity_patterns</span> <span class="o">=</span> <span class="n">entity_patterns</span> <span class="ow">or</span> <span class="p">[]</span>
+        <span class="n">match_dict</span> <span class="o">=</span> <span class="n">match_dict</span> <span class="ow">or</span> <span class="p">{}</span>
+        <span class="n">words</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_words_from_nlp</span><span class="p">(</span><span class="n">nlp</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
         <span class="n">value</span> <span class="o">=</span> <span class="s2">""</span>
         <span class="n">pos_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"PROPN"</span><span class="p">,</span> <span class="s2">"NOUN"</span><span class="p">,</span> <span class="s2">"ADP"</span><span class="p">]</span>
         <span class="n">result_dict</span> <span class="o">=</span> <span class="p">{}</span>
-        <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">sentence</span><span class="o">.</span><span class="n">words</span><span class="p">:</span>
-            <span class="k">if</span> <span class="n">word</span><span class="o">.</span><span class="n">upos</span> <span class="ow">in</span> <span class="n">pos_tags</span><span class="p">:</span>
+        <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">words</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">word</span><span class="p">[</span><span class="s2">"upos"</span><span class="p">]</span> <span class="ow">in</span> <span class="n">pos_tags</span><span class="p">:</span>
                 <span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s2">""</span><span class="p">:</span>
-                    <span class="n">span_start</span> <span class="o">=</span> <span class="n">word</span><span class="o">.</span><span class="n">start_char</span>
-                <span class="n">span_end</span> <span class="o">=</span> <span class="n">word</span><span class="o">.</span><span class="n">end_char</span>
+                    <span class="n">span_start</span> <span class="o">=</span> <span class="n">word</span><span class="p">[</span><span class="s2">"start_char"</span><span class="p">]</span>
+                <span class="n">span_end</span> <span class="o">=</span> <span class="n">word</span><span class="p">[</span><span class="s2">"end_char"</span><span class="p">]</span>
 
                 <span class="sd">"""</span>
 <span class="sd">                joining individual tokens that together are the real entity,</span>
 <span class="sd">                Since we are dealing with Multi-Word entities here</span>
-
 <span class="sd">                """</span>
-                <span class="n">value</span> <span class="o">=</span> <span class="n">value</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">word</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> <span class="o">+</span> <span class="s2">" "</span>
+                <span class="n">value</span> <span class="o">=</span> <span class="n">value</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">word</span><span class="p">[</span><span class="s2">"text"</span><span class="p">])</span> <span class="o">+</span> <span class="s2">" "</span>
         <span class="k">if</span> <span class="n">value</span> <span class="o">!=</span> <span class="s2">""</span><span class="p">:</span>
             <span class="k">for</span> <span class="n">pattern</span> <span class="ow">in</span> <span class="n">entity_patterns</span><span class="p">:</span>
                 <span class="n">val</span> <span class="o">=</span> <span class="n">fuzz</span><span class="o">.</span><span class="n">ratio</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="o">/</span> <span class="mi">100</span>
@@ -541,5 +554,7 @@ <h1>Source code for dialogy.plugins.text.list_search_plugin</h1><div class="high
     <script src="../../../../_static/scripts/furo.js"></script>
     <script src="../../../../_static/clipboard.min.js"></script>
     <script src="../../../../_static/copybutton.js"></script>
+    <script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
+    <script>mermaid.initialize({startOnLoad:true});</script>
     </body>
 </html>
\ No newline at end of file
diff --git a/docs/_modules/dialogy/types/entity/amount_of_money.html b/docs/_modules/dialogy/types/entity/amount_of_money.html
index 9a3a1673..785ffc06 100644
--- a/docs/_modules/dialogy/types/entity/amount_of_money.html
+++ b/docs/_modules/dialogy/types/entity/amount_of_money.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.amount_of_money - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.amount_of_money - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -233,9 +233,11 @@ <h1>Source code for dialogy.types.entity.amount_of_money</h1><div class="highlig
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.base_entity</span> <span class="kn">import</span> <span class="n">BaseEntity</span>
+<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">EntityDeserializer</span>
 
 
-<div class="viewcode-block" id="CurrencyEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.amount_of_money.html#dialogy.types.entity.amount_of_money.CurrencyEntity">[docs]</a><span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
+<div class="viewcode-block" id="CurrencyEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.amount_of_money.html#dialogy.types.entity.amount_of_money.CurrencyEntity">[docs]</a><span class="nd">@EntityDeserializer</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">AMOUNT_OF_MONEY</span><span class="p">)</span>
+<span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
 <span class="k">class</span> <span class="nc">CurrencyEntity</span><span class="p">(</span><span class="n">BaseEntity</span><span class="p">):</span>
     <span class="sd">"""</span>
 <span class="sd">    Numerical Entity Type</span>
@@ -253,7 +255,7 @@ <h1>Source code for dialogy.types.entity.amount_of_money</h1><div class="highlig
 
     <span class="n">unit</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">validator</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">instance_of</span><span class="p">(</span><span class="nb">str</span><span class="p">),</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
     <span class="n">entity_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span>
-        <span class="n">default</span><span class="o">=</span><span class="s2">"amount-of-money"</span><span class="p">,</span>
+        <span class="n">default</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">AMOUNT_OF_MONEY</span><span class="p">,</span>
         <span class="n">validator</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">instance_of</span><span class="p">(</span><span class="nb">str</span><span class="p">),</span>
         <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
     <span class="p">)</span>
@@ -273,7 +275,9 @@ <h1>Source code for dialogy.types.entity.amount_of_money</h1><div class="highlig
         <span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">unit</span><span class="si">}{</span><span class="n">value</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2">"</span></div>
 
 <div class="viewcode-block" id="CurrencyEntity.from_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.amount_of_money.html#dialogy.types.entity.amount_of_money.CurrencyEntity.from_duckling">[docs]</a>    <span class="nd">@classmethod</span>
-    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">CurrencyEntity</span><span class="p">:</span>
+    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span>
+        <span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">CurrencyEntity</span><span class="p">:</span>
         <span class="n">value</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span>
         <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span>
             <span class="nb">range</span><span class="o">=</span><span class="p">{</span><span class="n">const</span><span class="o">.</span><span class="n">START</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">START</span><span class="p">],</span> <span class="n">const</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">END</span><span class="p">]},</span>
diff --git a/docs/_modules/dialogy/types/entity/base_entity.html b/docs/_modules/dialogy/types/entity/base_entity.html
index 2849a565..bc8a2a45 100644
--- a/docs/_modules/dialogy/types/entity/base_entity.html
+++ b/docs/_modules/dialogy/types/entity/base_entity.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.base_entity - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.base_entity - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -464,7 +464,13 @@ <h1>Source code for dialogy.types.entity.base_entity</h1><div class="highlight">
                 <span class="nb">object</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="n">reference</span><span class="p">,</span> <span class="n">const</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
                 <span class="nb">object</span><span class="o">.</span><span class="fm">__setattr__</span><span class="p">(</span><span class="n">reference</span><span class="p">,</span> <span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
             <span class="k">return</span> <span class="n">attr</span><span class="o">.</span><span class="n">evolve</span><span class="p">(</span><span class="n">reference</span><span class="p">,</span> <span class="o">**</span><span class="n">dict_</span><span class="p">)</span>
-        <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">**</span><span class="n">dict_</span><span class="p">)</span></div></div>
+        <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">**</span><span class="n">dict_</span><span class="p">)</span></div>
+
+<div class="viewcode-block" id="BaseEntity.from_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.base_entity.html#dialogy.types.entity.base_entity.BaseEntity.from_duckling">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span>
+        <span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BaseEntity</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span>  <span class="c1"># pragma: no cover</span></div></div>
 
 
 <span class="c1"># = entity_synthesis =</span>
diff --git a/docs/_modules/dialogy/types/entity/credit_card_number.html b/docs/_modules/dialogy/types/entity/credit_card_number.html
index 6fbaf70f..a96caaad 100644
--- a/docs/_modules/dialogy/types/entity/credit_card_number.html
+++ b/docs/_modules/dialogy/types/entity/credit_card_number.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.credit_card_number - dialogy 0.9.1 documentation</title>
+        <title>dialogy.types.entity.credit_card_number - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.1 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.1 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -160,11 +160,13 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.input.html">Input</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.output.html">Output</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.workflow.html">Workflow</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.plugin.html">Base Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.plugin.html">Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.base_entity.html">Entity</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Types</span></p>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.keyword.html">Pattern Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.amount_of_money.html">Currency Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.credit_card_number.html">Credit Card Number Entity</a></li>
@@ -173,7 +175,6 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time.html">Time Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time_interval.html">Time Interval Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.duration.html">Duration Entity</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Plugins</span></p>
 <ul>
@@ -185,6 +186,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.list_search_plugin.html">Fuzzy Entity Search</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.entity_extractor.html">Entity Scoring</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.lb_plugin.html">Lower Bound Duckling Entities</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.combine_date_time.html">Combine DateTime Over Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Misc</span></p>
 <ul>
@@ -273,12 +275,14 @@ <h1>Source code for dialogy.types.entity.credit_card_number</h1><div class="high
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
 <span class="kn">from</span> <span class="nn">dialogy.types</span> <span class="kn">import</span> <span class="n">BaseEntity</span>
+<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">EntityDeserializer</span>
 
 
-<div class="viewcode-block" id="CreditCardNumberEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.credit_card_number.html#dialogy.types.entity.credit_card_number.CreditCardNumberEntity">[docs]</a><span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
+<div class="viewcode-block" id="CreditCardNumberEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.credit_card_number.html#dialogy.types.entity.credit_card_number.CreditCardNumberEntity">[docs]</a><span class="nd">@EntityDeserializer</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">CREDIT_CARD_NUMBER</span><span class="p">)</span>
+<span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
 <span class="k">class</span> <span class="nc">CreditCardNumberEntity</span><span class="p">(</span><span class="n">BaseEntity</span><span class="p">):</span>
     <span class="n">entity_type</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span>
-        <span class="nb">repr</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"credit-card-number"</span><span class="p">,</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span>
+        <span class="nb">repr</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">CREDIT_CARD_NUMBER</span><span class="p">,</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span>
     <span class="p">)</span>
     <span class="n">issuer</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">validator</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">instance_of</span><span class="p">(</span><span class="nb">str</span><span class="p">),</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
     <span class="n">value</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
@@ -288,7 +292,7 @@ <h1>Source code for dialogy.types.entity.credit_card_number</h1><div class="high
 
 <div class="viewcode-block" id="CreditCardNumberEntity.from_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.credit_card_number.html#dialogy.types.entity.credit_card_number.CreditCardNumberEntity.from_duckling">[docs]</a>    <span class="nd">@classmethod</span>
     <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span>
-        <span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span>
+        <span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span>
     <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">CreditCardNumberEntity</span><span class="p">:</span>
         <span class="n">value</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span>
         <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span>
@@ -331,5 +335,7 @@ <h1>Source code for dialogy.types.entity.credit_card_number</h1><div class="high
     <script src="../../../../_static/scripts/furo.js"></script>
     <script src="../../../../_static/clipboard.min.js"></script>
     <script src="../../../../_static/copybutton.js"></script>
+    <script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
+    <script>mermaid.initialize({startOnLoad:true});</script>
     </body>
 </html>
\ No newline at end of file
diff --git a/docs/_modules/dialogy/types/entity/deserialize.html b/docs/_modules/dialogy/types/entity/deserialize.html
index e2600653..253e7330 100644
--- a/docs/_modules/dialogy/types/entity/deserialize.html
+++ b/docs/_modules/dialogy/types/entity/deserialize.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.deserialize - dialogy 0.9.3 documentation</title>
+        <title>dialogy.types.entity.deserialize - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.3 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.3 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -161,10 +161,12 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.output.html">Output</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.workflow.html">Workflow</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.plugin.html">Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.base_entity.html">Entity</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Types</span></p>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.keyword.html">Pattern Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.amount_of_money.html">Currency Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.credit_card_number.html">Credit Card Number Entity</a></li>
@@ -173,7 +175,6 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time.html">Time Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time_interval.html">Time Interval Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.duration.html">Duration Entity</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Plugins</span></p>
 <ul>
@@ -217,75 +218,86 @@
         </div>
         <article role="main">
           <h1>Source code for dialogy.types.entity.deserialize</h1><div class="highlight"><pre>
-<span></span><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Optional</span>
+<span></span><span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Optional</span>
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
-<span class="kn">from</span> <span class="nn">dialogy.types.entity.amount_of_money</span> <span class="kn">import</span> <span class="n">CurrencyEntity</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.base_entity</span> <span class="kn">import</span> <span class="n">BaseEntity</span>
-<span class="kn">from</span> <span class="nn">dialogy.types.entity.credit_card_number</span> <span class="kn">import</span> <span class="n">CreditCardNumberEntity</span>
-<span class="kn">from</span> <span class="nn">dialogy.types.entity.duration</span> <span class="kn">import</span> <span class="n">DurationEntity</span>
-<span class="kn">from</span> <span class="nn">dialogy.types.entity.numerical</span> <span class="kn">import</span> <span class="n">NumericalEntity</span>
-<span class="kn">from</span> <span class="nn">dialogy.types.entity.people</span> <span class="kn">import</span> <span class="n">PeopleEntity</span>
-<span class="kn">from</span> <span class="nn">dialogy.types.entity.time</span> <span class="kn">import</span> <span class="n">TimeEntity</span>
-<span class="kn">from</span> <span class="nn">dialogy.types.entity.time_interval</span> <span class="kn">import</span> <span class="n">TimeIntervalEntity</span>
 
 
-<div class="viewcode-block" id="deserialize_duckling_entity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.deserialize_duckling_entity">[docs]</a><span class="k">def</span> <span class="nf">deserialize_duckling_entity</span><span class="p">(</span>
-    <span class="n">duckling_entity_dict</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
-    <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
-    <span class="n">reference_time</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-    <span class="n">timezone</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"UTC"</span><span class="p">,</span>
-    <span class="n">duration_cast_operator</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BaseEntity</span><span class="p">:</span>
-    <span class="n">keys</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
-    <span class="k">if</span> <span class="n">keys</span> <span class="o">!=</span> <span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_ENTITY_KEYS</span><span class="p">:</span>
-        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-            <span class="sa">f</span><span class="s2">"Invalid Duckling entity keys: </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2"> expected </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_ENTITY_KEYS</span><span class="si">}</span><span class="s2">."</span>
-        <span class="p">)</span>
+<div class="viewcode-block" id="EntityDeserializer"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer">[docs]</a><span class="k">class</span> <span class="nc">EntityDeserializer</span><span class="p">:</span>
+    <span class="n">entitiy_classes</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">BaseEntity</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
 
-    <span class="n">dimension</span> <span class="o">=</span> <span class="n">duckling_entity_dict</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">DIM</span><span class="p">]</span>
-    <span class="k">if</span> <span class="n">dimension</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_DIMS</span><span class="p">:</span>
-        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-            <span class="sa">f</span><span class="s2">"Invalid Duckling dimension: </span><span class="si">{</span><span class="n">dimension</span><span class="si">}</span><span class="s2"> expected </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_DIMS</span><span class="si">}</span><span class="s2">."</span>
-        <span class="p">)</span>
+<div class="viewcode-block" id="EntityDeserializer.register"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.register">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">dim</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Callable</span><span class="p">[[</span><span class="n">Any</span><span class="p">],</span> <span class="n">Any</span><span class="p">]:</span>
+        <span class="nd">@wraps</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span>
+        <span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">entity_class</span><span class="p">:</span> <span class="n">BaseEntity</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BaseEntity</span><span class="p">:</span>
+            <span class="bp">cls</span><span class="o">.</span><span class="n">entitiy_classes</span><span class="p">[</span><span class="n">dim</span><span class="p">]</span> <span class="o">=</span> <span class="n">entity_class</span>
+            <span class="k">return</span> <span class="n">entity_class</span>
 
-    <span class="n">value_keys</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
+        <span class="k">return</span> <span class="n">decorator</span></div>
 
-    <span class="k">if</span> <span class="n">dimension</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">PEOPLE</span><span class="p">:</span>
-        <span class="k">return</span> <span class="n">PeopleEntity</span><span class="o">.</span><span class="n">from_duckling</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">,</span> <span class="n">alternative_index</span><span class="p">)</span>
-
-    <span class="k">elif</span> <span class="n">dimension</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">TIME</span><span class="p">:</span>
-        <span class="k">if</span> <span class="n">value_keys</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_TIME_VALUES_ENTITY_KEYS</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">TimeEntity</span><span class="o">.</span><span class="n">from_duckling</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">,</span> <span class="n">alternative_index</span><span class="p">)</span>
-
-        <span class="k">elif</span> <span class="p">(</span>
-            <span class="n">dimension</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">TIME</span>
-            <span class="ow">and</span> <span class="n">value_keys</span> <span class="ow">in</span> <span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_TIME_INTERVAL_ENTITY_KEYS</span>
-        <span class="p">):</span>
-            <span class="k">return</span> <span class="n">TimeIntervalEntity</span><span class="o">.</span><span class="n">from_duckling</span><span class="p">(</span>
-                <span class="n">duckling_entity_dict</span><span class="p">,</span> <span class="n">alternative_index</span>
+<div class="viewcode-block" id="EntityDeserializer.validate"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.validate">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">validate</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">duckling_entity_dict</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="n">keys</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
+        <span class="k">if</span> <span class="n">keys</span> <span class="o">!=</span> <span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_ENTITY_KEYS</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">"Invalid Duckling entity keys: </span><span class="si">{</span><span class="n">keys</span><span class="si">}</span><span class="s2"> expected </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_ENTITY_KEYS</span><span class="si">}</span><span class="s2">."</span>
             <span class="p">)</span>
 
-        <span class="k">else</span><span class="p">:</span>
+        <span class="n">dimension</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get_dimension</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">dimension</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_DIMS</span><span class="p">:</span>
             <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-                <span class="sa">f</span><span class="s2">"Dimension </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">TIME</span><span class="si">}</span><span class="s2"> recieved invalid keys </span><span class="si">{</span><span class="n">value_keys</span><span class="si">}</span><span class="s2"> expected either </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_TIME_VALUES_ENTITY_KEYS</span><span class="si">}</span><span class="s2"> or </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_TIME_INTERVAL_ENTITY_KEYS</span><span class="si">}</span><span class="s2">."</span>
-            <span class="p">)</span>
+                <span class="sa">f</span><span class="s2">"Invalid Duckling dimension: </span><span class="si">{</span><span class="n">dimension</span><span class="si">}</span><span class="s2"> expected </span><span class="si">{</span><span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_DIMS</span><span class="si">}</span><span class="s2">."</span>
+            <span class="p">)</span></div>
 
-    <span class="k">elif</span> <span class="n">dimension</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">AMOUNT_OF_MONEY</span><span class="p">:</span>
-        <span class="k">return</span> <span class="n">CurrencyEntity</span><span class="o">.</span><span class="n">from_duckling</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">,</span> <span class="n">alternative_index</span><span class="p">)</span>
+<div class="viewcode-block" id="EntityDeserializer.get_keys_in_value_as_str"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.get_keys_in_value_as_str">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">get_keys_in_value_as_str</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+        <span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span></div>
 
-    <span class="k">elif</span> <span class="n">dimension</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">:</span>
-        <span class="k">return</span> <span class="n">NumericalEntity</span><span class="o">.</span><span class="n">from_duckling</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">,</span> <span class="n">alternative_index</span><span class="p">)</span>
+<div class="viewcode-block" id="EntityDeserializer.get_dimension"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.get_dimension">[docs]</a>    <span class="nd">@staticmethod</span>
+    <span class="k">def</span> <span class="nf">get_dimension</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">duckling_entity_dict</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">DIM</span><span class="p">]</span></div>
 
-    <span class="k">elif</span> <span class="n">dimension</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">DURATION</span><span class="p">:</span>
-        <span class="n">entity</span> <span class="o">=</span> <span class="n">DurationEntity</span><span class="o">.</span><span class="n">from_duckling</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">,</span> <span class="n">alternative_index</span><span class="p">)</span>
-        <span class="k">if</span> <span class="n">duration_cast_operator</span> <span class="ow">and</span> <span class="n">reference_time</span><span class="p">:</span>
-            <span class="k">return</span> <span class="n">entity</span><span class="o">.</span><span class="n">as_time</span><span class="p">(</span><span class="n">reference_time</span><span class="p">,</span> <span class="n">timezone</span><span class="p">,</span> <span class="n">duration_cast_operator</span><span class="p">)</span>
-        <span class="k">return</span> <span class="n">entity</span>
-    <span class="k">else</span><span class="p">:</span>  <span class="c1"># dimension == const.CREDIT_CARD_NUMBER:</span>
-        <span class="k">return</span> <span class="n">CreditCardNumberEntity</span><span class="o">.</span><span class="n">from_duckling</span><span class="p">(</span>
-            <span class="n">duckling_entity_dict</span><span class="p">,</span> <span class="n">alternative_index</span>
+<div class="viewcode-block" id="EntityDeserializer.get_entity_class_str"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.get_entity_class_str">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">get_entity_class_str</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">duckling_entity_dict</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+        <span class="k">return</span> <span class="p">(</span>
+            <span class="n">const</span><span class="o">.</span><span class="n">TIME_INTERVAL</span>
+            <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get_keys_in_value_as_str</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">)</span>
+            <span class="ow">in</span> <span class="n">const</span><span class="o">.</span><span class="n">DUCKLING_TIME_INTERVAL_ENTITY_KEYS</span>
+            <span class="k">else</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get_dimension</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">)</span>
         <span class="p">)</span></div>
+
+<div class="viewcode-block" id="EntityDeserializer.deserialize_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.deserialize_duckling">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">deserialize_duckling</span><span class="p">(</span>
+        <span class="bp">cls</span><span class="p">,</span>
+        <span class="n">duckling_entity_dict</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
+        <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
+        <span class="n">reference_time</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">timezone</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">"UTC"</span><span class="p">,</span>
+        <span class="n">duration_cast_operator</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">constraints</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BaseEntity</span><span class="p">:</span>
+        <span class="bp">cls</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">)</span>
+        <span class="n">entity_class_name</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">get_entity_class_str</span><span class="p">(</span><span class="n">duckling_entity_dict</span><span class="p">)</span>
+        <span class="n">EntityClass</span><span class="p">:</span> <span class="n">BaseEntity</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">entitiy_classes</span><span class="p">[</span><span class="n">entity_class_name</span><span class="p">]</span>
+
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">entity</span> <span class="o">=</span> <span class="n">EntityClass</span><span class="o">.</span><span class="n">from_duckling</span><span class="p">(</span>
+                <span class="n">duckling_entity_dict</span><span class="p">,</span>
+                <span class="n">alternative_index</span><span class="p">,</span>
+                <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">,</span>
+                <span class="n">duration_cast_operator</span><span class="o">=</span><span class="n">duration_cast_operator</span><span class="p">,</span>
+                <span class="n">timezone</span><span class="o">=</span><span class="n">timezone</span><span class="p">,</span>
+                <span class="n">reference_time</span><span class="o">=</span><span class="n">reference_time</span><span class="p">,</span>
+            <span class="p">)</span>
+        <span class="k">except</span> <span class="ne">KeyError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">"Failed to deserialize </span><span class="si">{</span><span class="n">EntityClass</span><span class="si">}</span><span class="s2"> "</span>
+                <span class="sa">f</span><span class="s2">"from duckling response: </span><span class="si">{</span><span class="n">duckling_entity_dict</span><span class="si">}</span><span class="s2">. Exception: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span>
+            <span class="p">)</span> <span class="kn">from</span> <span class="nn">e</span>
+
+        <span class="k">return</span> <span class="n">entity</span></div></div>
 </pre></div>
         </article>
       </div>
diff --git a/docs/_modules/dialogy/types/entity/duration.html b/docs/_modules/dialogy/types/entity/duration.html
index f766637e..618c6490 100644
--- a/docs/_modules/dialogy/types/entity/duration.html
+++ b/docs/_modules/dialogy/types/entity/duration.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.duration - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.duration - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -268,17 +268,19 @@ <h1>Source code for dialogy.types.entity.duration</h1><div class="highlight"><pr
 
 <span class="kn">import</span> <span class="nn">operator</span>
 <span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">timedelta</span>
-<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Union</span>
 
 <span class="kn">import</span> <span class="nn">attr</span>
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.base_entity</span> <span class="kn">import</span> <span class="n">BaseEntity</span>
+<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">EntityDeserializer</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.time</span> <span class="kn">import</span> <span class="n">TimeEntity</span>
 <span class="kn">from</span> <span class="nn">dialogy.utils</span> <span class="kn">import</span> <span class="n">unix_ts_to_datetime</span>
 
 
-<div class="viewcode-block" id="DurationEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.duration.html#dialogy.types.entity.duration.DurationEntity">[docs]</a><span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
+<div class="viewcode-block" id="DurationEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.duration.html#dialogy.types.entity.duration.DurationEntity">[docs]</a><span class="nd">@EntityDeserializer</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">DURATION</span><span class="p">)</span>
+<span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
 <span class="k">class</span> <span class="nc">DurationEntity</span><span class="p">(</span><span class="n">BaseEntity</span><span class="p">):</span>
     <span class="sd">"""</span>
 <span class="sd">    This entity type expects a normalized attribute. This provides the duration normalized to seconds.</span>
@@ -295,12 +297,20 @@ <h1>Source code for dialogy.types.entity.duration</h1><div class="highlight"><pr
     <span class="n">unit</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">validator</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">instance_of</span><span class="p">(</span><span class="nb">str</span><span class="p">),</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
     <span class="n">normalized</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">Factory</span><span class="p">(</span><span class="nb">dict</span><span class="p">))</span>
     <span class="n">_meta</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">Factory</span><span class="p">(</span><span class="nb">dict</span><span class="p">))</span>
-    <span class="n">entity_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="s2">"duration"</span><span class="p">,</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">entity_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">DURATION</span><span class="p">,</span> <span class="n">kw_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 
 <div class="viewcode-block" id="DurationEntity.from_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.duration.html#dialogy.types.entity.duration.DurationEntity.from_duckling">[docs]</a>    <span class="nd">@classmethod</span>
-    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">DurationEntity</span><span class="p">:</span>
+    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span>
+        <span class="bp">cls</span><span class="p">,</span>
+        <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
+        <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
+        <span class="n">reference_time</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">timezone</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="n">duration_cast_operator</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">[</span><span class="n">DurationEntity</span><span class="p">,</span> <span class="n">TimeEntity</span><span class="p">]:</span>
         <span class="n">value</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">NORMALIZED</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span>
-        <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span>
+        <span class="n">entity</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span>
             <span class="nb">range</span><span class="o">=</span><span class="p">{</span><span class="n">const</span><span class="o">.</span><span class="n">START</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">START</span><span class="p">],</span> <span class="n">const</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">END</span><span class="p">]},</span>
             <span class="n">body</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">BODY</span><span class="p">],</span>
             <span class="n">dim</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">DIM</span><span class="p">],</span>
@@ -309,7 +319,10 @@ <h1>Source code for dialogy.types.entity.duration</h1><div class="highlight"><pr
             <span class="n">values</span><span class="o">=</span><span class="p">[{</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">:</span> <span class="n">value</span><span class="p">}],</span>
             <span class="n">unit</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">UNIT</span><span class="p">],</span>
             <span class="n">normalized</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">NORMALIZED</span><span class="p">],</span>
-        <span class="p">)</span></div>
+        <span class="p">)</span>
+        <span class="k">if</span> <span class="n">reference_time</span> <span class="ow">and</span> <span class="n">timezone</span> <span class="ow">and</span> <span class="n">duration_cast_operator</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">entity</span><span class="o">.</span><span class="n">as_time</span><span class="p">(</span><span class="n">reference_time</span><span class="p">,</span> <span class="n">timezone</span><span class="p">,</span> <span class="n">duration_cast_operator</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">entity</span></div>
 
 <div class="viewcode-block" id="DurationEntity.as_time"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.duration.html#dialogy.types.entity.duration.DurationEntity.as_time">[docs]</a>    <span class="k">def</span> <span class="nf">as_time</span><span class="p">(</span>
         <span class="bp">self</span><span class="p">,</span> <span class="n">reference_unix_ts</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">timezone</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">duration_cast_operator</span><span class="p">:</span> <span class="nb">str</span>
diff --git a/docs/_modules/dialogy/types/entity/numerical.html b/docs/_modules/dialogy/types/entity/numerical.html
index d134a49e..53ca10ab 100644
--- a/docs/_modules/dialogy/types/entity/numerical.html
+++ b/docs/_modules/dialogy/types/entity/numerical.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.numerical - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.numerical - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -306,11 +306,13 @@ <h1>Source code for dialogy.types.entity.numerical</h1><div class="highlight"><p
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.base_entity</span> <span class="kn">import</span> <span class="n">BaseEntity</span>
+<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">EntityDeserializer</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.time</span> <span class="kn">import</span> <span class="n">TimeEntity</span>
 <span class="kn">from</span> <span class="nn">dialogy.utils</span> <span class="kn">import</span> <span class="n">unix_ts_to_datetime</span>
 
 
-<div class="viewcode-block" id="NumericalEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.numerical.html#dialogy.types.entity.numerical.NumericalEntity">[docs]</a><span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
+<div class="viewcode-block" id="NumericalEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.numerical.html#dialogy.types.entity.numerical.NumericalEntity">[docs]</a><span class="nd">@EntityDeserializer</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">)</span>
+<span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
 <span class="k">class</span> <span class="nc">NumericalEntity</span><span class="p">(</span><span class="n">BaseEntity</span><span class="p">):</span>
     <span class="sd">"""</span>
 <span class="sd">    Numerical Entity Type</span>
@@ -329,11 +331,11 @@ <h1>Source code for dialogy.types.entity.numerical</h1><div class="highlight"><p
     <span class="n">origin</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span>
         <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"value"</span><span class="p">,</span> <span class="n">validator</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">instance_of</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
     <span class="p">)</span>
-    <span class="n">entity_type</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="s2">"number"</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">entity_type</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 
 <div class="viewcode-block" id="NumericalEntity.from_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.numerical.html#dialogy.types.entity.numerical.NumericalEntity.from_duckling">[docs]</a>    <span class="nd">@classmethod</span>
     <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span>
-        <span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span>
+        <span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span>
     <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">NumericalEntity</span><span class="p">:</span>
         <span class="n">value</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span>
         <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span>
diff --git a/docs/_modules/dialogy/types/entity/people.html b/docs/_modules/dialogy/types/entity/people.html
index 3fbeb7bc..f3310123 100644
--- a/docs/_modules/dialogy/types/entity/people.html
+++ b/docs/_modules/dialogy/types/entity/people.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.people - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.people - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -272,9 +272,11 @@ <h1>Source code for dialogy.types.entity.people</h1><div class="highlight"><pre>
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.base_entity</span> <span class="kn">import</span> <span class="n">BaseEntity</span>
+<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">EntityDeserializer</span>
 
 
-<div class="viewcode-block" id="PeopleEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.people.html#dialogy.types.entity.people.PeopleEntity">[docs]</a><span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
+<div class="viewcode-block" id="PeopleEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.people.html#dialogy.types.entity.people.PeopleEntity">[docs]</a><span class="nd">@EntityDeserializer</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">PEOPLE</span><span class="p">)</span>
+<span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
 <span class="k">class</span> <span class="nc">PeopleEntity</span><span class="p">(</span><span class="n">BaseEntity</span><span class="p">):</span>
     <span class="sd">"""</span>
 <span class="sd">    A variant of numerical entity which addresses collections of people.</span>
@@ -286,10 +288,12 @@ <h1>Source code for dialogy.types.entity.people</h1><div class="highlight"><pre>
 <span class="sd">    """</span>
 
     <span class="n">unit</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">validator</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">instance_of</span><span class="p">(</span><span class="nb">str</span><span class="p">))</span>
-    <span class="n">entity_type</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="s2">"people"</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">entity_type</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">PEOPLE</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 
 <div class="viewcode-block" id="PeopleEntity.from_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.people.html#dialogy.types.entity.people.PeopleEntity.from_duckling">[docs]</a>    <span class="nd">@classmethod</span>
-    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">PeopleEntity</span><span class="p">:</span>
+    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span>
+        <span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">PeopleEntity</span><span class="p">:</span>
         <span class="n">value</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span>
         <span class="k">return</span> <span class="bp">cls</span><span class="p">(</span>
             <span class="nb">range</span><span class="o">=</span><span class="p">{</span><span class="n">const</span><span class="o">.</span><span class="n">START</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">START</span><span class="p">],</span> <span class="n">const</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">END</span><span class="p">]},</span>
diff --git a/docs/_modules/dialogy/types/entity/time.html b/docs/_modules/dialogy/types/entity/time.html
index 60b88664..dabb1559 100644
--- a/docs/_modules/dialogy/types/entity/time.html
+++ b/docs/_modules/dialogy/types/entity/time.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.time - dialogy 0.9.3 documentation</title>
+        <title>dialogy.types.entity.time - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.3 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.3 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -161,10 +161,12 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.output.html">Output</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.workflow.html">Workflow</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.plugin.html">Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.base_entity.html">Entity</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Types</span></p>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.keyword.html">Pattern Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.amount_of_money.html">Currency Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.credit_card_number.html">Credit Card Number Entity</a></li>
@@ -173,7 +175,6 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time.html">Time Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time_interval.html">Time Interval Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.duration.html">Duration Entity</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Plugins</span></p>
 <ul>
@@ -269,6 +270,7 @@ <h1>Source code for dialogy.types.entity.time</h1><div class="highlight"><pre>
 <span class="sd">"""</span>
 <span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">annotations</span>
 
+<span class="kn">import</span> <span class="nn">operator</span>
 <span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
 <span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span>
 
@@ -277,9 +279,11 @@ <h1>Source code for dialogy.types.entity.time</h1><div class="highlight"><pre>
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.base_entity</span> <span class="kn">import</span> <span class="n">BaseEntity</span>
+<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">EntityDeserializer</span>
 
 
-<div class="viewcode-block" id="TimeEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity">[docs]</a><span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
+<div class="viewcode-block" id="TimeEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity">[docs]</a><span class="nd">@EntityDeserializer</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">TIME</span><span class="p">)</span>
+<span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
 <span class="k">class</span> <span class="nc">TimeEntity</span><span class="p">(</span><span class="n">BaseEntity</span><span class="p">):</span>
     <span class="sd">"""</span>
 <span class="sd">    Entities that can be parsed to obtain date, time or datetime values.</span>
@@ -293,9 +297,13 @@ <h1>Source code for dialogy.types.entity.time</h1><div class="highlight"><pre>
 <span class="sd">    - `grain` tells us the smallest unit of time in the utterance</span>
 <span class="sd">    """</span>
 
-    <span class="n">origin</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="s2">"value"</span><span class="p">)</span>
-    <span class="n">dim</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="s2">"time"</span><span class="p">)</span>
+    <span class="n">origin</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">)</span>
+    <span class="n">dim</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">const</span><span class="o">.</span><span class="n">TIME</span><span class="p">)</span>
     <span class="n">grain</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">attr</span><span class="o">.</span><span class="n">ib</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">validator</span><span class="o">=</span><span class="n">attr</span><span class="o">.</span><span class="n">validators</span><span class="o">.</span><span class="n">instance_of</span><span class="p">(</span><span class="nb">str</span><span class="p">))</span>
+    <span class="n">__TIMERANGE_OPERATION_ALIAS</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="n">const</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">le</span><span class="p">,</span>
+        <span class="n">const</span><span class="o">.</span><span class="n">GTE</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">ge</span><span class="p">,</span>
+    <span class="p">}</span>
 
 <div class="viewcode-block" id="TimeEntity.get_value"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity.get_value">[docs]</a>    <span class="k">def</span> <span class="nf">get_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
         <span class="sd">"""</span>
@@ -407,16 +415,55 @@ <h1>Source code for dialogy.types.entity.time</h1><div class="highlight"><pre>
         <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">entity_type</span> <span class="o">=</span> <span class="n">const</span><span class="o">.</span><span class="n">TIME</span></div>
 
+<div class="viewcode-block" id="TimeEntity.pick_value"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity.pick_value">[docs]</a>    <span class="nd">@classmethod</span>
+    <span class="k">def</span> <span class="nf">pick_value</span><span class="p">(</span>
+        <span class="bp">cls</span><span class="p">,</span> <span class="n">d_values</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]],</span> <span class="n">grain</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]:</span>
+        <span class="n">is_time</span> <span class="o">=</span> <span class="n">grain</span> <span class="ow">in</span> <span class="n">const</span><span class="o">.</span><span class="n">TIME_UNITS</span>
+        <span class="n">constraint</span> <span class="o">=</span> <span class="n">constraints</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">TIME</span><span class="p">)</span>
+        <span class="n">req_value</span> <span class="o">=</span> <span class="n">d_values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">is_time</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">[</span><span class="n">req_value</span><span class="p">]</span>
+
+        <span class="n">opt_items</span> <span class="o">=</span> <span class="p">[</span>
+            <span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">__TIMERANGE_OPERATION_ALIAS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">opt</span><span class="p">),</span> <span class="n">measure</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">opt</span><span class="p">,</span> <span class="n">measure</span> <span class="ow">in</span> <span class="n">constraint</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
+        <span class="p">]</span>
+        <span class="k">for</span> <span class="n">datetime_val</span> <span class="ow">in</span> <span class="n">d_values</span><span class="p">:</span>
+            <span class="n">datetime_</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">datetime_val</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">])</span>
+            <span class="k">if</span> <span class="nb">all</span><span class="p">(</span>
+                <span class="n">opt</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">datetime_</span><span class="p">,</span> <span class="n">const</span><span class="o">.</span><span class="n">HOUR</span><span class="p">),</span> <span class="n">measure</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">HOUR</span><span class="p">])</span>
+                <span class="k">for</span> <span class="n">opt</span><span class="p">,</span> <span class="n">measure</span> <span class="ow">in</span> <span class="n">opt_items</span>
+                <span class="k">if</span> <span class="n">opt</span>
+            <span class="p">):</span>
+                <span class="n">req_value</span> <span class="o">=</span> <span class="n">datetime_val</span>
+                <span class="k">break</span>
+        <span class="k">return</span> <span class="p">[</span><span class="n">req_value</span><span class="p">]</span></div>
+
 <div class="viewcode-block" id="TimeEntity.from_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity.from_duckling">[docs]</a>    <span class="nd">@classmethod</span>
-    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TimeEntity</span><span class="p">:</span>
+    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span>
+        <span class="bp">cls</span><span class="p">,</span>
+        <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
+        <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
+        <span class="n">constraints</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TimeEntity</span><span class="p">:</span>
+        <span class="n">datetime_values</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">VALUES</span><span class="p">]</span>
+        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">datetime_values</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">constraints</span><span class="p">:</span>
+            <span class="n">datetime_values</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">pick_value</span><span class="p">(</span>
+                <span class="n">d_values</span><span class="o">=</span><span class="n">datetime_values</span><span class="p">,</span>
+                <span class="n">grain</span><span class="o">=</span><span class="n">datetime_values</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">GRAIN</span><span class="p">],</span>
+                <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">,</span>
+            <span class="p">)</span>
+
         <span class="n">time_entity</span> <span class="o">=</span> <span class="bp">cls</span><span class="p">(</span>
             <span class="nb">range</span><span class="o">=</span><span class="p">{</span><span class="n">const</span><span class="o">.</span><span class="n">START</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">START</span><span class="p">],</span> <span class="n">const</span><span class="o">.</span><span class="n">END</span><span class="p">:</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">END</span><span class="p">]},</span>
             <span class="n">body</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">BODY</span><span class="p">],</span>
             <span class="n">dim</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">DIM</span><span class="p">],</span>
             <span class="n">alternative_index</span><span class="o">=</span><span class="n">alternative_index</span><span class="p">,</span>
             <span class="n">latent</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">LATENT</span><span class="p">],</span>
-            <span class="n">values</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">VALUES</span><span class="p">],</span>
-            <span class="n">grain</span><span class="o">=</span><span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">VALUES</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">GRAIN</span><span class="p">],</span>
+            <span class="n">values</span><span class="o">=</span><span class="n">datetime_values</span><span class="p">,</span>
+            <span class="n">grain</span><span class="o">=</span><span class="n">datetime_values</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">const</span><span class="o">.</span><span class="n">GRAIN</span><span class="p">],</span>
         <span class="p">)</span>
         <span class="n">time_entity</span><span class="o">.</span><span class="n">set_entity_type</span><span class="p">()</span>
         <span class="k">return</span> <span class="n">time_entity</span></div></div>
diff --git a/docs/_modules/dialogy/types/entity/time_interval.html b/docs/_modules/dialogy/types/entity/time_interval.html
index 32638b63..54397757 100644
--- a/docs/_modules/dialogy/types/entity/time_interval.html
+++ b/docs/_modules/dialogy/types/entity/time_interval.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../../genindex.html" /><link rel="search" title="Search" href="../../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.time_interval - dialogy 0.9.1 documentation</title>
+        <title>dialogy.types.entity.time_interval - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../../index.html"><div class="brand">dialogy 0.9.1 documentation</div></a>
+      <a href="../../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.1 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -160,11 +160,13 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.input.html">Input</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.output.html">Output</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.workflow.html">Workflow</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.plugin.html">Base Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.plugin.html">Plugin</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.base_entity.html">Entity</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Types</span></p>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.intent.html">Intent</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.keyword.html">Pattern Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.amount_of_money.html">Currency Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.credit_card_number.html">Credit Card Number Entity</a></li>
@@ -173,7 +175,6 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time.html">Time Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.time_interval.html">Time Interval Entity</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.entity.duration.html">Duration Entity</a></li>
-<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.types.slots.html">Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Plugins</span></p>
 <ul>
@@ -185,6 +186,7 @@
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.list_search_plugin.html">Fuzzy Entity Search</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.base.entity_extractor.html">Entity Scoring</a></li>
 <li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.lb_plugin.html">Lower Bound Duckling Entities</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../../source/dialogy.plugins.text.combine_date_time.html">Combine DateTime Over Slots</a></li>
 </ul>
 <p class="caption" role="heading"><span class="caption-text">Misc</span></p>
 <ul>
@@ -272,10 +274,12 @@ <h1>Source code for dialogy.types.entity.time_interval</h1><div class="highlight
 <span class="kn">import</span> <span class="nn">attr</span>
 
 <span class="kn">from</span> <span class="nn">dialogy</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">const</span>
+<span class="kn">from</span> <span class="nn">dialogy.types.entity.deserialize</span> <span class="kn">import</span> <span class="n">EntityDeserializer</span>
 <span class="kn">from</span> <span class="nn">dialogy.types.entity.time</span> <span class="kn">import</span> <span class="n">TimeEntity</span>
 
 
-<div class="viewcode-block" id="TimeIntervalEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.time_interval.html#dialogy.types.entity.time_interval.TimeIntervalEntity">[docs]</a><span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
+<div class="viewcode-block" id="TimeIntervalEntity"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.time_interval.html#dialogy.types.entity.time_interval.TimeIntervalEntity">[docs]</a><span class="nd">@EntityDeserializer</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">TIME_INTERVAL</span><span class="p">)</span>
+<span class="nd">@attr</span><span class="o">.</span><span class="n">s</span>
 <span class="k">class</span> <span class="nc">TimeIntervalEntity</span><span class="p">(</span><span class="n">TimeEntity</span><span class="p">):</span>
     <span class="sd">"""</span>
 <span class="sd">    Entities that can be parsed to obtain date, time or datetime interval.</span>
@@ -367,7 +371,13 @@ <h1>Source code for dialogy.types.entity.time_interval</h1><div class="highlight
             <span class="p">)</span></div>
 
 <div class="viewcode-block" id="TimeIntervalEntity.from_duckling"><a class="viewcode-back" href="../../../../source/dialogy.types.entity.time_interval.html#dialogy.types.entity.time_interval.TimeIntervalEntity.from_duckling">[docs]</a>    <span class="nd">@classmethod</span>
-    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TimeEntity</span><span class="p">:</span>
+    <span class="k">def</span> <span class="nf">from_duckling</span><span class="p">(</span>
+        <span class="bp">cls</span><span class="p">,</span>
+        <span class="n">d</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
+        <span class="n">alternative_index</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
+        <span class="n">constraints</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+        <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TimeEntity</span><span class="p">:</span>
         <span class="n">from_value</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span>
         <span class="n">to_value</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">const</span><span class="o">.</span><span class="n">VALUE</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">const</span><span class="o">.</span><span class="n">TO</span><span class="p">)</span>
         <span class="n">grain_source</span> <span class="o">=</span> <span class="n">from_value</span> <span class="ow">or</span> <span class="n">to_value</span>
@@ -415,5 +425,7 @@ <h1>Source code for dialogy.types.entity.time_interval</h1><div class="highlight
     <script src="../../../../_static/scripts/furo.js"></script>
     <script src="../../../../_static/clipboard.min.js"></script>
     <script src="../../../../_static/copybutton.js"></script>
+    <script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
+    <script>mermaid.initialize({startOnLoad:true});</script>
     </body>
 </html>
\ No newline at end of file
diff --git a/docs/_modules/dialogy/utils/file_handler.html b/docs/_modules/dialogy/utils/file_handler.html
index 81df9e71..c2ce6a77 100644
--- a/docs/_modules/dialogy/utils/file_handler.html
+++ b/docs/_modules/dialogy/utils/file_handler.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html" /><link rel="search" title="Search" href="../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.utils.file_handler - dialogy 0.9.5 documentation</title>
+        <title>dialogy.utils.file_handler - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -218,11 +218,13 @@
         </div>
         <article role="main">
           <h1>Source code for dialogy.utils.file_handler</h1><div class="highlight"><pre>
-<span></span><span class="kn">import</span> <span class="nn">os</span>
-<span class="kn">import</span> <span class="nn">json</span>
-<span class="kn">from</span> <span class="nn">json.decoder</span> <span class="kn">import</span> <span class="n">JSONDecodeError</span>
+<span></span><span class="kn">import</span> <span class="nn">json</span>
+<span class="kn">import</span> <span class="nn">os</span>
 <span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
-<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">List</span>
+<span class="kn">from</span> <span class="nn">json.decoder</span> <span class="kn">import</span> <span class="n">JSONDecodeError</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span>
+
+<span class="kn">from</span> <span class="nn">loguru</span> <span class="kn">import</span> <span class="n">logger</span>
 
 
 <div class="viewcode-block" id="load_file"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.file_handler.load_file">[docs]</a><span class="k">def</span> <span class="nf">load_file</span><span class="p">(</span>
@@ -248,7 +250,7 @@ <h1>Source code for dialogy.utils.file_handler</h1><div class="highlight"><pre>
             <span class="k">else</span><span class="p">:</span>
                 <span class="k">return</span> <span class="n">loader</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
     <span class="k">else</span><span class="p">:</span>
-        <span class="k">return</span> <span class="kc">None</span></div>
+        <span class="k">return</span> <span class="kc">None</span>  <span class="c1"># pragma: no cover</span></div>
 
 
 <div class="viewcode-block" id="save_file"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.file_handler.save_file">[docs]</a><span class="k">def</span> <span class="nf">save_file</span><span class="p">(</span>
@@ -283,15 +285,17 @@ <h1>Source code for dialogy.utils.file_handler</h1><div class="highlight"><pre>
         <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="n">newline</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
             <span class="n">_</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">writer</span> <span class="k">else</span> <span class="n">writer</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">file</span><span class="p">)</span></div>
 
+
 <div class="viewcode-block" id="read_from_json"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.file_handler.read_from_json">[docs]</a><span class="k">def</span> <span class="nf">read_from_json</span><span class="p">(</span><span class="n">params</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">file_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
     <span class="n">full_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_path</span><span class="p">,</span> <span class="n">file_name</span><span class="p">)</span>
     <span class="n">req_config</span> <span class="o">=</span> <span class="p">{}</span>
     <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">full_path</span><span class="p">):</span>
         <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">full_path</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span> <span class="k">as</span> <span class="n">json_file</span><span class="p">:</span>
             <span class="n">config_</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">json_file</span><span class="p">)</span>
-            <span class="n">req_config</span> <span class="o">=</span> <span class="p">{</span><span class="n">param</span><span class="p">:</span><span class="n">config_</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">param</span><span class="p">)</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">params</span><span class="p">}</span>
+            <span class="n">req_config</span> <span class="o">=</span> <span class="p">{</span><span class="n">param</span><span class="p">:</span> <span class="n">config_</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">param</span><span class="p">)</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">params</span><span class="p">}</span>
     <span class="k">return</span> <span class="n">req_config</span></div>
 
+
 <div class="viewcode-block" id="save_to_json"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.file_handler.save_to_json">[docs]</a><span class="k">def</span> <span class="nf">save_to_json</span><span class="p">(</span><span class="n">params</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">file_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
     <span class="n">full_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_path</span><span class="p">,</span> <span class="n">file_name</span><span class="p">)</span>
     <span class="n">existing_config</span> <span class="o">=</span> <span class="p">{}</span>
@@ -302,10 +306,13 @@ <h1>Source code for dialogy.utils.file_handler</h1><div class="highlight"><pre>
                 <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">params</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
                     <span class="n">existing_config</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
         <span class="k">except</span> <span class="n">JSONDecodeError</span><span class="p">:</span>
-            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Failed to load json file </span><span class="si">{</span><span class="n">full_path</span><span class="si">}</span><span class="s2">, writing on newly created file."</span><span class="p">)</span>
+            <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+                <span class="sa">f</span><span class="s2">"Failed to load json file </span><span class="si">{</span><span class="n">full_path</span><span class="si">}</span><span class="s2">, writing on newly created file."</span>
+            <span class="p">)</span>
     <span class="n">params</span> <span class="o">=</span> <span class="n">existing_config</span> <span class="ow">or</span> <span class="n">params</span>
     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">full_path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">json_file</span><span class="p">:</span>
-        <span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">json_file</span><span class="p">,</span> <span class="n">indent</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">ensure_ascii</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span></div>
+        <span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">json_file</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">ensure_ascii</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
+
 
 <div class="viewcode-block" id="create_timestamps_path"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.file_handler.create_timestamps_path">[docs]</a><span class="k">def</span> <span class="nf">create_timestamps_path</span><span class="p">(</span>
     <span class="n">directory</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
diff --git a/docs/_modules/dialogy/utils/temperature_scaling.html b/docs/_modules/dialogy/utils/temperature_scaling.html
index 160d837b..f60ccbca 100644
--- a/docs/_modules/dialogy/utils/temperature_scaling.html
+++ b/docs/_modules/dialogy/utils/temperature_scaling.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html" /><link rel="search" title="Search" href="../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.utils.temperature_scaling - dialogy 0.9.5 documentation</title>
+        <title>dialogy.utils.temperature_scaling - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -218,123 +218,132 @@
         </div>
         <article role="main">
           <h1>Source code for dialogy.utils.temperature_scaling</h1><div class="highlight"><pre>
-<span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
+<span></span><span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Tuple</span>
+
 <span class="kn">import</span> <span class="nn">matplotlib.patches</span> <span class="k">as</span> <span class="nn">mpatches</span>
-<span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">tqdm</span>
-<span class="kn">import</span> <span class="nn">os</span>
-<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Union</span>
+<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
+<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
 <span class="kn">import</span> <span class="nn">numpy.typing</span> <span class="k">as</span> <span class="nn">npt</span>
-<span class="kn">from</span> <span class="nn">torch</span> <span class="kn">import</span> <span class="n">Tensor</span>
-
 <span class="kn">import</span> <span class="nn">torch</span>
 <span class="kn">import</span> <span class="nn">torch.nn</span> <span class="k">as</span> <span class="nn">nn</span>
 <span class="kn">import</span> <span class="nn">torch.optim</span> <span class="k">as</span> <span class="nn">optim</span>
+<span class="kn">from</span> <span class="nn">torch</span> <span class="kn">import</span> <span class="n">Tensor</span>
 
-<span class="kn">import</span> <span class="nn">dialogy.constants</span> <span class="k">as</span> <span class="nn">const</span>
-<span class="kn">from</span> <span class="nn">dialogy.utils</span> <span class="kn">import</span> <span class="n">logger</span>
+<span class="n">DEVICE</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s2">"cuda"</span> <span class="k">if</span> <span class="n">torch</span><span class="o">.</span><span class="n">cuda</span><span class="o">.</span><span class="n">is_available</span><span class="p">()</span> <span class="k">else</span> <span class="s2">"cpu"</span><span class="p">)</span>
 
 
-<span class="n">DEVICE</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s1">'cuda'</span> <span class="k">if</span> <span class="n">torch</span><span class="o">.</span><span class="n">cuda</span><span class="o">.</span><span class="n">is_available</span><span class="p">()</span> <span class="k">else</span> <span class="s1">'cpu'</span><span class="p">)</span>
+<div class="viewcode-block" id="calc_bins"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.temperature_scaling.calc_bins">[docs]</a><span class="k">def</span> <span class="nf">calc_bins</span><span class="p">(</span>
+    <span class="n">preds</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span> <span class="n">labels_oneh</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">]</span>
+<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
+    <span class="c1"># Assign each prediction to a bin</span>
+    <span class="n">num_bins</span> <span class="o">=</span> <span class="mi">10</span>
+    <span class="n">bins</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">num_bins</span><span class="p">)</span>
+    <span class="n">binned</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">digitize</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">bins</span><span class="p">)</span>
 
-<div class="viewcode-block" id="calc_bins"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.temperature_scaling.calc_bins">[docs]</a><span class="k">def</span> <span class="nf">calc_bins</span><span class="p">(</span><span class="n">preds</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span> <span class="n">labels_oneh</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
-  <span class="c1"># Assign each prediction to a bin</span>
-  <span class="n">num_bins</span> <span class="o">=</span> <span class="mi">10</span>
-  <span class="n">bins</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">num_bins</span><span class="p">)</span>
-  <span class="n">binned</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">digitize</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">bins</span><span class="p">)</span>
+    <span class="c1"># Save the accuracy, confidence and size of each bin</span>
+    <span class="n">bin_accs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)</span>
+    <span class="n">bin_confs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)</span>
+    <span class="n">bin_sizes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)</span>
 
-  <span class="c1"># Save the accuracy, confidence and size of each bin</span>
-  <span class="n">bin_accs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)</span>
-  <span class="n">bin_confs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)</span>
-  <span class="n">bin_sizes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)</span>
+    <span class="k">for</span> <span class="nb">bin</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_bins</span><span class="p">):</span>
+        <span class="n">bin_sizes</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">preds</span><span class="p">[</span><span class="n">binned</span> <span class="o">==</span> <span class="nb">bin</span><span class="p">])</span>
+        <span class="k">if</span> <span class="n">bin_sizes</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+            <span class="n">bin_accs</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">labels_oneh</span><span class="p">[</span><span class="n">binned</span> <span class="o">==</span> <span class="nb">bin</span><span class="p">])</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span> <span class="o">/</span> <span class="n">bin_sizes</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span>
+            <span class="n">bin_confs</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">preds</span><span class="p">[</span><span class="n">binned</span> <span class="o">==</span> <span class="nb">bin</span><span class="p">])</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span> <span class="o">/</span> <span class="n">bin_sizes</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span>
 
-  <span class="k">for</span> <span class="nb">bin</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_bins</span><span class="p">):</span>
-    <span class="n">bin_sizes</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">preds</span><span class="p">[</span><span class="n">binned</span> <span class="o">==</span> <span class="nb">bin</span><span class="p">])</span>
-    <span class="k">if</span> <span class="n">bin_sizes</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-      <span class="n">bin_accs</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">labels_oneh</span><span class="p">[</span><span class="n">binned</span><span class="o">==</span><span class="nb">bin</span><span class="p">])</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span> <span class="o">/</span> <span class="n">bin_sizes</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span>
-      <span class="n">bin_confs</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">preds</span><span class="p">[</span><span class="n">binned</span><span class="o">==</span><span class="nb">bin</span><span class="p">])</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span> <span class="o">/</span> <span class="n">bin_sizes</span><span class="p">[</span><span class="nb">bin</span><span class="p">]</span>
+    <span class="k">return</span> <span class="n">bins</span><span class="p">,</span> <span class="n">binned</span><span class="p">,</span> <span class="n">bin_accs</span><span class="p">,</span> <span class="n">bin_confs</span><span class="p">,</span> <span class="n">bin_sizes</span></div>
 
-  <span class="k">return</span> <span class="n">bins</span><span class="p">,</span> <span class="n">binned</span><span class="p">,</span> <span class="n">bin_accs</span><span class="p">,</span> <span class="n">bin_confs</span><span class="p">,</span> <span class="n">bin_sizes</span></div>
 
+<div class="viewcode-block" id="get_metrics"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.temperature_scaling.get_metrics">[docs]</a><span class="k">def</span> <span class="nf">get_metrics</span><span class="p">(</span>
+    <span class="n">preds</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span> <span class="n">labels_oneh</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">]</span>
+<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">]:</span>
+    <span class="n">ECE</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">MCE</span> <span class="o">=</span> <span class="mi">0</span>
+    <span class="n">bins</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">bin_accs</span><span class="p">,</span> <span class="n">bin_confs</span><span class="p">,</span> <span class="n">bin_sizes</span> <span class="o">=</span> <span class="n">calc_bins</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">labels_oneh</span><span class="p">)</span>
 
-<div class="viewcode-block" id="get_metrics"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.temperature_scaling.get_metrics">[docs]</a><span class="k">def</span> <span class="nf">get_metrics</span><span class="p">(</span><span class="n">preds</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span> <span class="n">labels_oneh</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">]:</span>
-  <span class="n">ECE</span> <span class="o">=</span> <span class="mi">0</span>
-  <span class="n">MCE</span> <span class="o">=</span> <span class="mi">0</span>
-  <span class="n">bins</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">bin_accs</span><span class="p">,</span> <span class="n">bin_confs</span><span class="p">,</span> <span class="n">bin_sizes</span> <span class="o">=</span> <span class="n">calc_bins</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">labels_oneh</span><span class="p">)</span>
+    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">bins</span><span class="p">)):</span>
+        <span class="n">abs_conf_dif</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">bin_accs</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="n">bin_confs</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
+        <span class="n">ECE</span> <span class="o">+=</span> <span class="p">(</span><span class="n">bin_sizes</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">/</span> <span class="nb">sum</span><span class="p">(</span><span class="n">bin_sizes</span><span class="p">))</span> <span class="o">*</span> <span class="n">abs_conf_dif</span>
+        <span class="n">MCE</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">MCE</span><span class="p">,</span> <span class="n">abs_conf_dif</span><span class="p">)</span>
 
-  <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">bins</span><span class="p">)):</span>
-    <span class="n">abs_conf_dif</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">bin_accs</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="n">bin_confs</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
-    <span class="n">ECE</span> <span class="o">+=</span> <span class="p">(</span><span class="n">bin_sizes</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">/</span> <span class="nb">sum</span><span class="p">(</span><span class="n">bin_sizes</span><span class="p">))</span> <span class="o">*</span> <span class="n">abs_conf_dif</span>
-    <span class="n">MCE</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">MCE</span><span class="p">,</span> <span class="n">abs_conf_dif</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">ECE</span><span class="p">,</span> <span class="n">MCE</span></div>
 
-  <span class="k">return</span> <span class="n">ECE</span><span class="p">,</span> <span class="n">MCE</span></div>
 
+<div class="viewcode-block" id="save_reliability_graph"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.temperature_scaling.save_reliability_graph">[docs]</a><span class="k">def</span> <span class="nf">save_reliability_graph</span><span class="p">(</span>
+    <span class="n">preds</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span>
+    <span class="n">labels_oneh</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span>
+    <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+    <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+<span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+    <span class="n">ECE</span><span class="p">,</span> <span class="n">MCE</span> <span class="o">=</span> <span class="n">get_metrics</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">labels_oneh</span><span class="p">)</span>
 
-<div class="viewcode-block" id="save_reliability_graph"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.temperature_scaling.save_reliability_graph">[docs]</a><span class="k">def</span> <span class="nf">save_reliability_graph</span><span class="p">(</span><span class="n">preds</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span> <span class="n">labels_oneh</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span> <span class="n">dir_path</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-  <span class="n">ECE</span><span class="p">,</span> <span class="n">MCE</span> <span class="o">=</span> <span class="n">get_metrics</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">labels_oneh</span><span class="p">)</span>
-  <span class="n">bins</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">bin_accs</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">calc_bins</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">labels_oneh</span><span class="p">)</span>
+    <span class="n">bins</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">bin_accs</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">calc_bins</span><span class="p">(</span><span class="n">preds</span><span class="p">,</span> <span class="n">labels_oneh</span><span class="p">)</span>
 
-  <span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span>
-  <span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">gca</span><span class="p">()</span>
+    <span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">8</span><span class="p">))</span>
+    <span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">gca</span><span class="p">()</span>
 
-  <span class="c1"># x/y limits</span>
-  <span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.05</span><span class="p">)</span>
-  <span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+    <span class="c1"># x/y limits</span>
+    <span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">1.05</span><span class="p">)</span>
+    <span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
 
-  <span class="c1"># x/y labels</span>
-  <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'Confidence'</span><span class="p">)</span>
-  <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'Accuracy'</span><span class="p">)</span>
+    <span class="c1"># x/y labels</span>
+    <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Confidence"</span><span class="p">)</span>
+    <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Accuracy"</span><span class="p">)</span>
 
-  <span class="c1"># Create grid</span>
-  <span class="n">ax</span><span class="o">.</span><span class="n">set_axisbelow</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span> 
-  <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="s1">'gray'</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">'dashed'</span><span class="p">)</span>
+    <span class="c1"># Create grid</span>
+    <span class="n">ax</span><span class="o">.</span><span class="n">set_axisbelow</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="s2">"gray"</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s2">"dashed"</span><span class="p">)</span>
 
-  <span class="c1"># Error bars</span>
-  <span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">bins</span><span class="p">,</span> <span class="n">bins</span><span class="p">,</span>  <span class="n">width</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.3</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s1">'black'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'r'</span><span class="p">,</span> <span class="n">hatch</span><span class="o">=</span><span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">)</span>
+    <span class="c1"># Error bars</span>
+    <span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">bins</span><span class="p">,</span> <span class="n">bins</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.3</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">"r"</span><span class="p">,</span> <span class="n">hatch</span><span class="o">=</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)</span>
 
-  <span class="c1"># Draw bars and identity line</span>
-  <span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">bins</span><span class="p">,</span> <span class="n">bin_accs</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s1">'black'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'b'</span><span class="p">)</span>
-  <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span> <span class="s1">'--'</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">'gray'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
+    <span class="c1"># Draw bars and identity line</span>
+    <span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">bins</span><span class="p">,</span> <span class="n">bin_accs</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">edgecolor</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">"b"</span><span class="p">)</span>
+    <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="s2">"--"</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">"gray"</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
 
-  <span class="c1"># Equally spaced axes</span>
-  <span class="n">plt</span><span class="o">.</span><span class="n">gca</span><span class="p">()</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s1">'equal'</span><span class="p">,</span> <span class="n">adjustable</span><span class="o">=</span><span class="s1">'box'</span><span class="p">)</span>
+    <span class="c1"># Equally spaced axes</span>
+    <span class="n">plt</span><span class="o">.</span><span class="n">gca</span><span class="p">()</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s2">"equal"</span><span class="p">,</span> <span class="n">adjustable</span><span class="o">=</span><span class="s2">"box"</span><span class="p">)</span>
 
-  <span class="c1"># ECE and MCE legend</span>
-  <span class="n">ECE_patch</span> <span class="o">=</span> <span class="n">mpatches</span><span class="o">.</span><span class="n">Patch</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="s1">'green'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'ECE = </span><span class="si">{:.2f}</span><span class="s1">%'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ECE</span><span class="o">*</span><span class="mi">100</span><span class="p">))</span>
-  <span class="n">MCE_patch</span> <span class="o">=</span> <span class="n">mpatches</span><span class="o">.</span><span class="n">Patch</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="s1">'red'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'MCE = </span><span class="si">{:.2f}</span><span class="s1">%'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">MCE</span><span class="o">*</span><span class="mi">100</span><span class="p">))</span>
-  <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">handles</span><span class="o">=</span><span class="p">[</span><span class="n">ECE_patch</span><span class="p">,</span> <span class="n">MCE_patch</span><span class="p">])</span>
+    <span class="c1"># ECE and MCE legend</span>
+    <span class="n">ECE_patch</span> <span class="o">=</span> <span class="n">mpatches</span><span class="o">.</span><span class="n">Patch</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="s2">"green"</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"ECE = </span><span class="si">{:.2f}</span><span class="s2">%"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ECE</span> <span class="o">*</span> <span class="mi">100</span><span class="p">))</span>
+    <span class="n">MCE_patch</span> <span class="o">=</span> <span class="n">mpatches</span><span class="o">.</span><span class="n">Patch</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="s2">"red"</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">"MCE = </span><span class="si">{:.2f}</span><span class="s2">%"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">MCE</span> <span class="o">*</span> <span class="mi">100</span><span class="p">))</span>
+
+    <span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">handles</span><span class="o">=</span><span class="p">[</span><span class="n">ECE_patch</span><span class="p">,</span> <span class="n">MCE_patch</span><span class="p">])</span>
+
+    <span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span>
+        <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_path</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s2">_reliability_graph.png"</span><span class="p">),</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s2">"tight"</span>
+    <span class="p">)</span></div>
 
-  <span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_path</span><span class="p">,</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">prefix</span><span class="si">}</span><span class="s1">_reliability_graph.png'</span><span class="p">),</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s1">'tight'</span><span class="p">)</span></div>
 
-  
 <div class="viewcode-block" id="T_scaling"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.temperature_scaling.T_scaling">[docs]</a><span class="k">def</span> <span class="nf">T_scaling</span><span class="p">(</span><span class="n">logits</span><span class="p">:</span> <span class="n">Tensor</span><span class="p">,</span> <span class="n">temperature</span><span class="p">:</span> <span class="n">Tensor</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tensor</span><span class="p">:</span>
-  <span class="k">return</span> <span class="n">torch</span><span class="o">.</span><span class="n">div</span><span class="p">(</span><span class="n">logits</span><span class="p">,</span> <span class="n">temperature</span><span class="p">)</span></div>
+    <span class="k">return</span> <span class="n">torch</span><span class="o">.</span><span class="n">div</span><span class="p">(</span><span class="n">logits</span><span class="p">,</span> <span class="n">temperature</span><span class="p">)</span></div>
 
 
 <div class="viewcode-block" id="fit_ts_parameter"><a class="viewcode-back" href="../../../source/dialogy.utils.html#dialogy.utils.temperature_scaling.fit_ts_parameter">[docs]</a><span class="k">def</span> <span class="nf">fit_ts_parameter</span><span class="p">(</span>
     <span class="n">logits_list</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span>
     <span class="n">labels_list</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">int64</span><span class="p">],</span>
     <span class="n">lr</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.001</span><span class="p">,</span>
-    <span class="n">max_iter</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span><span class="mi">10000</span>
+    <span class="n">max_iter</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">10000</span><span class="p">,</span>
+    <span class="n">device</span><span class="p">:</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span> <span class="o">=</span> <span class="n">DEVICE</span><span class="p">,</span>
 <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span>
-  <span class="n">logits_tensor</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">from_numpy</span><span class="p">(</span><span class="n">logits_list</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">DEVICE</span><span class="p">)</span>
-  <span class="n">labels_tensor</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">from_numpy</span><span class="p">(</span><span class="n">labels_list</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">DEVICE</span><span class="p">)</span>
-  <span class="n">temperature</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Parameter</span><span class="p">(</span><span class="n">torch</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">DEVICE</span><span class="p">))</span>
-  <span class="n">criterion</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">CrossEntropyLoss</span><span class="p">()</span>
-  <span class="n">optimizer</span> <span class="o">=</span> <span class="n">optim</span><span class="o">.</span><span class="n">LBFGS</span><span class="p">(</span>
-      <span class="p">[</span><span class="n">temperature</span><span class="p">],</span>
-      <span class="n">lr</span><span class="o">=</span><span class="n">lr</span><span class="p">,</span>
-      <span class="n">max_iter</span><span class="o">=</span><span class="n">max_iter</span><span class="p">,</span>
-      <span class="n">line_search_fn</span><span class="o">=</span><span class="s1">'strong_wolfe'</span>
-  <span class="p">)</span>
-  
-  <span class="k">def</span> <span class="nf">_eval</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
-    <span class="n">loss</span> <span class="o">=</span> <span class="n">criterion</span><span class="p">(</span><span class="n">T_scaling</span><span class="p">(</span><span class="n">logits_tensor</span><span class="p">,</span> <span class="n">temperature</span><span class="p">),</span> <span class="n">labels_tensor</span><span class="p">)</span>
-    <span class="n">loss</span><span class="o">.</span><span class="n">backward</span><span class="p">()</span>
-    <span class="k">return</span> <span class="n">loss</span>
-  
-  <span class="n">optimizer</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">_eval</span><span class="p">)</span>  
-  <span class="k">return</span> <span class="nb">round</span><span class="p">(</span><span class="n">temperature</span><span class="o">.</span><span class="n">item</span><span class="p">(),</span> <span class="mi">4</span><span class="p">)</span></div>
+    <span class="n">logits_tensor</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">from_numpy</span><span class="p">(</span><span class="n">logits_list</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
+    <span class="n">labels_tensor</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">from_numpy</span><span class="p">(</span><span class="n">labels_list</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">)</span>
+    <span class="n">temperature</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">Parameter</span><span class="p">(</span><span class="n">torch</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="n">device</span><span class="p">))</span>
+    <span class="n">criterion</span> <span class="o">=</span> <span class="n">nn</span><span class="o">.</span><span class="n">CrossEntropyLoss</span><span class="p">()</span>
+    <span class="n">optimizer</span> <span class="o">=</span> <span class="n">optim</span><span class="o">.</span><span class="n">LBFGS</span><span class="p">(</span>
+        <span class="p">[</span><span class="n">temperature</span><span class="p">],</span> <span class="n">lr</span><span class="o">=</span><span class="n">lr</span><span class="p">,</span> <span class="n">max_iter</span><span class="o">=</span><span class="n">max_iter</span><span class="p">,</span> <span class="n">line_search_fn</span><span class="o">=</span><span class="s2">"strong_wolfe"</span>
+    <span class="p">)</span>
+
+    <span class="kn">import</span> <span class="nn">time</span>
+
+    <span class="k">def</span> <span class="nf">_eval</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
+        <span class="n">loss</span> <span class="o">=</span> <span class="n">criterion</span><span class="p">(</span><span class="n">T_scaling</span><span class="p">(</span><span class="n">logits_tensor</span><span class="p">,</span> <span class="n">temperature</span><span class="p">),</span> <span class="n">labels_tensor</span><span class="p">)</span>
+        <span class="n">loss</span><span class="o">.</span><span class="n">backward</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">loss</span>
+
+    <span class="n">optimizer</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">_eval</span><span class="p">)</span>
+    <span class="k">return</span> <span class="nb">round</span><span class="p">(</span><span class="n">temperature</span><span class="o">.</span><span class="n">item</span><span class="p">(),</span> <span class="mi">4</span><span class="p">)</span></div>
 </pre></div>
         </article>
       </div>
diff --git a/docs/_modules/dialogy/workflow/workflow.html b/docs/_modules/dialogy/workflow/workflow.html
index 7b37f76f..d26341f7 100644
--- a/docs/_modules/dialogy/workflow/workflow.html
+++ b/docs/_modules/dialogy/workflow/workflow.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../../../genindex.html" /><link rel="search" title="Search" href="../../../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.workflow.workflow - dialogy 0.9.5 documentation</title>
+        <title>dialogy.workflow.workflow - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../../../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../../../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -403,6 +403,9 @@ <h1>Source code for dialogy.workflow.workflow</h1><div class="highlight"><pre>
 <span class="sd">        """</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">__reset</span><span class="p">()</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">lock</span> <span class="o">=</span> <span class="n">Lock</span><span class="p">()</span>
+        <span class="k">for</span> <span class="n">plugin</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">plugins</span><span class="p">:</span>
+            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">plugin</span><span class="p">,</span> <span class="n">Plugin</span><span class="p">):</span>
+                <span class="n">plugin</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">debug</span> <span class="o">&amp;</span> <span class="n">plugin</span><span class="o">.</span><span class="n">debug</span>
 
     <span class="k">def</span> <span class="nf">__reset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
         <span class="sd">"""</span>
@@ -431,7 +434,7 @@ <h1>Source code for dialogy.workflow.workflow</h1><div class="highlight"><pre>
             <span class="bp">self</span><span class="o">.</span><span class="n">input</span> <span class="o">=</span> <span class="n">Input</span><span class="o">.</span><span class="n">from_dict</span><span class="p">({</span><span class="n">attribute</span><span class="p">:</span> <span class="n">value</span><span class="p">},</span> <span class="n">reference</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">input</span><span class="p">)</span>
         <span class="k">elif</span> <span class="n">attribute</span> <span class="ow">in</span> <span class="n">const</span><span class="o">.</span><span class="n">OUTPUT_ATTRIBUTES</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)):</span>
             <span class="k">if</span> <span class="ow">not</span> <span class="n">replace</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
-                <span class="n">previous_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">output</span><span class="o">.</span><span class="n">intents</span> <span class="k">if</span> <span class="n">attribute</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">INTENTS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">output</span><span class="o">.</span><span class="n">entities</span> <span class="c1"># type: ignore</span>
+                <span class="n">previous_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">output</span><span class="o">.</span><span class="n">intents</span> <span class="k">if</span> <span class="n">attribute</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">INTENTS</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">output</span><span class="o">.</span><span class="n">entities</span>  <span class="c1"># type: ignore</span>
 
                 <span class="n">value</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span>
                     <span class="n">previous_value</span> <span class="o">+</span> <span class="n">value</span><span class="p">,</span>
@@ -439,9 +442,7 @@ <h1>Source code for dialogy.workflow.workflow</h1><div class="highlight"><pre>
                     <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
                 <span class="p">)</span>
 
-            <span class="bp">self</span><span class="o">.</span><span class="n">output</span> <span class="o">=</span> <span class="n">Output</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span>
-                <span class="p">{</span><span class="n">attribute</span><span class="p">:</span> <span class="n">value</span><span class="p">},</span> <span class="n">reference</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">output</span>
-            <span class="p">)</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">output</span> <span class="o">=</span> <span class="n">Output</span><span class="o">.</span><span class="n">from_dict</span><span class="p">({</span><span class="n">attribute</span><span class="p">:</span> <span class="n">value</span><span class="p">},</span> <span class="n">reference</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">output</span><span class="p">)</span>
 
         <span class="k">elif</span> <span class="n">dest</span> <span class="o">==</span> <span class="n">const</span><span class="o">.</span><span class="n">OUTPUT</span><span class="p">:</span>
             <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">value</span><span class="si">=}</span><span class="s2"> should be a List[Intent] or List[BaseEntity]."</span><span class="p">)</span>
diff --git a/docs/_modules/index.html b/docs/_modules/index.html
index c71888f3..7403d0d2 100644
--- a/docs/_modules/index.html
+++ b/docs/_modules/index.html
@@ -5,7 +5,7 @@
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>Overview: module code - dialogy 0.9.5 documentation</title>
+        <title>Overview: module code - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -124,7 +124,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -147,7 +147,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt
index 2e3ea501..d8e96c0e 100644
--- a/docs/_sources/index.rst.txt
+++ b/docs/_sources/index.rst.txt
@@ -193,7 +193,6 @@ Index
    Entity Scoring <./source/dialogy.base.entity_extractor>
    Lower Bound Duckling Entities <./source/dialogy.plugins.text.lb_plugin>
    Combine DateTime Over Slots <./source/dialogy.plugins.text.combine_date_time>
-   Retain Classified Intent <./source/dialogy.plugins.text.classification.retain_intent>
 
 .. toctree::
    :maxdepth: 1
diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js
index 863704e1..c84f1f77 100644
--- a/docs/_static/documentation_options.js
+++ b/docs/_static/documentation_options.js
@@ -1,6 +1,6 @@
 var DOCUMENTATION_OPTIONS = {
     URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
-    VERSION: '0.9.5',
+    VERSION: '0.9.6',
     LANGUAGE: 'None',
     COLLAPSE_INDEX: false,
     BUILDER: 'html',
diff --git a/docs/genindex.html b/docs/genindex.html
index d0e6adcc..0fcb889d 100644
--- a/docs/genindex.html
+++ b/docs/genindex.html
@@ -4,7 +4,7 @@
     <meta name="viewport" content="width=device-width,initial-scale=1"/>
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search.html" />
 
-    <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/><title>Index - dialogy 0.9.5 documentation</title>
+    <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/><title>Index - dialogy 0.9.6 documentation</title>
 <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
@@ -123,7 +123,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -146,7 +146,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -345,7 +345,7 @@ <h2>D</h2>
 </li>
         <li><a href="source/dialogy.workflow.html#dialogy.workflow.workflow.Workflow.debug">debug (Workflow attribute)</a>
 </li>
-        <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.deserialize_duckling_entity">deserialize_duckling_entity() (in module dialogy.types.entity.deserialize)</a>
+        <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.deserialize_duckling">deserialize_duckling() (EntityDeserializer class method)</a>
 </li>
         <li>
     dialogy
@@ -779,6 +779,8 @@ <h2>E</h2>
   <table style="width: 100%" class="indextable genindextable"><tr>
     <td style="width: 33%; vertical-align: top;"><ul>
         <li><a href="source/dialogy.base.output.html#dialogy.base.output.Output.entities">entities (Output attribute)</a>
+</li>
+        <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.entitiy_classes">entitiy_classes (EntityDeserializer attribute)</a>
 </li>
         <li><a href="source/dialogy.base.entity_extractor.html#dialogy.base.entity_extractor.EntityScoringMixin.entity_consensus">entity_consensus() (EntityScoringMixin method)</a>
 </li>
@@ -804,6 +806,8 @@ <h2>E</h2>
         </ul></li>
     </ul></td>
     <td style="width: 33%; vertical-align: top;"><ul>
+        <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer">EntityDeserializer (class in dialogy.types.entity.deserialize)</a>
+</li>
         <li><a href="source/dialogy.base.entity_extractor.html#dialogy.base.entity_extractor.EntityScoringMixin">EntityScoringMixin (class in dialogy.base.entity_extractor)</a>
 </li>
         <li><a href="source/dialogy.workflow.html#dialogy.workflow.workflow.Workflow.execute">execute() (Workflow method)</a>
@@ -842,9 +846,11 @@ <h2>F</h2>
         </ul></li>
     </ul></td>
     <td style="width: 33%; vertical-align: top;"><ul>
-        <li><a href="source/dialogy.types.entity.credit_card_number.html#dialogy.types.entity.credit_card_number.CreditCardNumberEntity.from_duckling">from_duckling() (CreditCardNumberEntity class method)</a>
+        <li><a href="source/dialogy.types.entity.base_entity.html#dialogy.types.entity.base_entity.BaseEntity.from_duckling">from_duckling() (BaseEntity class method)</a>
 
         <ul>
+          <li><a href="source/dialogy.types.entity.credit_card_number.html#dialogy.types.entity.credit_card_number.CreditCardNumberEntity.from_duckling">(CreditCardNumberEntity class method)</a>
+</li>
           <li><a href="source/dialogy.types.entity.amount_of_money.html#dialogy.types.entity.amount_of_money.CurrencyEntity.from_duckling">(CurrencyEntity class method)</a>
 </li>
           <li><a href="source/dialogy.types.entity.duration.html#dialogy.types.entity.duration.DurationEntity.from_duckling">(DurationEntity class method)</a>
@@ -872,12 +878,16 @@ <h2>F</h2>
   <h2>G</h2>
   <table style="width: 100%" class="indextable genindextable"><tr>
     <td style="width: 33%; vertical-align: top;"><ul>
+        <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.get_dimension">get_dimension() (EntityDeserializer static method)</a>
+</li>
         <li><a href="source/dialogy.plugins.text.list_entity_plugin.html#dialogy.plugins.text.list_entity_plugin.ListEntityPlugin.get_entities">get_entities() (ListEntityPlugin method)</a>
 
         <ul>
           <li><a href="source/dialogy.plugins.text.list_search_plugin.html#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.get_entities">(ListSearchPlugin method)</a>
 </li>
         </ul></li>
+        <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.get_entity_class_str">get_entity_class_str() (EntityDeserializer class method)</a>
+</li>
         <li><a href="source/dialogy.plugins.text.canonicalization.html#dialogy.plugins.text.canonicalization.get_entity_type">get_entity_type() (in module dialogy.plugins.text.canonicalization)</a>
 </li>
         <li><a href="source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.get_formatted_gridparams">get_formatted_gridparams() (MLPMultiClass static method)</a>
@@ -886,10 +896,12 @@ <h2>G</h2>
 </li>
         <li><a href="source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.get_gridsearch_grid">get_gridsearch_grid() (MLPMultiClass method)</a>
 </li>
-        <li><a href="source/dialogy.utils.html#dialogy.utils.temperature_scaling.get_metrics">get_metrics() (in module dialogy.utils.temperature_scaling)</a>
+        <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.get_keys_in_value_as_str">get_keys_in_value_as_str() (EntityDeserializer static method)</a>
 </li>
     </ul></td>
     <td style="width: 33%; vertical-align: top;"><ul>
+        <li><a href="source/dialogy.utils.html#dialogy.utils.temperature_scaling.get_metrics">get_metrics() (in module dialogy.utils.temperature_scaling)</a>
+</li>
         <li><a href="source/dialogy.plugins.text.duckling_plugin.html#dialogy.plugins.text.duckling_plugin.DucklingPlugin.get_operator">get_operator() (DucklingPlugin method)</a>
 </li>
         <li><a href="source/dialogy.plugins.text.combine_date_time.html#dialogy.plugins.text.combine_date_time.CombineDateTimeOverSlots.get_tracked_slots">get_tracked_slots() (CombineDateTimeOverSlots method)</a>
@@ -904,6 +916,8 @@ <h2>G</h2>
           <li><a href="source/dialogy.types.entity.time_interval.html#dialogy.types.entity.time_interval.TimeIntervalEntity.get_value">(TimeIntervalEntity method)</a>
 </li>
         </ul></li>
+        <li><a href="source/dialogy.plugins.text.list_search_plugin.html#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.get_words_from_nlp">get_words_from_nlp() (ListSearchPlugin method)</a>
+</li>
         <li><a href="source/dialogy.cli.html#dialogy.cli.workflow.get_workflow">get_workflow() (in module dialogy.cli.workflow)</a>
 </li>
         <li><a href="source/dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity.grain">grain (TimeEntity attribute)</a>
@@ -1269,6 +1283,8 @@ <h2>P</h2>
 </li>
     </ul></td>
     <td style="width: 33%; vertical-align: top;"><ul>
+        <li><a href="source/dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity.pick_value">pick_value() (TimeEntity class method)</a>
+</li>
         <li><a href="source/dialogy.base.plugin.html#dialogy.base.plugin.Plugin">Plugin (class in dialogy.base.plugin)</a>
 </li>
         <li><a href="source/dialogy.workflow.html#dialogy.workflow.workflow.Workflow.plugins">plugins (Workflow attribute)</a>
@@ -1309,6 +1325,8 @@ <h2>R</h2>
 </li>
     </ul></td>
     <td style="width: 33%; vertical-align: top;"><ul>
+        <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.register">register() (EntityDeserializer class method)</a>
+</li>
         <li><a href="source/dialogy.base.entity_extractor.html#dialogy.base.entity_extractor.EntityScoringMixin.remove_low_scoring_entities">remove_low_scoring_entities() (EntityScoringMixin method)</a>
 </li>
         <li><a href="source/dialogy.constants.html#dialogy.constants.SIGNAL.REPRESENTATION">REPRESENTATION (SIGNAL attribute)</a>
@@ -1507,6 +1525,8 @@ <h2>V</h2>
 
         <ul>
           <li><a href="source/dialogy.plugins.text.duckling_plugin.html#dialogy.plugins.text.duckling_plugin.DucklingPlugin.validate">(DucklingPlugin method)</a>
+</li>
+          <li><a href="source/dialogy.types.entity.deserialize.html#dialogy.types.entity.deserialize.EntityDeserializer.validate">(EntityDeserializer class method)</a>
 </li>
           <li><a href="source/dialogy.plugins.text.classification.html#dialogy.plugins.text.classification.mlp.MLPMultiClass.validate">(MLPMultiClass method)</a>
 </li>
diff --git a/docs/index.html b/docs/index.html
index 540b01fc..a940b71f 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="dialogy.base.input package" href="source/dialogy.base.input.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy 0.9.5 documentation</title>
+        <title>dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="#"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="#"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="#">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/objects.inv b/docs/objects.inv
index b6f3b864..ac528fc9 100644
Binary files a/docs/objects.inv and b/docs/objects.inv differ
diff --git a/docs/py-modindex.html b/docs/py-modindex.html
index 0277b3c8..d011a2e1 100644
--- a/docs/py-modindex.html
+++ b/docs/py-modindex.html
@@ -4,7 +4,7 @@
     <meta name="viewport" content="width=device-width,initial-scale=1"/>
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" />
 
-    <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/><title>Python Module Index - dialogy 0.9.5 documentation</title>
+    <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/><title>Python Module Index - dialogy 0.9.6 documentation</title>
 <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
@@ -123,7 +123,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -146,7 +146,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/search.html b/docs/search.html
index 00e2880d..30a637d5 100644
--- a/docs/search.html
+++ b/docs/search.html
@@ -4,7 +4,7 @@
     <meta name="viewport" content="width=device-width,initial-scale=1"/>
     <meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="#" />
 
-    <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/><title>Search - dialogy 0.9.5 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
+    <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/><title>Search - dialogy 0.9.6 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
     <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=0af69da206d614734f649b27d4cdc2dd6c31f41d" />
@@ -122,7 +122,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -145,7 +145,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="#" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/searchindex.js b/docs/searchindex.js
index 5b601d4f..0e6f3cb0 100644
--- a/docs/searchindex.js
+++ b/docs/searchindex.js
@@ -1,1 +1,1 @@
-Search.setIndex({docnames:["index","source/dialogy","source/dialogy.base","source/dialogy.base.entity_extractor","source/dialogy.base.input","source/dialogy.base.output","source/dialogy.base.plugin","source/dialogy.cli","source/dialogy.constants","source/dialogy.plugins","source/dialogy.plugins.text","source/dialogy.plugins.text.calibration","source/dialogy.plugins.text.canonicalization","source/dialogy.plugins.text.classification","source/dialogy.plugins.text.combine_date_time","source/dialogy.plugins.text.duckling_plugin","source/dialogy.plugins.text.lb_plugin","source/dialogy.plugins.text.list_entity_plugin","source/dialogy.plugins.text.list_search_plugin","source/dialogy.plugins.text.merge_asr_output","source/dialogy.plugins.text.slot_filler","source/dialogy.plugins.text.voting","source/dialogy.types","source/dialogy.types.entity","source/dialogy.types.entity.amount_of_money","source/dialogy.types.entity.base_entity","source/dialogy.types.entity.credit_card_number","source/dialogy.types.entity.deserialize","source/dialogy.types.entity.duration","source/dialogy.types.entity.keyword","source/dialogy.types.entity.numerical","source/dialogy.types.entity.people","source/dialogy.types.entity.time","source/dialogy.types.entity.time_interval","source/dialogy.types.intent","source/dialogy.types.plugin","source/dialogy.types.signal","source/dialogy.types.slots","source/dialogy.types.utterances","source/dialogy.utils","source/dialogy.workflow","source/modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["index.rst","source/dialogy.rst","source/dialogy.base.rst","source/dialogy.base.entity_extractor.rst","source/dialogy.base.input.rst","source/dialogy.base.output.rst","source/dialogy.base.plugin.rst","source/dialogy.cli.rst","source/dialogy.constants.rst","source/dialogy.plugins.rst","source/dialogy.plugins.text.rst","source/dialogy.plugins.text.calibration.rst","source/dialogy.plugins.text.canonicalization.rst","source/dialogy.plugins.text.classification.rst","source/dialogy.plugins.text.combine_date_time.rst","source/dialogy.plugins.text.duckling_plugin.rst","source/dialogy.plugins.text.lb_plugin.rst","source/dialogy.plugins.text.list_entity_plugin.rst","source/dialogy.plugins.text.list_search_plugin.rst","source/dialogy.plugins.text.merge_asr_output.rst","source/dialogy.plugins.text.slot_filler.rst","source/dialogy.plugins.text.voting.rst","source/dialogy.types.rst","source/dialogy.types.entity.rst","source/dialogy.types.entity.amount_of_money.rst","source/dialogy.types.entity.base_entity.rst","source/dialogy.types.entity.credit_card_number.rst","source/dialogy.types.entity.deserialize.rst","source/dialogy.types.entity.duration.rst","source/dialogy.types.entity.keyword.rst","source/dialogy.types.entity.numerical.rst","source/dialogy.types.entity.people.rst","source/dialogy.types.entity.time.rst","source/dialogy.types.entity.time_interval.rst","source/dialogy.types.intent.rst","source/dialogy.types.plugin.rst","source/dialogy.types.signal.rst","source/dialogy.types.slots.rst","source/dialogy.types.utterances.rst","source/dialogy.utils.rst","source/dialogy.workflow.rst","source/modules.rst"],objects:{"":[[1,0,0,"-","dialogy"]],"dialogy.base":[[3,0,0,"-","entity_extractor"],[4,0,0,"-","input"],[5,0,0,"-","output"],[6,0,0,"-","plugin"]],"dialogy.base.entity_extractor":[[3,1,1,"","EntityScoringMixin"],[3,4,1,"","entity_scoring"]],"dialogy.base.entity_extractor.EntityScoringMixin":[[3,2,1,"","aggregate_entities"],[3,2,1,"","apply_filters"],[3,2,1,"","entity_consensus"],[3,2,1,"","make_transform_values"],[3,2,1,"","remove_low_scoring_entities"],[3,3,1,"","threshold"]],"dialogy.base.input":[[4,1,1,"","Input"]],"dialogy.base.input.Input":[[4,3,1,"","clf_feature"],[4,3,1,"","current_state"],[4,2,1,"","from_dict"],[4,3,1,"","history"],[4,2,1,"","json"],[4,3,1,"","lang"],[4,3,1,"","latent_entities"],[4,3,1,"","locale"],[4,3,1,"","previous_intent"],[4,3,1,"","reference_time"],[4,3,1,"","slot_tracker"],[4,3,1,"","timezone"],[4,3,1,"","transcripts"],[4,3,1,"","utterances"]],"dialogy.base.output":[[5,1,1,"","Output"]],"dialogy.base.output.Output":[[5,3,1,"","entities"],[5,2,1,"","from_dict"],[5,3,1,"","intents"],[5,2,1,"","json"],[5,3,1,"","original_intent"]],"dialogy.base.plugin":[[6,1,1,"","Plugin"]],"dialogy.base.plugin.Plugin":[[6,2,1,"","prevent"],[6,2,1,"","train"],[6,2,1,"","transform"],[6,2,1,"","utility"]],"dialogy.cli":[[7,4,1,"","add_project_command_arguments"],[7,4,1,"","add_workflow_command_arguments"],[7,4,1,"","main"],[7,0,0,"-","project"],[7,4,1,"","project_command_parser"],[7,0,0,"-","workflow"]],"dialogy.cli.project":[[7,4,1,"","manage_project"],[7,4,1,"","project_cli"]],"dialogy.cli.workflow":[[7,4,1,"","get_workflow"],[7,4,1,"","train_workflow"],[7,4,1,"","workflow_cli"]],"dialogy.constants":[[8,1,1,"","SIGNAL"]],"dialogy.constants.SIGNAL":[[8,3,1,"","NAME"],[8,3,1,"","REPRESENTATION"],[8,3,1,"","STRENGTH"]],"dialogy.plugins":[[10,0,0,"-","text"]],"dialogy.plugins.text":[[11,0,0,"-","calibration"],[12,0,0,"-","canonicalization"],[13,0,0,"-","classification"],[14,0,0,"-","combine_date_time"],[15,0,0,"-","duckling_plugin"],[16,0,0,"-","lb_plugin"],[17,0,0,"-","list_entity_plugin"],[18,0,0,"-","list_search_plugin"],[19,0,0,"-","merge_asr_output"],[20,0,0,"-","slot_filler"],[21,0,0,"-","voting"]],"dialogy.plugins.text.calibration":[[11,0,0,"-","xgb"]],"dialogy.plugins.text.calibration.xgb":[[11,1,1,"","CalibrationModel"],[11,1,1,"","FeatureExtractor"]],"dialogy.plugins.text.calibration.xgb.CalibrationModel":[[11,2,1,"","filter_asr_output"],[11,2,1,"","inference"],[11,2,1,"","predict"],[11,2,1,"","save"],[11,2,1,"","train"],[11,2,1,"","transform"],[11,2,1,"","utility"],[11,2,1,"","validate"]],"dialogy.plugins.text.calibration.xgb.FeatureExtractor":[[11,2,1,"","features"],[11,2,1,"","fit"],[11,2,1,"","transform"]],"dialogy.plugins.text.canonicalization":[[12,1,1,"","CanonicalizationPlugin"],[12,4,1,"","get_entity_type"]],"dialogy.plugins.text.canonicalization.CanonicalizationPlugin":[[12,2,1,"","mask_transcript"],[12,2,1,"","transform"],[12,2,1,"","utility"]],"dialogy.plugins.text.classification":[[13,0,0,"-","mlp"],[13,0,0,"-","retain_intent"],[13,0,0,"-","tokenizers"],[13,0,0,"-","xlmr"]],"dialogy.plugins.text.classification.mlp":[[13,1,1,"","MLPMultiClass"]],"dialogy.plugins.text.classification.mlp.MLPMultiClass":[[13,2,1,"","get_formatted_gridparams"],[13,2,1,"","get_gridsearch_grid"],[13,2,1,"","inference"],[13,2,1,"","init_model"],[13,2,1,"","load"],[13,2,1,"","save"],[13,2,1,"","train"],[13,2,1,"","utility"],[13,5,1,"","valid_mlpmodel"],[13,2,1,"","validate"]],"dialogy.plugins.text.classification.retain_intent":[[13,1,1,"","RetainOriginalIntentPlugin"]],"dialogy.plugins.text.classification.retain_intent.RetainOriginalIntentPlugin":[[13,2,1,"","retain"],[13,2,1,"","utility"]],"dialogy.plugins.text.classification.tokenizers":[[13,4,1,"","identity_tokenizer"]],"dialogy.plugins.text.classification.xlmr":[[13,1,1,"","XLMRMultiClass"]],"dialogy.plugins.text.classification.xlmr.XLMRMultiClass":[[13,2,1,"","inference"],[13,2,1,"","init_model"],[13,2,1,"","load"],[13,2,1,"","save"],[13,2,1,"","train"],[13,2,1,"","utility"],[13,5,1,"","valid_labelencoder"],[13,2,1,"","validate"]],"dialogy.plugins.text.combine_date_time":[[14,1,1,"","CombineDateTimeOverSlots"],[14,4,1,"","has_time_component"],[14,4,1,"","is_date"]],"dialogy.plugins.text.combine_date_time.CombineDateTimeOverSlots":[[14,3,1,"","DATE"],[14,3,1,"","DATETIME"],[14,3,1,"","SUPPORTED_ENTITIES"],[14,3,1,"","TIME"],[14,2,1,"","combine_time_entities_from_slots"],[14,2,1,"","get_tracked_slots"],[14,2,1,"","join"],[14,2,1,"","pick_previously_filled_time_entity"],[14,2,1,"","utility"]],"dialogy.plugins.text.duckling_plugin":[[15,1,1,"","DucklingPlugin"]],"dialogy.plugins.text.duckling_plugin.DucklingPlugin":[[15,3,1,"","FUTURE"],[15,3,1,"","PAST"],[15,2,1,"","apply_entity_classes"],[15,2,1,"","apply_filters"],[15,2,1,"","get_operator"],[15,2,1,"","parse"],[15,2,1,"","select_datetime"],[15,2,1,"","transform"],[15,2,1,"","utility"],[15,2,1,"","validate"]],"dialogy.plugins.text.lb_plugin":[[16,1,1,"","DucklingPluginLB"]],"dialogy.plugins.text.lb_plugin.DucklingPluginLB":[[16,3,1,"","headers"],[16,3,1,"","reference_time"],[16,2,1,"","utility"]],"dialogy.plugins.text.list_entity_plugin":[[17,1,1,"","ListEntityPlugin"]],"dialogy.plugins.text.list_entity_plugin.ListEntityPlugin":[[17,2,1,"","get_entities"],[17,2,1,"","ner_search"],[17,2,1,"","regex_search"],[17,2,1,"","transform"],[17,2,1,"","utility"]],"dialogy.plugins.text.list_search_plugin":[[18,1,1,"","ListSearchPlugin"]],"dialogy.plugins.text.list_search_plugin.ListSearchPlugin":[[18,2,1,"","dp_search"],[18,2,1,"","fuzzy_init"],[18,2,1,"","get_entities"],[18,2,1,"","get_fuzzy_dp_search"],[18,2,1,"","search_regex"],[18,2,1,"","utility"]],"dialogy.plugins.text.merge_asr_output":[[19,1,1,"","MergeASROutputPlugin"],[19,4,1,"","merge_asr_output"]],"dialogy.plugins.text.merge_asr_output.MergeASROutputPlugin":[[19,2,1,"","transform"],[19,2,1,"","utility"]],"dialogy.plugins.text.slot_filler":[[20,0,0,"-","rule_slot_filler"]],"dialogy.plugins.text.slot_filler.rule_slot_filler":[[20,1,1,"","RuleBasedSlotFillerPlugin"]],"dialogy.plugins.text.slot_filler.rule_slot_filler.RuleBasedSlotFillerPlugin":[[20,2,1,"","fill"],[20,2,1,"","utility"]],"dialogy.types":[[23,0,0,"-","entity"],[34,0,0,"-","intent"],[35,0,0,"-","plugin"],[36,0,0,"-","signal"],[37,0,0,"-","slots"],[38,0,0,"-","utterances"]],"dialogy.types.entity":[[24,0,0,"-","amount_of_money"],[25,0,0,"-","base_entity"],[26,0,0,"-","credit_card_number"],[27,0,0,"-","deserialize"],[28,0,0,"-","duration"],[29,0,0,"-","keyword"],[30,0,0,"-","numerical"],[31,0,0,"-","people"],[32,0,0,"-","time"],[33,0,0,"-","time_interval"]],"dialogy.types.entity.amount_of_money":[[24,1,1,"","CurrencyEntity"]],"dialogy.types.entity.amount_of_money.CurrencyEntity":[[24,3,1,"","entity_type"],[24,2,1,"","from_duckling"],[24,2,1,"","get_value"],[24,3,1,"","unit"]],"dialogy.types.entity.base_entity":[[25,1,1,"","BaseEntity"],[25,4,1,"","entity_synthesis"]],"dialogy.types.entity.base_entity.BaseEntity":[[25,2,1,"","add_parser"],[25,3,1,"","alternative_index"],[25,3,1,"","alternative_indices"],[25,3,1,"","body"],[25,2,1,"","copy"],[25,3,1,"","dim"],[25,3,1,"","entity_type"],[25,2,1,"","from_dict"],[25,2,1,"","get_value"],[25,2,1,"","json"],[25,3,1,"","latent"],[25,3,1,"","parsers"],[25,3,1,"","range"],[25,3,1,"","score"],[25,3,1,"","type"],[25,3,1,"","value"],[25,3,1,"","values"]],"dialogy.types.entity.credit_card_number":[[26,1,1,"","CreditCardNumberEntity"]],"dialogy.types.entity.credit_card_number.CreditCardNumberEntity":[[26,3,1,"","entity_type"],[26,2,1,"","from_duckling"],[26,3,1,"","issuer"],[26,3,1,"","value"],[26,3,1,"","values"]],"dialogy.types.entity.deserialize":[[27,4,1,"","deserialize_duckling_entity"]],"dialogy.types.entity.duration":[[28,1,1,"","DurationEntity"]],"dialogy.types.entity.duration.DurationEntity":[[28,2,1,"","as_time"],[28,3,1,"","entity_type"],[28,2,1,"","from_duckling"],[28,3,1,"","normalized"],[28,3,1,"","unit"]],"dialogy.types.entity.keyword":[[29,1,1,"","KeywordEntity"]],"dialogy.types.entity.keyword.KeywordEntity":[[29,3,1,"","alternative_index"],[29,3,1,"","alternative_indices"],[29,3,1,"","body"],[29,3,1,"","dim"],[29,3,1,"","entity_type"],[29,3,1,"","latent"],[29,3,1,"","parsers"],[29,3,1,"","range"],[29,3,1,"","score"],[29,3,1,"","type"],[29,3,1,"","value"],[29,3,1,"","values"]],"dialogy.types.entity.numerical":[[30,1,1,"","NumericalEntity"]],"dialogy.types.entity.numerical.NumericalEntity":[[30,2,1,"","as_time"],[30,3,1,"","entity_type"],[30,2,1,"","from_duckling"]],"dialogy.types.entity.people":[[31,1,1,"","PeopleEntity"]],"dialogy.types.entity.people.PeopleEntity":[[31,3,1,"","entity_type"],[31,2,1,"","from_duckling"]],"dialogy.types.entity.time":[[32,1,1,"","TimeEntity"]],"dialogy.types.entity.time.TimeEntity":[[32,2,1,"","collect_datetime_values"],[32,3,1,"","dim"],[32,2,1,"","from_duckling"],[32,2,1,"","get_value"],[32,3,1,"","grain"],[32,2,1,"","is_uniq_date_from_values"],[32,2,1,"","is_uniq_day_from_values"],[32,3,1,"","origin"],[32,2,1,"","set_entity_type"]],"dialogy.types.entity.time_interval":[[33,1,1,"","TimeIntervalEntity"]],"dialogy.types.entity.time_interval.TimeIntervalEntity":[[33,2,1,"","collect_datetime_values"],[33,3,1,"","dim"],[33,2,1,"","from_duckling"],[33,3,1,"","from_value"],[33,2,1,"","get_value"],[33,3,1,"","origin"],[33,3,1,"","to_value"],[33,3,1,"","type"],[33,3,1,"","value"],[33,3,1,"","value_keys"],[33,3,1,"","values"]],"dialogy.types.intent":[[34,1,1,"","Intent"]],"dialogy.types.intent.Intent":[[34,2,1,"","add_parser"],[34,3,1,"","alternative_index"],[34,2,1,"","apply"],[34,2,1,"","cleanup"],[34,2,1,"","fill_slot"],[34,2,1,"","json"],[34,3,1,"","name"],[34,3,1,"","parsers"],[34,3,1,"","score"],[34,3,1,"","slots"]],"dialogy.types.signal":[[36,0,0,"-","signal"]],"dialogy.types.slots":[[37,1,1,"","Slot"]],"dialogy.types.slots.Slot":[[37,2,1,"","add"],[37,2,1,"","clear"],[37,2,1,"","json"],[37,3,1,"","name"],[37,3,1,"","types"],[37,3,1,"","values"]],"dialogy.utils":[[39,0,0,"-","datetime"],[39,0,0,"-","file_handler"],[39,0,0,"-","logger"],[39,0,0,"-","misc"],[39,0,0,"-","naive_lang_detect"],[39,0,0,"-","normalize_utterance"],[39,0,0,"-","temperature_scaling"]],"dialogy.utils.datetime":[[39,4,1,"","dt2timestamp"],[39,4,1,"","is_unix_ts"],[39,4,1,"","make_unix_ts"],[39,4,1,"","unix_ts_to_datetime"]],"dialogy.utils.file_handler":[[39,4,1,"","create_timestamps_path"],[39,4,1,"","load_file"],[39,4,1,"","read_from_json"],[39,4,1,"","save_file"],[39,4,1,"","save_to_json"]],"dialogy.utils.misc":[[39,4,1,"","traverse_dict"],[39,4,1,"","validate_type"]],"dialogy.utils.naive_lang_detect":[[39,4,1,"","lang_detect_from_text"]],"dialogy.utils.normalize_utterance":[[39,4,1,"","dict_get"],[39,4,1,"","is_each_element"],[39,4,1,"","is_list"],[39,4,1,"","is_list_of_string"],[39,4,1,"","is_string"],[39,4,1,"","is_unsqueezed_utterance"],[39,4,1,"","is_utterance"],[39,4,1,"","normalize"],[39,4,1,"","utterance2alternatives"]],"dialogy.utils.temperature_scaling":[[39,4,1,"","T_scaling"],[39,4,1,"","calc_bins"],[39,4,1,"","fit_ts_parameter"],[39,4,1,"","get_metrics"],[39,4,1,"","save_reliability_graph"]],"dialogy.workflow":[[40,0,0,"-","workflow"]],"dialogy.workflow.workflow":[[40,1,1,"","Workflow"]],"dialogy.workflow.workflow.Workflow":[[40,3,1,"","NON_SERIALIZABLE_FIELDS"],[40,3,1,"","debug"],[40,2,1,"","execute"],[40,2,1,"","flush"],[40,3,1,"","input"],[40,2,1,"","json"],[40,3,1,"","lock"],[40,3,1,"","output"],[40,3,1,"","plugins"],[40,2,1,"","run"],[40,2,1,"","set"],[40,2,1,"","train"]],dialogy:[[2,0,0,"-","base"],[7,0,0,"-","cli"],[8,0,0,"-","constants"],[9,0,0,"-","plugins"],[22,0,0,"-","types"],[39,0,0,"-","utils"],[40,0,0,"-","workflow"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","function","Python function"],"5":["py","property","Python property"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:function","5":"py:property"},terms:{"0":[4,5,6,8,12,13,14,15,16,17,18,26,28,30,32,33,34,39],"00":[4,14,15,30,32,33],"000":[15,32,33],"0000":14,"001":39,"01":[15,30,32],"013":[],"014":[],"01t04":[],"01t08":[],"01t09":15,"01t13":15,"02":[15,32,33,39],"02116":13,"02t00":15,"03":[15,33],"034":[],"04":[32,33],"04t18":33,"05":[4,14,15,30,32,33],"05t00":15,"06":[],"07":15,"07t00":33,"07t19":39,"08":[],"08333333333333333":15,"09":[],"099":[],"0th":3,"0x7f01380da490":[],"0x7f0924afb460":[],"0x7f1468ef5460":[],"0x7f1a672044f0":[],"0x7f239778b3d0":[],"0x7f23fdf070d0":[],"0x7f26d4bec4c0":[],"0x7f299944bfa0":[],"0x7f395fdc9130":15,"0x7f3ba5a21310":[],"0x7f3d1bd58730":[],"0x7f412bc76400":[],"0x7f4509a98af0":[],"0x7f458d2a5580":[],"0x7f46342675b0":[],"0x7f4bd15f0550":[],"0x7f4c9f156460":[],"0x7f500450c1c0":[],"0x7f55c77c84c0":[],"0x7f571b6d4160":[],"0x7f6b03748d00":[],"0x7f6d9c05b2e0":[],"0x7f7147cee370":[],"0x7f7415e69dc0":[],"0x7f7502619eb0":[],"0x7f76760eb550":[],"0x7f7b64f9ffa0":[],"0x7f843a1c5fd0":[],"0x7f8bf9651070":[],"0x7f8ced4426a0":[],"0x7f8fd69c5820":[],"0x7f8fdce11580":[],"0x7f949b167490":[],"0x7f96df591790":[],"0x7fa6eaeb5490":[],"0x7fa9ff656370":[],"0x7fab8d696460":[],"0x7fae7f5a16a0":[],"0x7fbb501c2100":[],"0x7fbc82218610":[],"0x7fbf38c22460":[],"0x7fc28dcf2700":[],"0x7fc8bb68c280":[],"0x7fcf947de4c0":[],"0x7fcf9fc94f40":[],"0x7fd1e3a4fb50":[],"0x7fd38c638df0":[],"0x7fd3a476c3d0":[],"0x7fd6c1eaadf0":[],"0x7fd7ac0ad640":[],"0x7fe08166aa60":[],"0x7fe10623f700":[],"0x7fe13e70e940":[],"0x7fe524f7c6a0":[],"0x7ff4e041f400":[],"0x7ff675de6f40":[],"0x7ff7f72824f0":[],"1":[0,4,5,6,8,13,14,15,17,18,19,26,28,30,31,32,33,34,39],"10":[4,6,14,15,33],"10000":39,"101":[],"105":[],"106":[],"107":[],"108":[],"109":[],"11":[6,15,28,30,39],"110":[],"111":[],"112":[],"113":[],"114":[],"115":[],"116":15,"117":[],"118":[],"119":[],"11t00":[],"11t17":15,"11t18":33,"12":[6,14,15,30],"120":[],"121":[],"122":[],"123":[],"124":[],"125":[],"127":[],"129":[],"12t11":30,"12t15":[],"12t16":[],"12t19":[],"12t20":[],"12t21":[],"13":[6,15,39],"131":[],"134":[],"136":[],"138":[],"13t00":[],"13t06":[],"13t16":[],"13t18":[],"13t22":[],"14":[6,15,39],"141":15,"143":15,"14t00":33,"14t16":[],"14t17":[],"14t18":[],"14t19":[],"15":[6,15,39],"15t00":[4,14],"15t06":[],"15t08":[],"15t10":[],"15t11":[],"15t12":[],"15t13":[],"15t15":14,"15t16":[],"15t18":[],"15t19":[],"15t22":[],"15th":14,"16":[6,15,33],"160":[],"163":[],"1644241599537":39,"16t00":[],"16t06":[],"16t16":33,"16t18":[],"16t22":[],"17":[14,15],"17t16":32,"17t18":[],"18":[15,17],"183":[],"186":[],"18t16":[],"18t18":[],"19":15,"1911":13,"1996":32,"1_code":4,"1st":[15,32],"2":[0,4,5,6,8,14,15,17,19,26,28,30,31,32,33,34,39],"20":15,"2019":[14,32],"2021":[4,14,15,32,33],"2022":[15,30,32,33,39],"2023":32,"21":[15,32],"210":[],"212":[],"21t00":[],"22":[15,30],"22t17":15,"22t19":15,"23":[15,17],"236":[],"23t00":[15,32],"23t06":15,"23t16":33,"23t18":33,"23t22":15,"24":[15,17],"24t16":33,"24t18":33,"25":[15,26],"25t16":33,"25t18":33,"26":15,"267":[],"27":15,"270":[],"27t00":32,"27th":32,"28":[15,32],"280":[],"284":[],"28t00":[15,32,33],"29":15,"29th":32,"2h":[15,28],"2nd":15,"3":[0,4,5,6,14,15,17,19,26,28,30,31,32,33,34,39],"30":[4,14,15,30,32,33,39],"31":15,"31st":15,"31t00":15,"32":15,"320":[],"33":[15,17],"3333333333333333":32,"34":15,"340":[],"344":[],"347":[],"35":15,"350":[],"353":[],"36":15,"367":[],"37":[15,30],"371":[],"372":[],"38":15,"389":[],"39":[15,39],"394":[],"3pm":32,"4":[0,4,6,14,15,17,19,26,28,30,31,32,33,39],"40":15,"404":[],"408":[],"41":[15,26],"411":[],"4111111111111111":[15,26],"42":15,"420":[],"422":[],"43":15,"44":15,"441":[],"444":[],"45":15,"455":[],"459":[],"46":15,"47":15,"470":[],"476":[],"48":15,"49":[15,39],"499":[],"4pm":32,"5":[4,6,13,15,16,26,28,30,31,32,33,39],"50":39,"504":[],"51":39,"519":[],"52":[3,39],"53":39,"537827":39,"54":[15,39],"542":[],"548":[],"549":[4,6],"55":39,"550":[4,6],"551":[4,6],"552":[4,6],"553":[4,6],"56":39,"57":[],"570":[],"58":[],"59":[],"5pm":[32,33],"5th":15,"6":[4,6,15,30,32,33,39],"609":[],"610":[],"613":[],"625":[],"63":[],"635":[],"639":15,"64":[],"657":[],"659":[],"66":[],"6666666666666666":[],"667":[],"67":[],"688":[],"6pm":32,"6th":32,"7":[4,6,15,19,30,32,33,39],"705":[],"707":[],"71":[],"72":30,"7200":[15,28],"725":[],"73":[],"733":[],"74":[],"745":[],"750":[],"753":[],"758":[],"769":[],"77":[],"781":[],"784":[],"795":[],"7pm":15,"7th":32,"8":[4,6,14,15,30,32,34,39],"8000":[15,16],"809":[],"81":[],"82":[],"839":15,"85":[],"86":[],"8601":[4,39],"87":[],"88":[],"884":[],"89":[],"891":[],"893":[],"9":[4,6,15,28,30,39],"90":[],"91":[],"910":[],"914":[],"92":[],"93":[],"94":[],"95":[],"956":[],"958":[],"962":[],"97":[],"98":[],"988":[],"997":[],"9pm":15,"\u0915\u0930":15,"\u0915\u0932":15,"\u0917":15,"\u0925":15,"\u0926":15,"\u0939":15,"abstract":[0,2,11,12,13,17,18,19,20],"break":5,"case":[6,13,14,15,19,28,32,34,39,40],"class":[0,3,4,5,6,8,11,12,13,14,15,16,17,18,19,20,24,25,26,28,29,30,31,32,33,34,37,40],"const":[6,25,39],"default":[4,5,6,7,13,15,24,25,30,39,40],"do":[1,14,15,30,32],"final":40,"float":[3,4,5,11,13,15,18,24,25,29,34,39],"function":[6,7,11,12,13,15,17,18,19,20,25,39,40],"import":[4,5,6,15,17,19,24,26,28,29,30,31,32,33,34,35,38,39,40],"int":[4,13,16,18,25,29,34,39],"long":32,"new":[0,4,5,6,7,17,23,25],"null":14,"return":[0,3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,24,25,26,27,28,30,31,32,33,34,37,39,40],"static":[3,13],"super":6,"switch":[4,40],"true":[4,6,13,14,17,18,20,32,34,39],"try":[4,39],"while":[4,6,13,15,20,25],A:[0,3,4,5,6,7,13,15,16,17,18,19,20,22,25,31,34,39,40],As:20,At:14,For:[32,34],If:[4,5,6,13,15,17,18,20,25,32,34,39],In:[4,5,6,13,15,17,19,26,28,30,31,32,33,34,39],It:[0,4,5,6,11,24,32,40],Its:25,Not:20,Of:15,One:[17,18],Or:39,Such:6,That:5,The:[0,3,4,5,6,7,11,12,13,14,15,17,18,19,20,25,30,34,39,40],Then:4,There:[4,15,18,22,34],These:[3,4,6,15,17,29],To:[6,15,20,32],_:[6,11,13,17,18,19,20,26,28,30,31,32,33,34],__any__:15,__init__:6,__setattr__:[4,6],_alternatives_:11,_callback_:[4,14],_error_:13,_frozen_setattr:[4,6],_greeting_:[5,6],_make:[4,6],_meta:[15,17,28],_oos_:[],_thread:40,ab:13,abc:6,abil:34,abort:7,about:[15,32],abov:[3,15],absenc:4,absolut:15,access:[20,23,24,25,29,35,39],account:[6,34],across:[6,14,15],act:[15,22],action:[32,34],activ:[0,4],activate_latent_ent:15,ad:[3,15,23],adapt:39,add:[25,28,37,40],add_pars:[25,34],add_project_command_argu:7,add_workflow_command_argu:7,addit:[15,20],address:[15,31],adjust_signal_strength:[],advent:15,advis:6,affect:18,after:[6,14,15,28,40],again:6,against:3,aggreg:[3,4],aggregate_ent:3,aggregate_fn:[],ago:[],ahead:28,ai:[0,3,7,15,39],air:22,algorithm:[],all:[0,3,6,10,11,17,18,19,24,25,30,32,33,34,37,40],allocate_lock:40,allow:[4,17,20],along:[0,6],alpha2:15,alreadi:[6,7,15,22],already_paid:15,also:[0,5,6,13,15,17,28,30],altern:[6,11,12,14,15,16,17,18,19,38,39],alternative_index:[4,5,6,14,15,17,24,25,26,27,28,29,30,31,32,33,34],alternative_indic:[15,24,25,26,28,29,30,31,32,33],alwai:[5,15],am:[4,11,15,32,33],am_scor:0,ambigu:15,amount:[0,15,24,34],amount_of_monei:[22,23],an:[0,2,3,5,6,7,11,12,13,15,17,18,19,20,22,25,29,34,39,40],ani:[0,3,4,5,6,7,11,12,13,14,15,17,18,19,20,23,24,25,26,28,29,32,33,34,37,39,40],anoth:[18,34],answer:34,anyon:6,anyth:6,apart:[5,32],api:[0,4,5,15,40],append:[6,13],appli:[3,6,13,15,20,25,34,39],applic:[0,15],apply_entity_class:15,apply_filt:[3,15],appropri:[13,15],april:32,ar:[0,3,4,5,6,7,11,13,14,15,17,18,19,20,22,23,24,31,32,34,37,39,40],arbitrari:[5,25,39],aren:[6,40],arg:[7,13],argbrighton:[15,16],args_map:13,argument:[0,4,5,7,39],argumentpars:7,arrang:20,artifact:[7,13,40],arxiv:13,as_tim:[28,30],asia:[4,15,26,28,30,31,32,33,39],asr:[0,4,11,13,19,29,39],asr_output:11,assert:39,assign:4,assist:[20,39],associ:[20,22,34],assum:[6,14,15],assumpt:30,attach:[4,6],attempt:[],attent:6,attr:[4,6],attribut:[4,5,7,15,17,24,25,28,30,32,33,34,40],attributeerror:13,automat:34,avail:[7,13,14,17,18,20,34,39],azur:17,bad:11,bank:34,base:[0,1,8,11,12,13,14,15,16,17,18,19,20,24,25,26,28,29,30,31,32,33,34,37,40,41],base_ent:[5,22,23,24,26,28,29,30,31,32,37],baseent:[3,5,6,14,15,16,20,24,25,26,27,28,29,30,31,32,34,37],baseestim:11,bear:[4,5],becaus:[0,3,5,6,15,32],becom:5,been:[6,13,32],beep:39,befor:[0,11,39],being:[25,34],belong:6,below:4,best:19,best_transcript:6,better:34,between:[11,15,20,22,32,33,34],beyond:[],big:15,bit:[11,20],black:40,blackbox:40,bloat:[25,40],block:[0,34],blue:17,bodi:[3,4,14,15,17,24,25,26,28,29,30,31,32,33,34],book:[4,6,15,28],bool:[4,6,11,13,14,17,18,20,25,29,32,34,39],boost:[],booster:[],boot:15,bop:39,bot:14,both:[4,5,32,33],box:40,branch:[0,7],budget:34,build:[0,7],bundl:18,calc_bin:39,calcul:13,calibr:[9,10],calibra:11,calibrationmodel:11,call:[4,6,15,17,25,34,39],callabl:39,callback_datetim:[4,14],can:[0,3,4,5,6,13,14,15,18,20,22,24,28,30,32,33,34,37,40],candid:[17,18],canonic:[9,10],canonicalizationplugin:12,card:[0,15,23],carri:15,cast:[10,23],categor:34,categori:[6,20],caution:25,cd:[0,7],certain:[15,17,20,39],chang:[0,5,11,25],charact:39,check:[4,6,11,20,25,32,34,39],child:15,children:[15,31],chronolog:32,classif:[9,10,22],classifi:[0,4,11,13,19,20],classmethod:[4,5,24,25,26,28,30,31,32,33],cleanup:[20,34],clear:37,clearli:4,clf_featur:[0,4,6,19],cli:[0,1,41],clone:0,close:6,code:[0,4,15,18,39,40],collect:[6,14,31,32,33],collect_datetime_valu:[32,33],colour:17,column:[6,13],com:[0,3,15,20,39],combin:[0,3,6,14],combine_date_tim:[9,10],combine_time_entities_from_slot:[6,14],combinedatetimeoverslot:[0,4,6,14],combinedatetimeplugin:[],combinetimeentitiesfromslot:[],come:[4,15,19],command:[0,7],command_str:7,common:[4,5],compar:[3,15],con:24,concaten:[0,19,34],conceal:25,conda:0,condit:[6,15,40],condition:15,confid:[3,4,5,6,34],configur:[3,15,18,20,34,39],confus:[4,5],connect:[0,15],consensu:[],consid:[3,11,22],consider:[],consist:[4,15],constant:[1,41],constitu:[],constructor:6,contain:[0,3,4,5,7,11,13,15,20,29,31,32,34,40],content:41,context:15,contextu:[],convers:[4,5,6,22,40],convert:[4,15,25,28,30,34,37,39],copi:[7,25],copier:7,correct:15,correspond:13,could:[4,5,6,15,32],count:[],counter:6,counterpart:[],countri:[4,15],coupl:31,cover:19,cpu:15,creat:[0,4,5,6,7,15,17,20,25,34,39],create_timestamps_path:39,creation:6,credit:[0,15,23],credit_card_numb:[22,23],creditcardnumberent:26,crimson:17,cross:4,csv:7,cue:34,currenc:[15,24],currencyent:24,current:[0,5,6,14,18,20,28,34,37,40],current_ent:14,current_st:[4,6,15,19],d:[4,5,24,26,28,30,31,32,33],dai:[4,14,15,28,30,32],dampen:[],data:[3,4,6,7,11,12,13,15,17,19,25,40],data_column:13,databas:15,datafram:[6,11,12,13,15,17,19,40],dataset:7,date:[0,4,10,14,22,24,28,30,32,33,34,39],date_tim:39,datetim:[1,4,14,15,24,30,32,33,34,41],datetime_filt:[15,16],datetime_slot:34,de:3,debug:[6,11,12,13,14,15,16,17,18,19,20,25,34,40],decemb:[14,15,32],decid:[6,24],decod:15,deep:25,deepli:39,def:[0,4,6],defin:[15,18,20,25,35,39],definit:37,delhi:17,demo:34,depend:[0,3,4,23],depict:[],deploi:15,deriv:[0,4,6,13],descend:[5,6],describ:[0,4,5,6,11,12,13,17,18,19,20,34,39,40],descript:[0,5,19,24,34,40],deseri:[22,23],deserialize_duckling_ent:27,design:20,dest:[6,11,12,13,14,15,16,17,18,19,20,26,28,30,31,32,33],destin:[22,34],destination_path:7,detail:[15,19,34,37,40],detect:[0,29],develop:0,df:11,dialog:[5,14,20],dict:[3,4,5,6,11,13,14,15,16,17,18,19,25,26,28,29,32,33,34,37,39,40],dict_:25,dict_get:39,dict_travers:39,dictionari:[4,5,11,25,32,33,34,37,39],did:32,didn:32,differ:[15,18,25,32,34],digit:39,dim:[24,25,26,28,29,30,31,32,33],dimens:[15,16,24,26,28,30,31,32,33],dir:7,dir_path:39,directori:[0,7,39],divis:32,doc:[0,20,34],docker:15,document:40,doe:[1,20],doesn:[3,4,13,25,39],don:[4,5,6,15,34,39],done:[3,5,19],down:15,download:[0,7],dp:18,dp_search:18,drop:15,dry:0,dry_run:39,dsttzinfo:[],dt2timestamp:[15,30,39],duckl:[0,4,14,15,16,18,23,24,30,32],duckling_entity_dict:27,duckling_plugin:[9,10,16,26,28,30,31,32,33],ducklingplugin:[0,5,14,15,16,18,26,28,30,31,32,33],ducklingpluginlb:16,due:39,duplic:3,durat:[0,15,22,23,30,32],duration_cast_oper:[15,27,28],durationent:28,dure:11,e:4,each:[4,18,19,20,25,32,34,39],eagerli:20,easi:17,easili:[],either:[15,22,32,33],elect:[],element:[5,25,39],els:[6,13,32,39],emerald:17,emit:[],en:[4,6,19],en_core_web_sm:17,en_gb:15,en_in:[4,6,15,16,19,26,28,30,31,32,33],en_u:15,enabl:13,encod:39,end:[4,14,15,17,19,26,28,30,32,33],end_dat:34,english:[4,20],enough:29,ensur:0,entir:[4,6],entit:29,entiti:[0,1,3,4,5,6,12,14,15,16,17,18,20,22,34,37,39,40],entity_column:12,entity_consensu:3,entity_dict:15,entity_extractor:[1,2,15,17,18],entity_pattern:18,entity_scor:3,entity_synthesi:25,entity_typ:[4,14,15,17,18,24,25,26,28,29,30,31,32,33],entity_type_val_group:3,entity_type_value_group:3,entityscoringmixin:[3,15,17,18],entri:7,env:[4,6],equal:15,equival:6,error:39,especi:15,etc:[15,29,32],evalu:6,even:[3,4,5,6,20],everi:[3,4],everyth:39,evid:[],ex:32,exactli:4,exampl:[6,7,10,11,20,22,31,32,34],except:39,exclus:39,execut:[6,15,20,34,40],exhaust:40,exhibit:[7,40],exist:[0,2,5,6,7,13,39],exit:[0,7],expect:[4,6,7,13,15,16,18,19,20,22,25,28,39,40],experi:15,explicit:32,explicitli:23,explor:[6,34],expos:7,express:[0,6,15],extra:[15,40],extract:[0,17,18,20,29,37],f:39,facilit:39,fail:39,fairli:0,fallback:4,fallback_int:[],fallback_label:13,fals:[4,6,7,11,12,13,14,15,16,17,18,19,20,24,25,26,28,29,30,31,32,33,34,39,40],featur:[0,4,6,11,13,19,34],featureextractor:11,femal:15,few:[0,6,17,18,20,22,40],field:6,file:[4,6,7,39],file_handl:[1,41],file_nam:39,file_path:39,fill:[4,5,6,10,14,22,34,37],fill_multipl:[20,34],fill_slot:34,filler:[0,20],filter:[3,4,10,11,25],filter_asr_output:11,filter_typ:15,find:[],fine:39,first:[6,11,14],fit:11,fit_ts_paramet:39,fix:32,flag:[13,17,18],flatten:[39,40],flight:[4,15,32,33],flush:40,fn:7,fname:11,follow:[0,4,5,6,7,34,40],forc:0,forest:[],forgot:6,fork:15,form:39,format:[4,11,13,15,32,33,39],former:6,found:[14,20,34],free:15,frequenc:[],from:[3,4,5,6,7,11,13,14,15,17,18,19,24,25,26,28,29,30,31,32,33,34,39,40],from_dict:[4,5,6,18,25],from_duckl:[24,26,28,30,31,32,33],from_valu:[15,33],froze:15,frozen:[2,6],frozeninstanceerror:[4,6],fruit:30,full:6,fun:15,fundament:0,futur:15,fuzzi:18,fuzzy_dp_config:18,fuzzy_init:18,fuzzy_threshold:18,gain:17,gap:[],gener:[6,7,22,32],geographi:15,get:[6,13,15,25,28,32,39,40],get_ent:[17,18],get_entity_typ:12,get_formatted_gridparam:13,get_fuzzy_dp_search:18,get_gridsearch_grid:13,get_metr:39,get_oper:15,get_tracked_slot:14,get_valu:[24,25,32,33],get_workflow:7,get_workflow_fn:7,getter:24,girl:15,git:[0,7],github:[0,3,7,15,39],gitlab:[0,7],give:14,given:[6,15,25,39],goe:[],gpe:17,grain:[4,14,15,30,32,33],graph:4,greater:15,green:17,greet:6,grid:13,gridsearch:13,gridsearchcv:13,group:3,guard:[2,10,11,12,13,14,16,17,18,19,20],h:[0,7],ha:[0,3,4,6,13,15,17,25,32,33,34,40],hack:18,had:6,handi:4,handl:[20,24,29,30],happen:15,hard:[0,13],has_time_compon:14,have:[3,4,6,11,14,15,17,20,24,30,31,32,33,34,39,40],head:[0,7],header:16,healthi:[],hello:[4,6,7,39],help:[0,4,6,7,17,25,28,34],here:[6,7,13,15,32,39],heurist:2,heuristic_based_int:6,heuristicbasedintentplugin:6,hi:4,hi_in:15,high:[],higher:[0,3,34],highest:[3,5],highli:6,hindi:15,histori:[4,6,19],hold:34,hope:39,hour:[15,28,30,32,33],how:[0,1,15],howev:6,html:20,http:[3,4,13,15,16,20,39],hyperparamet:13,hypothesi:4,i:[6,11,15,17,28,31,32,33,34,39],id:15,ideal:[],ident:[3,39],identifi:[4,20,25,34],identity_token:13,immut:[4,5,6,40],impact:[13,18],imper:[],implement:[6,12,15],impli:[],improv:[],in_:6,inaud:11,includ:25,index:[3,34,39],indexerror:[25,39],indic:3,indigo:17,individu:18,infer:[0,11,13,32,40],info:[],inform:[15,25,28,36,40],init_model:13,initi:[13,18],input:[0,1,2,6,11,12,13,14,15,17,18,19,20,26,28,30,31,32,33,39,40],input_:[0,6,15,16,18,19,39,40],input_column:[6,11,12,14,15,16,17,18,19],input_i:4,input_s:3,input_x:4,insert:37,instal:7,instanc:[2,5,6,7,15,25,34,37,39,40],instead:[0,4,6,15,34,39],integ:39,integr:23,intend:25,intent:[0,1,2,4,5,10,11,13,17,19,20,22,26,28,30,31,32,33,37,40],intent_detection_slot_fil:20,intent_vot:[],interact:14,intermedi:[6,18,40],interpret:34,intersect:15,interv:[15,23,24,30],invers:15,invoc:[0,7],involv:18,ip:6,ipython:15,irrespect:20,is_dat:14,is_each_el:39,is_list:39,is_list_of_str:39,is_str:39,is_uniq_date_from_valu:32,is_uniq_day_from_valu:32,is_unix_t:39,is_unsqueezed_utter:39,is_upd:7,is_utter:39,isn:[4,13,15,40],iso3166:15,iso:[4,15,32,33,39],issu:[2,3,15,23,39],issuer:[15,26],ist:[],item:[0,6,20],iter:40,its:[3,6,7,15,20,34,40],itself:[15,40],jade:17,jan:[15,32],job:11,join:[14,19],json:[3,4,5,14,15,25,34,37,40],just:[5,11,15,18,39],k:39,keep:[4,6,18],kei:[4,5,11,13,19,33,37,39],kept:40,key_error:39,keyerror:[25,39],keyword:[2,17,22,23],keywordent:[17,18,20,29],kid:31,knew:6,know:[15,39],known:[23,34],kolkata:[4,15,26,28,30,31,32,33,39],kwarg:[6,7,13],label:[13,17,18],label_column:13,label_count:13,labelencod:13,labels_list:39,labels_oneh:39,lack:0,lambda:[6,15,39],lang:[4,6,18,19],lang_detect_from_text:39,languag:[4,15,16,18,26,28,30,31,32,33,39,40],last:[4,6,32,39],latenc:15,latent:[4,15,24,25,26,28,29,30,31,32,33],latent_ent:[4,6,19],latest:[0,7],latter:6,lb_plugin:[9,10],lead:39,learn:[6,11],least:[4,6,13],leav:39,length:3,less:3,lesser:15,let:[6,15,20],li:[0,7],lib:[4,6,39],librari:0,like:[4,5,6,15,22,28,34],line:7,link:[7,20],lint:7,list:[0,3,4,5,6,11,12,13,14,15,16,17,18,19,20,25,26,29,32,33,34,37,39,40],list_entity_plugin:[9,10],list_of_ent:15,list_of_iso_639:4,list_of_tz_database_time_zon:4,list_search_plugin:[9,10],listentityplugin:[5,17],listsearchplugin:[5,18],lm:11,lm_score:0,load:[13,17,39,40],load_fil:39,loader:39,local:[4,6,7,15,16,19,26,28,30,31,32,33,39,40],locat:[7,34],lock:40,log:[4,5,6,34,40],logger:[1,41],logic:39,logit:39,logits_list:39,look:[6,15,34,39],lookup:29,lose:40,lost:[4,34],lower:[0,3],lr:39,machin:[15,34],made:[],mai:[3,4,6,13,15,20,32,39],main:7,make:[0,3,7,13,15,28,39],make_transform_valu:3,make_unix_t:[4,39],male:15,man:15,manag:[0,5,40],manage_project:7,mani:[],manner:32,map:[17,18,20,34],mar:39,march:15,mark:19,mask:12,mask_token:12,mask_transcript:12,master:[0,7,15],mastercard:39,match:[15,17,18,20,39],match_dict:18,matchtyp:[17,18],matter:32,max_it:39,mayb:34,maybe_utter:39,me:15,mean:[4,5,6,15,22,34],meant:[25,34],mention:32,merg:19,merge_asr_output:[9,10],merge_asr_output_plugin:[6,19],mergeasroutput:0,mergeasroutputplugin:[6,19],messag:[0,7],met:[],meta:[28,29],metadata:3,method:[0,6,11,12,13,15,16,17,18,19,20,25,30,40],microservic:40,might:[4,6],migrat:0,millisecond:[15,16],miniconda3:[4,6],minimum:3,minut:32,misc:[1,41],mismatch:39,miss:[4,7,19,39],mixin:3,mlp:[9,10],mlpclassifi:13,mlpmulticlass:[5,13,34],mode:39,model:[0,11,13,17,18,39],model_dir:13,model_nam:11,modif:[6,25,34],modifi:[3,25,34,40],modul:[0,41],moment:14,mondai:[15,32],monei:[0,15,24,34],month:[30,32],more:[0,13,15,20,25,34],morn:32,most:[3,4,6,39,40],mother:10,ms:[4,15,39],multipl:[3,15,34,39],must:[5,7,34,39],mutat:[20,25],my:[11,15,26,34],n:[4,13,19,31,39],naiv:6,naive_lang_detect:[1,41],name:[0,4,5,6,7,8,14,15,20,25,34,37,39],namespac:[0,7],natur:[15,16,26,28,30,31,32,33],navi:17,navig:39,need:[0,4,5,6,14,15,17,18,20,25,28,30,32,33,39,40],neg:32,ner:[10,18],ner_search:17,nest:[39,40],never:6,newlin:39,night:32,nlp:[17,18],nlpprogress:20,node:4,noisi:0,nomenclatur:[4,5],non:39,non_serializable_field:40,none:[3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,24,25,26,27,28,29,30,31,32,33,34,39,40],nonetyp:7,normal:[4,15,19,28,39],normalize_utter:[1,41],note:[4,15],noth:[4,5,24,25,26,28,29,30,31,32,33,34,37,40],notic:[15,30],notion:15,now:[4,5,15],np:[],ns:[],number:[0,3,6,13,15,20,22,23,24,28,30,31,32,34],numer:[15,22,23,24,31],numericalent:30,o:[6,15,39],obj:39,obj_typ:39,object:[3,4,5,6,7,8,13,15,25,34,37,39,40],observ:[],obtain:[15,24,26,28,30,31,32,33,34],occurr:[],oct:32,octob:32,off:[4,40],offer:6,often:[15,17],onc:20,one:[3,6,13,14,20,22,32,40],onli:[0,5,15,17,18,19,20,25,32,34],oop:6,op:40,open:[23,39],oper:[19,28,34],oppos:18,option:[0,3,4,5,6,7,13,14,15,16,17,18,20,24,25,26,29,30,31,32,33,34,39,40],orchestr:20,order:[0,5,6,32,40],org:[4,13],organ:[0,7],origin:[13,15,22,25,29,30,32,33,34],original_int:[5,6,13,15,17,26,28,30,31,32,33],other:[0,3,4,6,15,17,18,20,25,40],otherwis:13,our:[4,6,15,32,34],out:[4,5,6,15,17,19,26,28,30,31,32,33,34,39,40],output:[0,1,2,6,11,12,13,14,15,16,17,18,19,20,24,26,28,30,31,32,33,39,40],output_column:[6,11,12,14,15,16,17,18,19],output_dir:7,over:[3,6,13,17],overal:15,overrid:[25,40],overridden:[],packag:41,pai:[6,15],paid:15,pair:[32,40],panda:13,param:[13,18,39],paramet:[3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,24,25,32,33,34,39,40],pari:4,park:32,pars:[4,14,15,16,17,18,24,26,28,30,31,32,33,34,39,40],parser:[4,5,6,7,14,15,17,24,25,26,28,29,30,31,32,33,34],part:[3,13,15,20,32,40],partial:39,particip:22,pass:[0,15,17,20,32,33],passeng:[22,34],past:15,path:[6,7,39,40],pattern:[4,5,15,17,18],pay_lat:15,payment:15,pd:[11,13,15,17,40],peopl:[0,15,22,23,34],peopleent:[15,31],per:[3,4,15,20],percentag:[],person:15,pertain:20,pick:[3,25],pick_previously_filled_time_ent:14,pinpoint:32,pip:0,pipelin:[11,13],piplin:11,pizza:15,pkl:11,place:[5,17],placehold:[4,20,34],plain:[],plan:2,planet:39,plugin:[0,1,2,22,23,25,34,40,41],pluginfn:[20,35],pm:[4,14,15,19,33],poetri:[0,7],point:[3,4,7,15],poor:[],popular:39,posit:[0,7,19,32,34],possibl:[32,34,39],post:40,postprocessor:25,pprint:15,pr:0,practic:20,pre:[20,35,40],pred:39,predict:[4,5,6,11,13,15,19,34],prefer:[25,34,39],prefix:39,prepar:6,presenc:[3,6,29],present:[4,6,20],preset:20,pretend:7,prevent:[6,15,18,25,40],previou:[0,4,6,14,32,40],previous:[4,14],previous_ent:14,previous_int:[4,6,19],print:6,pristin:18,privat:15,pro:24,problem:[3,6,10,34],procedur:[34,40],process:[5,40],produc:[0,4,5,6,13,15,16,40],product:[4,25,34],program:39,progress:[22,25,34],project:[1,8,17,22,41],project_cli:7,project_command_pars:7,promin:19,prop:39,proper:13,properti:[4,13,25,34,39,40],property_:25,proport:[],proprietari:0,provid:[6,7,8,11,13,14,15,19,20,23,24,25,26,28,29,30,31,32,33,35,36,38,39],purpos:[5,7,13,25],py:[4,6,39],python3:[4,6],python:[39,40],pythoncod:39,pytz:[15,30],quarter:32,queri:18,r:39,race:40,rais:[4,6,13,19,25,39],rang:[4,14,15,17,24,25,26,28,29,30,31,32,33,39],rank:[0,6],raspberri:17,re:[4,40],reach:15,read:[0,6,13,15,37],read_from_json:39,readabl:40,readi:[],real:34,rebuild:6,receiv:[14,15],recent:[4,6,39],reciev:40,recurs:39,red:17,reduc:[3,4,39],ref:[],refactor:18,refer:[4,5,6,15,16,24,25,39],reference_dt:[15,30],reference_tim:[4,6,15,16,19,27,30,39],reference_time_column:[15,16],reference_unix_t:[28,30],reftim:[15,16],regex:[10,18,29],regex_search:17,regexflag:[17,18],region:4,rel:[4,15],relat:20,relationship:[20,22],relev:[5,34],remain:[],remov:[3,11,15,20,34,37],remove_low_scoring_ent:3,repeat:15,replac:[6,25,30,40],replace_output:[6,13,14,20],repositori:0,repres:[4,5,19,30,31,32,33,34,40],represent:[8,25],request:40,requir:[0,4,5,6,15,17,18,22,40],reserv:[22,40],reset:40,resid:39,resolut:15,resolv:15,resort:[],respect:[19,22],respons:[0,15,39,40],rest:6,result:[6,40],retain:[0,13,24],retain_int:[9,10],retainoriginalintentplugin:13,reus:2,roberta:13,role:20,root:[0,7],round:22,row:11,rtype:[18,25,39],rubi:17,rule:[20,34],rule_slot_fil:[9,10],rulebasedslotfillerplugin:[6,20,34],run:[0,6,15,16,17,19,20,26,28,30,31,32,33,40],s:[0,3,4,5,6,7,11,12,13,15,16,17,18,19,20,28,34,39,40],safe:[25,39,40],safest:[],sai:[5,6,15,32],said:[28,34],same:[3,11,18,34],saniti:11,saturdai:32,save:[6,11,13,15,39,40],save_fil:39,save_reliability_graph:39,save_to_json:39,scaffold:7,schema:20,score:[3,4,5,6,11,14,15,17,24,25,26,28,29,30,31,32,33,34],score_round_off:13,search:[3,10,15,18],search_regex:18,searchstrategyclass:18,second:[4,15,28,32],section:[0,6,15,22,25],see:[6,14,15],seem:[6,24],seen:17,select:[3,15],select_datetim:15,self:[0,4,5,6,32],sentenc:[19,22,28,31,32],separ:[4,5,6,19,34,40],sequenc:40,serial:[2,12,40],server:0,servic:[15,18],session:15,set:[0,2,3,4,6,11,14,15,17,18,20,22,34,40],set_entity_typ:32,setup:[0,15],seven:32,seventi:30,shall:20,shape:18,share:[3,34],sharp:11,she:28,ship:[6,18,39],shirt:17,should:[0,4,6,11,13,15,25,34,40],show:[0,6,7,17,18],signal:[1,8,22],signatur:[0,20],signific:[0,17,20,22],similar:[],simpl:[0,7,39,40],simul:15,sinc:[4,5,6,14,32,34,39],singl:[4,5,14,19,20,34,40],sit:11,site:[4,6],size:[],skip:[13,25],skip_entity_attr:25,skip_label:13,skit:0,sklearn:[11,13],slot:[0,1,4,5,6,10,14,15,22,34,40],slot_fil:[9,10],slot_track:[4,6,14,19],slot_typ:34,slow:15,slu:[0,4,5,11,17,22,34,40],small_talk:15,smallest:32,smoothli:0,snapshot:6,so:[6,14,18,22],solv:34,some:[4,6,25,39,40],someon:15,soon:5,sort:[5,15],sourc:[3,4,5,6,7,8,11,12,13,14,15,16,17,18,19,20,24,25,26,27,28,29,30,31,32,33,34,37,39,40],space:[18,39],spaci:[10,18],spacy_nlp:[17,18],sparingli:39,speaker:39,special:34,specif:[25,29,39,40],specifi:[7,15],split:6,spuriou:13,stai:17,stall:15,standard:[15,39],start:[4,7,14,15,17,19,26,28,30,32,33],start_dat:34,state:[4,6,13,15,40],state_column:13,state_expecting_numb:6,std:[],store:[32,33],str:[3,4,5,6,7,11,12,13,14,15,16,17,18,19,24,25,26,28,29,30,31,32,33,34,37,39,40],strategi:[18,19],strength:8,string:[3,4,13,15,17,18,19,32,33,39],strong:[],structur:[0,3,4,18,19,25,40],style:[17,18],subclass:[7,25],submodul:[1,9,10,22,41],subpackag:41,subsequ:14,subset:[4,5],sugar:[25,39],suitabl:40,sundai:32,support:[0,7,15,19,23,34],supported_ent:14,suppos:[],sure:[13,15],sy:15,syntat:39,syntax:4,system:[4,20],t:[3,4,5,6,13,15,25,32,34,39,40],t_scale:39,tag:[0,7,11],take:[6,7],task:[17,19],teal:17,tell:[15,20,22,28,32,34],temperatur:39,temperature_sc:[1,41],templat:[0,7],tempor:10,temporal_int:15,tend:15,tensor:39,termin:[19,40],test:10,text:[1,9,34,39],tfidf:[11,13],than:[3,15,20],thei:[14,32,34],them:[6,20,40],therefor:32,thi:[0,3,4,5,6,7,11,12,13,14,15,17,18,19,20,22,24,25,26,28,29,30,31,32,33,34,36,37,39,40],third:20,those:[15,34],thread:40,threshold:[3,6,11,12,13,15,17,18],through:[20,40],throughtout:8,ticket:22,ticket_book:34,till:32,time:[0,4,6,10,14,16,18,22,23,24,28,30,34],time_interv:[22,23],timeent:[14,15,20,28,30,32,33],timeinterv:15,timeintervalent:33,timeout:[15,16],timestamp:[4,28,39],timezon:[4,6,15,16,19,26,27,28,30,31,32,33,39,40],to_time_ent:[],to_valu:[15,33],todai:[15,32,33],togeth:32,token:[9,10,18,20,22,29],tommorrow:15,tomorrow:[4,14,15,32],tonight:32,too:0,tool:18,top:[],total:15,traceback:[4,6,39],track:[0,3,4,13,14,15],tracked_slot:14,tracker:[14,40],train:[0,6,7,11,13,15,17,34,40],train_workflow:7,trainabl:[13,40],training_data:[6,11,12,13,15,17,19,40],transact:34,transcript2int:6,transcript2intentplugin:6,transcript:[3,4,6,11,12,13,15,17,18,19,34,39],transcrit:11,transform:[6,7,11,12,13,15,17,19,39],transformermixin:11,trascript:11,travel:22,travers:39,traverse_dict:39,tree:[],trial:[],trigger:5,trigger_int:14,trip:22,triplet:31,ts:39,tupl:[3,11,15,16,18,39,40],turn:[0,4,5,14,15,40],twenti:30,two:[11,15,20,28,30,31],type:[0,1,3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,39,40,41],type_:39,typeerror:[19,39],tz:[15,39],tzinfo:[15,30],umm:39,understand:[0,15,34],union:[4,5,13,39],uniqu:[3,32],unit:[0,15,24,28,31,32],unix:[4,39],unix_ts_to_datetim:39,unless:[4,20],unsaf:25,unset:39,up:15,updat:[0,2,7,25,34,39,40],upon:22,url:[15,16],us:[0,4,6,7,8,13,14,15,17,18,19,20,22,24,25,28,29,30,32,34,39],usag:[0,7],use_cuda:13,use_lat:15,use_mast:7,use_st:13,use_transform:[6,11,12,14,15,16,17,18,19],user:[0,7,14,15,32],usual:15,utc:[4,6,15,19,27,39],utf:39,util:[0,1,4,6,7,11,12,13,14,15,16,17,18,19,20,25,30,34,41],utter:[0,1,4,6,11,14,15,17,19,22,26,28,30,31,32,33,34,39,40],utterance2altern:39,valid:[5,11,13,15,40],valid_labelencod:13,valid_mlpmodel:13,validate_typ:39,valu:[3,4,6,11,12,13,14,15,17,18,19,20,24,25,26,28,29,30,31,32,33,34,37,39,40],value_kei:33,valueerror:13,variabl:13,variant:31,variou:[15,39],vc:7,vcs_ref:7,vector:11,verif:15,vernacular:[3,7,15,39],version:0,via:[4,15,17,20,26,28,30,31,32,33],virtualenv:0,visa:[15,26],visit:14,vote:[9,10,34],vote_sign:[],voteintentplugin:[],voteplugin:[],w:39,wa:[4,6,15,28,32,34,39],wai:[4,15,22],wake_up_alarm:34,walkthrough:23,wall:15,wallet:34,want:[4,11,14,15,17,28,34,39],wasn:6,we:[0,3,4,5,6,7,11,13,14,15,17,18,19,20,22,23,24,28,30,32,34,39,40],weak:[],week:32,weekdai:32,weekend:33,weight:[],well:[5,15,32],went:32,wercalibrationplugin:0,were:[4,15,20,25,34],what:[1,14,15,34],when:[14,15,34,39],where:[0,3,6,7,15,28,29,31,32,34],which:[3,5,15,17,18,19,24,25,28,30,31,32,33,34,39,40],whole:31,wiki:4,wikipedia:4,win:[],wish:28,within:[3,4,5,6,15,17,18,22,25,34,37,39,40],without:40,word:6,word_frequ:6,work:[0,4,5,19,22,39],workflow:[0,1,6,11,12,13,15,16,17,18,19,20,23,41],workflow_cli:7,world:[4,7],worst:[],would:[4,5,13,14,15,19,22,34,40],wrap:39,wrapper:17,write:[0,2,4,39],writer:39,wrote:6,x:39,xgb:[9,10],xgboostregressor:11,xlm:13,xlmr:[9,10],xlmrmulticlass:[0,5,13,34],y:11,year:32,yeild:34,yellow:[6,39],yesterdai:[15,32],yet:24,yield:[],you:[0,4,6,14,15,22,39],your:[0,6]},titles:["Dialogy","dialogy package","dialogy.base package","dialogy.base.entity_extractor package","dialogy.base.input package","dialogy.base.output package","dialogy.base.plugin package","dialogy.cli package","dialogy.constants package","dialogy.plugins package","dialogy.plugins.text package","dialogy.plugins.text.calibration package","dialogy.plugins.text.canonicalization package","dialogy.plugins.text.classification package","dialogy.plugins.text.combine_date_time package","dialogy.plugins.text.duckling_plugin package","dialogy.plugins.text.lb_plugin package","dialogy.plugins.text.list_entity_plugin package","dialogy.plugins.text.list_search_plugin package","dialogy.plugins.text.merge_asr_output package","dialogy.plugins.text.slot_filler package","dialogy.plugins.text.voting package","dialogy.types package","dialogy.types.entity package","dialogy.types.entity.amount_of_money package","dialogy.types.entity.base_entity package","dialogy.types.entity.credit_card_number package","dialogy.types.entity.deserialize package","dialogy.types.entity.duration package","dialogy.types.entity.keyword package","dialogy.types.entity.numerical package","dialogy.types.entity.people package","dialogy.types.entity.time package","dialogy.types.entity.time_interval package","dialogy.types.intent package","dialogy.types.plugin package","dialogy.types.signal package","dialogy.types.slots package","dialogy.types.utterances package","dialogy.utils package","dialogy.workflow package","dialogy"],titleterms:{"abstract":6,"do":[4,5,40],all:[4,5,15],amount_of_monei:24,an:4,base:[2,3,4,5,6],base_ent:25,calibr:11,canonic:12,card:26,cast:[15,30],classif:[13,34],cli:7,combine_date_tim:14,constant:8,content:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],contributor:0,creation:0,credit:26,credit_card_numb:26,date:15,datetim:39,deseri:27,dialogi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],doe:40,duckling_plugin:15,durat:28,entiti:[23,24,25,26,27,28,29,30,31,32,33],entity_extractor:3,exampl:15,exist:4,file_handl:39,fill:20,filter:15,frozen:4,get:0,guard:[6,15],heurist:6,how:40,i:[4,5],index:0,input:[4,5],instal:0,instanc:4,integr:[26,28,30,31,32,33],intent:[6,15,34],intent_vot:[],interv:33,issu:4,keyword:[6,29],lb_plugin:16,list_entity_plugin:17,list_search_plugin:18,logger:39,merge_asr_output:19,misc:39,mlp:13,modul:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],mother:15,naive_lang_detect:39,ner:17,normalize_utter:39,number:26,numer:30,output:[4,5],packag:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],peopl:31,plan:6,plugin:[4,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21,26,28,30,31,32,33,35],problem:15,project:[0,7],regex:17,retain_int:13,reus:4,rule_slot_fil:20,search:17,see:[4,5],serial:[4,5],set:5,signal:36,slot:[20,37],slot_fil:20,spaci:17,start:0,submodul:[7,11,13,20,36,39,40],subpackag:[1,2,9,10,22,23],temperature_sc:39,tempor:15,test:[0,15],text:[10,11,12,13,14,15,16,17,18,19,20,21],time:[15,32,33],time_interv:33,token:13,topic:0,type:[22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],updat:[4,6],util:39,utter:38,vote:21,walkthrough:[26,28,30,31,32,33],what:40,why:[4,5],workflow:[7,26,28,30,31,32,33,40],write:6,xgb:11,xlmr:13}})
\ No newline at end of file
+Search.setIndex({docnames:["index","source/dialogy","source/dialogy.base","source/dialogy.base.entity_extractor","source/dialogy.base.input","source/dialogy.base.output","source/dialogy.base.plugin","source/dialogy.cli","source/dialogy.constants","source/dialogy.plugins","source/dialogy.plugins.text","source/dialogy.plugins.text.calibration","source/dialogy.plugins.text.canonicalization","source/dialogy.plugins.text.classification","source/dialogy.plugins.text.combine_date_time","source/dialogy.plugins.text.duckling_plugin","source/dialogy.plugins.text.lb_plugin","source/dialogy.plugins.text.list_entity_plugin","source/dialogy.plugins.text.list_search_plugin","source/dialogy.plugins.text.merge_asr_output","source/dialogy.plugins.text.slot_filler","source/dialogy.plugins.text.voting","source/dialogy.types","source/dialogy.types.entity","source/dialogy.types.entity.amount_of_money","source/dialogy.types.entity.base_entity","source/dialogy.types.entity.credit_card_number","source/dialogy.types.entity.deserialize","source/dialogy.types.entity.duration","source/dialogy.types.entity.keyword","source/dialogy.types.entity.numerical","source/dialogy.types.entity.people","source/dialogy.types.entity.time","source/dialogy.types.entity.time_interval","source/dialogy.types.intent","source/dialogy.types.plugin","source/dialogy.types.signal","source/dialogy.types.slots","source/dialogy.types.utterances","source/dialogy.utils","source/dialogy.workflow","source/modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["index.rst","source/dialogy.rst","source/dialogy.base.rst","source/dialogy.base.entity_extractor.rst","source/dialogy.base.input.rst","source/dialogy.base.output.rst","source/dialogy.base.plugin.rst","source/dialogy.cli.rst","source/dialogy.constants.rst","source/dialogy.plugins.rst","source/dialogy.plugins.text.rst","source/dialogy.plugins.text.calibration.rst","source/dialogy.plugins.text.canonicalization.rst","source/dialogy.plugins.text.classification.rst","source/dialogy.plugins.text.combine_date_time.rst","source/dialogy.plugins.text.duckling_plugin.rst","source/dialogy.plugins.text.lb_plugin.rst","source/dialogy.plugins.text.list_entity_plugin.rst","source/dialogy.plugins.text.list_search_plugin.rst","source/dialogy.plugins.text.merge_asr_output.rst","source/dialogy.plugins.text.slot_filler.rst","source/dialogy.plugins.text.voting.rst","source/dialogy.types.rst","source/dialogy.types.entity.rst","source/dialogy.types.entity.amount_of_money.rst","source/dialogy.types.entity.base_entity.rst","source/dialogy.types.entity.credit_card_number.rst","source/dialogy.types.entity.deserialize.rst","source/dialogy.types.entity.duration.rst","source/dialogy.types.entity.keyword.rst","source/dialogy.types.entity.numerical.rst","source/dialogy.types.entity.people.rst","source/dialogy.types.entity.time.rst","source/dialogy.types.entity.time_interval.rst","source/dialogy.types.intent.rst","source/dialogy.types.plugin.rst","source/dialogy.types.signal.rst","source/dialogy.types.slots.rst","source/dialogy.types.utterances.rst","source/dialogy.utils.rst","source/dialogy.workflow.rst","source/modules.rst"],objects:{"":[[1,0,0,"-","dialogy"]],"dialogy.base":[[3,0,0,"-","entity_extractor"],[4,0,0,"-","input"],[5,0,0,"-","output"],[6,0,0,"-","plugin"]],"dialogy.base.entity_extractor":[[3,1,1,"","EntityScoringMixin"],[3,4,1,"","entity_scoring"]],"dialogy.base.entity_extractor.EntityScoringMixin":[[3,2,1,"","aggregate_entities"],[3,2,1,"","apply_filters"],[3,2,1,"","entity_consensus"],[3,2,1,"","make_transform_values"],[3,2,1,"","remove_low_scoring_entities"],[3,3,1,"","threshold"]],"dialogy.base.input":[[4,1,1,"","Input"]],"dialogy.base.input.Input":[[4,3,1,"","clf_feature"],[4,3,1,"","current_state"],[4,2,1,"","from_dict"],[4,3,1,"","history"],[4,2,1,"","json"],[4,3,1,"","lang"],[4,3,1,"","latent_entities"],[4,3,1,"","locale"],[4,3,1,"","previous_intent"],[4,3,1,"","reference_time"],[4,3,1,"","slot_tracker"],[4,3,1,"","timezone"],[4,3,1,"","transcripts"],[4,3,1,"","utterances"]],"dialogy.base.output":[[5,1,1,"","Output"]],"dialogy.base.output.Output":[[5,3,1,"","entities"],[5,2,1,"","from_dict"],[5,3,1,"","intents"],[5,2,1,"","json"],[5,3,1,"","original_intent"]],"dialogy.base.plugin":[[6,1,1,"","Plugin"]],"dialogy.base.plugin.Plugin":[[6,2,1,"","prevent"],[6,2,1,"","train"],[6,2,1,"","transform"],[6,2,1,"","utility"]],"dialogy.cli":[[7,4,1,"","add_project_command_arguments"],[7,4,1,"","add_workflow_command_arguments"],[7,4,1,"","main"],[7,0,0,"-","project"],[7,4,1,"","project_command_parser"],[7,0,0,"-","workflow"]],"dialogy.cli.project":[[7,4,1,"","manage_project"],[7,4,1,"","project_cli"]],"dialogy.cli.workflow":[[7,4,1,"","get_workflow"],[7,4,1,"","train_workflow"],[7,4,1,"","workflow_cli"]],"dialogy.constants":[[8,1,1,"","SIGNAL"]],"dialogy.constants.SIGNAL":[[8,3,1,"","NAME"],[8,3,1,"","REPRESENTATION"],[8,3,1,"","STRENGTH"]],"dialogy.plugins":[[10,0,0,"-","text"]],"dialogy.plugins.text":[[11,0,0,"-","calibration"],[12,0,0,"-","canonicalization"],[13,0,0,"-","classification"],[14,0,0,"-","combine_date_time"],[15,0,0,"-","duckling_plugin"],[16,0,0,"-","lb_plugin"],[17,0,0,"-","list_entity_plugin"],[18,0,0,"-","list_search_plugin"],[19,0,0,"-","merge_asr_output"],[20,0,0,"-","slot_filler"],[21,0,0,"-","voting"]],"dialogy.plugins.text.calibration":[[11,0,0,"-","xgb"]],"dialogy.plugins.text.calibration.xgb":[[11,1,1,"","CalibrationModel"],[11,1,1,"","FeatureExtractor"]],"dialogy.plugins.text.calibration.xgb.CalibrationModel":[[11,2,1,"","filter_asr_output"],[11,2,1,"","inference"],[11,2,1,"","predict"],[11,2,1,"","save"],[11,2,1,"","train"],[11,2,1,"","transform"],[11,2,1,"","utility"],[11,2,1,"","validate"]],"dialogy.plugins.text.calibration.xgb.FeatureExtractor":[[11,2,1,"","features"],[11,2,1,"","fit"],[11,2,1,"","transform"]],"dialogy.plugins.text.canonicalization":[[12,1,1,"","CanonicalizationPlugin"],[12,4,1,"","get_entity_type"]],"dialogy.plugins.text.canonicalization.CanonicalizationPlugin":[[12,2,1,"","mask_transcript"],[12,2,1,"","transform"],[12,2,1,"","utility"]],"dialogy.plugins.text.classification":[[13,0,0,"-","mlp"],[13,0,0,"-","retain_intent"],[13,0,0,"-","tokenizers"],[13,0,0,"-","xlmr"]],"dialogy.plugins.text.classification.mlp":[[13,1,1,"","MLPMultiClass"]],"dialogy.plugins.text.classification.mlp.MLPMultiClass":[[13,2,1,"","get_formatted_gridparams"],[13,2,1,"","get_gridsearch_grid"],[13,2,1,"","inference"],[13,2,1,"","init_model"],[13,2,1,"","load"],[13,2,1,"","save"],[13,2,1,"","train"],[13,2,1,"","utility"],[13,5,1,"","valid_mlpmodel"],[13,2,1,"","validate"]],"dialogy.plugins.text.classification.retain_intent":[[13,1,1,"","RetainOriginalIntentPlugin"]],"dialogy.plugins.text.classification.retain_intent.RetainOriginalIntentPlugin":[[13,2,1,"","retain"],[13,2,1,"","utility"]],"dialogy.plugins.text.classification.tokenizers":[[13,4,1,"","identity_tokenizer"]],"dialogy.plugins.text.classification.xlmr":[[13,1,1,"","XLMRMultiClass"]],"dialogy.plugins.text.classification.xlmr.XLMRMultiClass":[[13,2,1,"","inference"],[13,2,1,"","init_model"],[13,2,1,"","load"],[13,2,1,"","save"],[13,2,1,"","train"],[13,2,1,"","utility"],[13,5,1,"","valid_labelencoder"],[13,2,1,"","validate"]],"dialogy.plugins.text.combine_date_time":[[14,1,1,"","CombineDateTimeOverSlots"],[14,4,1,"","has_time_component"],[14,4,1,"","is_date"]],"dialogy.plugins.text.combine_date_time.CombineDateTimeOverSlots":[[14,3,1,"","DATE"],[14,3,1,"","DATETIME"],[14,3,1,"","SUPPORTED_ENTITIES"],[14,3,1,"","TIME"],[14,2,1,"","combine_time_entities_from_slots"],[14,2,1,"","get_tracked_slots"],[14,2,1,"","join"],[14,2,1,"","pick_previously_filled_time_entity"],[14,2,1,"","utility"]],"dialogy.plugins.text.duckling_plugin":[[15,1,1,"","DucklingPlugin"]],"dialogy.plugins.text.duckling_plugin.DucklingPlugin":[[15,3,1,"","FUTURE"],[15,3,1,"","PAST"],[15,2,1,"","apply_entity_classes"],[15,2,1,"","apply_filters"],[15,2,1,"","get_operator"],[15,2,1,"","parse"],[15,2,1,"","select_datetime"],[15,2,1,"","transform"],[15,2,1,"","utility"],[15,2,1,"","validate"]],"dialogy.plugins.text.lb_plugin":[[16,1,1,"","DucklingPluginLB"]],"dialogy.plugins.text.lb_plugin.DucklingPluginLB":[[16,3,1,"","headers"],[16,3,1,"","reference_time"],[16,2,1,"","utility"]],"dialogy.plugins.text.list_entity_plugin":[[17,1,1,"","ListEntityPlugin"]],"dialogy.plugins.text.list_entity_plugin.ListEntityPlugin":[[17,2,1,"","get_entities"],[17,2,1,"","ner_search"],[17,2,1,"","regex_search"],[17,2,1,"","transform"],[17,2,1,"","utility"]],"dialogy.plugins.text.list_search_plugin":[[18,1,1,"","ListSearchPlugin"]],"dialogy.plugins.text.list_search_plugin.ListSearchPlugin":[[18,2,1,"","dp_search"],[18,2,1,"","fuzzy_init"],[18,2,1,"","get_entities"],[18,2,1,"","get_fuzzy_dp_search"],[18,2,1,"","get_words_from_nlp"],[18,2,1,"","search_regex"],[18,2,1,"","utility"]],"dialogy.plugins.text.merge_asr_output":[[19,1,1,"","MergeASROutputPlugin"],[19,4,1,"","merge_asr_output"]],"dialogy.plugins.text.merge_asr_output.MergeASROutputPlugin":[[19,2,1,"","transform"],[19,2,1,"","utility"]],"dialogy.plugins.text.slot_filler":[[20,0,0,"-","rule_slot_filler"]],"dialogy.plugins.text.slot_filler.rule_slot_filler":[[20,1,1,"","RuleBasedSlotFillerPlugin"]],"dialogy.plugins.text.slot_filler.rule_slot_filler.RuleBasedSlotFillerPlugin":[[20,2,1,"","fill"],[20,2,1,"","utility"]],"dialogy.types":[[23,0,0,"-","entity"],[34,0,0,"-","intent"],[35,0,0,"-","plugin"],[36,0,0,"-","signal"],[37,0,0,"-","slots"],[38,0,0,"-","utterances"]],"dialogy.types.entity":[[24,0,0,"-","amount_of_money"],[25,0,0,"-","base_entity"],[26,0,0,"-","credit_card_number"],[27,0,0,"-","deserialize"],[28,0,0,"-","duration"],[29,0,0,"-","keyword"],[30,0,0,"-","numerical"],[31,0,0,"-","people"],[32,0,0,"-","time"],[33,0,0,"-","time_interval"]],"dialogy.types.entity.amount_of_money":[[24,1,1,"","CurrencyEntity"]],"dialogy.types.entity.amount_of_money.CurrencyEntity":[[24,3,1,"","entity_type"],[24,2,1,"","from_duckling"],[24,2,1,"","get_value"],[24,3,1,"","unit"]],"dialogy.types.entity.base_entity":[[25,1,1,"","BaseEntity"],[25,4,1,"","entity_synthesis"]],"dialogy.types.entity.base_entity.BaseEntity":[[25,2,1,"","add_parser"],[25,3,1,"","alternative_index"],[25,3,1,"","alternative_indices"],[25,3,1,"","body"],[25,2,1,"","copy"],[25,3,1,"","dim"],[25,3,1,"","entity_type"],[25,2,1,"","from_dict"],[25,2,1,"","from_duckling"],[25,2,1,"","get_value"],[25,2,1,"","json"],[25,3,1,"","latent"],[25,3,1,"","parsers"],[25,3,1,"","range"],[25,3,1,"","score"],[25,3,1,"","type"],[25,3,1,"","value"],[25,3,1,"","values"]],"dialogy.types.entity.credit_card_number":[[26,1,1,"","CreditCardNumberEntity"]],"dialogy.types.entity.credit_card_number.CreditCardNumberEntity":[[26,3,1,"","entity_type"],[26,2,1,"","from_duckling"],[26,3,1,"","issuer"],[26,3,1,"","value"],[26,3,1,"","values"]],"dialogy.types.entity.deserialize":[[27,1,1,"","EntityDeserializer"]],"dialogy.types.entity.deserialize.EntityDeserializer":[[27,2,1,"","deserialize_duckling"],[27,3,1,"","entitiy_classes"],[27,2,1,"","get_dimension"],[27,2,1,"","get_entity_class_str"],[27,2,1,"","get_keys_in_value_as_str"],[27,2,1,"","register"],[27,2,1,"","validate"]],"dialogy.types.entity.duration":[[28,1,1,"","DurationEntity"]],"dialogy.types.entity.duration.DurationEntity":[[28,2,1,"","as_time"],[28,3,1,"","entity_type"],[28,2,1,"","from_duckling"],[28,3,1,"","normalized"],[28,3,1,"","unit"]],"dialogy.types.entity.keyword":[[29,1,1,"","KeywordEntity"]],"dialogy.types.entity.keyword.KeywordEntity":[[29,3,1,"","alternative_index"],[29,3,1,"","alternative_indices"],[29,3,1,"","body"],[29,3,1,"","dim"],[29,3,1,"","entity_type"],[29,3,1,"","latent"],[29,3,1,"","parsers"],[29,3,1,"","range"],[29,3,1,"","score"],[29,3,1,"","type"],[29,3,1,"","value"],[29,3,1,"","values"]],"dialogy.types.entity.numerical":[[30,1,1,"","NumericalEntity"]],"dialogy.types.entity.numerical.NumericalEntity":[[30,2,1,"","as_time"],[30,3,1,"","entity_type"],[30,2,1,"","from_duckling"]],"dialogy.types.entity.people":[[31,1,1,"","PeopleEntity"]],"dialogy.types.entity.people.PeopleEntity":[[31,3,1,"","entity_type"],[31,2,1,"","from_duckling"]],"dialogy.types.entity.time":[[32,1,1,"","TimeEntity"]],"dialogy.types.entity.time.TimeEntity":[[32,2,1,"","collect_datetime_values"],[32,3,1,"","dim"],[32,2,1,"","from_duckling"],[32,2,1,"","get_value"],[32,3,1,"","grain"],[32,2,1,"","is_uniq_date_from_values"],[32,2,1,"","is_uniq_day_from_values"],[32,3,1,"","origin"],[32,2,1,"","pick_value"],[32,2,1,"","set_entity_type"]],"dialogy.types.entity.time_interval":[[33,1,1,"","TimeIntervalEntity"]],"dialogy.types.entity.time_interval.TimeIntervalEntity":[[33,2,1,"","collect_datetime_values"],[33,3,1,"","dim"],[33,2,1,"","from_duckling"],[33,3,1,"","from_value"],[33,2,1,"","get_value"],[33,3,1,"","origin"],[33,3,1,"","to_value"],[33,3,1,"","type"],[33,3,1,"","value"],[33,3,1,"","value_keys"],[33,3,1,"","values"]],"dialogy.types.intent":[[34,1,1,"","Intent"]],"dialogy.types.intent.Intent":[[34,2,1,"","add_parser"],[34,3,1,"","alternative_index"],[34,2,1,"","apply"],[34,2,1,"","cleanup"],[34,2,1,"","fill_slot"],[34,2,1,"","json"],[34,3,1,"","name"],[34,3,1,"","parsers"],[34,3,1,"","score"],[34,3,1,"","slots"]],"dialogy.types.signal":[[36,0,0,"-","signal"]],"dialogy.types.slots":[[37,1,1,"","Slot"]],"dialogy.types.slots.Slot":[[37,2,1,"","add"],[37,2,1,"","clear"],[37,2,1,"","json"],[37,3,1,"","name"],[37,3,1,"","types"],[37,3,1,"","values"]],"dialogy.utils":[[39,0,0,"-","datetime"],[39,0,0,"-","file_handler"],[39,0,0,"-","logger"],[39,0,0,"-","misc"],[39,0,0,"-","naive_lang_detect"],[39,0,0,"-","normalize_utterance"],[39,0,0,"-","temperature_scaling"]],"dialogy.utils.datetime":[[39,4,1,"","dt2timestamp"],[39,4,1,"","is_unix_ts"],[39,4,1,"","make_unix_ts"],[39,4,1,"","unix_ts_to_datetime"]],"dialogy.utils.file_handler":[[39,4,1,"","create_timestamps_path"],[39,4,1,"","load_file"],[39,4,1,"","read_from_json"],[39,4,1,"","save_file"],[39,4,1,"","save_to_json"]],"dialogy.utils.misc":[[39,4,1,"","traverse_dict"],[39,4,1,"","validate_type"]],"dialogy.utils.naive_lang_detect":[[39,4,1,"","lang_detect_from_text"]],"dialogy.utils.normalize_utterance":[[39,4,1,"","dict_get"],[39,4,1,"","is_each_element"],[39,4,1,"","is_list"],[39,4,1,"","is_list_of_string"],[39,4,1,"","is_string"],[39,4,1,"","is_unsqueezed_utterance"],[39,4,1,"","is_utterance"],[39,4,1,"","normalize"],[39,4,1,"","utterance2alternatives"]],"dialogy.utils.temperature_scaling":[[39,4,1,"","T_scaling"],[39,4,1,"","calc_bins"],[39,4,1,"","fit_ts_parameter"],[39,4,1,"","get_metrics"],[39,4,1,"","save_reliability_graph"]],"dialogy.workflow":[[40,0,0,"-","workflow"]],"dialogy.workflow.workflow":[[40,1,1,"","Workflow"]],"dialogy.workflow.workflow.Workflow":[[40,3,1,"","NON_SERIALIZABLE_FIELDS"],[40,3,1,"","debug"],[40,2,1,"","execute"],[40,2,1,"","flush"],[40,3,1,"","input"],[40,2,1,"","json"],[40,3,1,"","lock"],[40,3,1,"","output"],[40,3,1,"","plugins"],[40,2,1,"","run"],[40,2,1,"","set"],[40,2,1,"","train"]],dialogy:[[2,0,0,"-","base"],[7,0,0,"-","cli"],[8,0,0,"-","constants"],[9,0,0,"-","plugins"],[22,0,0,"-","types"],[39,0,0,"-","utils"],[40,0,0,"-","workflow"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"],"4":["py","function","Python function"],"5":["py","property","Python property"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute","4":"py:function","5":"py:property"},terms:{"0":[4,5,6,8,12,13,14,15,16,17,18,26,28,30,32,33,34,39],"00":[4,14,15,30,32,33],"000":[15,32,33],"0000":14,"001":39,"01":[15,30,32],"013":[],"014":[],"01t04":[],"01t08":[],"01t09":15,"01t13":15,"01t18":33,"02":[15,39],"02116":13,"02t00":15,"03":[15,32,33],"034":[],"04":[32,33],"04t00":33,"04t18":[],"05":[4,14,15,30,32,33],"05t00":15,"06":[],"07":[],"07t00":[],"07t19":39,"08":[],"08333333333333333":15,"089":[],"09":[],"099":[],"0th":3,"0x7f01380da490":[],"0x7f0924afb460":[],"0x7f1468ef5460":[],"0x7f1a672044f0":[],"0x7f239778b3d0":[],"0x7f23fdf070d0":[],"0x7f26d4bec4c0":[],"0x7f299944bfa0":[],"0x7f395fdc9130":[],"0x7f3ba5a21310":[],"0x7f3d1bd58730":[],"0x7f412bc76400":[],"0x7f4509a98af0":[],"0x7f458d2a5580":[],"0x7f46342675b0":[],"0x7f4bd15f0550":[],"0x7f4c9f156460":[],"0x7f500450c1c0":[],"0x7f55c77c84c0":[],"0x7f571b6d4160":[],"0x7f6b03748d00":[],"0x7f6c02324a90":[],"0x7f6d9c05b2e0":[],"0x7f7147cee370":[],"0x7f7415e69dc0":[],"0x7f7502619eb0":[],"0x7f76760eb550":[],"0x7f7b64f9ffa0":[],"0x7f843a1c5fd0":[],"0x7f8bf9651070":[],"0x7f8ced4426a0":[],"0x7f8fd69c5820":[],"0x7f8fdce11580":[],"0x7f949b167490":[],"0x7f96df591790":[],"0x7fa6eaeb5490":[],"0x7fa9ff656370":[],"0x7fab8d696460":[],"0x7fae7f5a16a0":[],"0x7fbb501c2100":[],"0x7fbc82218610":[],"0x7fbf38c22460":[],"0x7fc28dcf2700":[],"0x7fc8bb68c280":[],"0x7fcf947de4c0":[],"0x7fcf9fc94f40":[],"0x7fd1e3a4fb50":[],"0x7fd38c638df0":[],"0x7fd3a476c3d0":[],"0x7fd6c1eaadf0":[],"0x7fd7ac0ad640":[],"0x7fe08166aa60":[],"0x7fe10623f700":[],"0x7fe13e70e940":[],"0x7fe524f7c6a0":[],"0x7fec70909340":15,"0x7ff4e041f400":[],"0x7ff675de6f40":[],"0x7ff7f72824f0":[],"1":[0,4,5,6,8,13,14,15,17,18,19,26,28,30,31,32,33,34,39],"10":[4,6,14,15,33],"10000":39,"101":[],"105":[],"106":[],"107":[],"108":[],"109":[],"11":[6,15,28,30,39],"110":[],"111":[],"112":[],"113":[],"114":[],"115":[],"116":[],"117":[],"118":[],"119":[],"11t00":[],"11t17":15,"11t18":[],"12":[6,14,15,30],"120":[],"121":[],"122":[],"123":[],"124":[],"125":[],"127":[],"129":[],"12t11":30,"12t15":[],"12t16":[],"12t19":[],"12t20":[],"12t21":[],"13":[6,15,39],"130":15,"131":[],"134":[],"136":[],"138":[],"13t00":[],"13t06":[],"13t12":[],"13t16":[],"13t18":[],"13t19":[],"13t22":[],"14":[6,15,39],"141":[],"143":[],"14t00":[15,32],"14t06":[],"14t16":[],"14t17":15,"14t18":[],"14t19":15,"14t22":[],"15":[6,15,39],"15t00":[4,14,15,32],"15t06":15,"15t08":[],"15t10":[],"15t11":[],"15t12":[],"15t13":[],"15t15":14,"15t16":33,"15t18":33,"15t19":[],"15t22":15,"15th":14,"16":[6,15,33],"160":[],"163":[],"1644241599537":39,"16666666666666666":[],"16t00":[],"16t06":[],"16t16":33,"16t18":33,"16t22":[],"17":[14,15],"176":15,"17t16":[32,33],"17t18":33,"18":[15,17],"180":15,"183":[],"186":[],"18t16":[],"18t18":33,"19":15,"1911":13,"1996":32,"1_code":4,"1st":[15,32],"2":[0,4,5,6,8,14,15,17,19,26,28,30,31,32,33,34,39],"20":15,"2019":[14,32],"2021":[4,14,15,32,33],"2022":[15,30,32,33,39],"2023":32,"21":[15,32],"210":[],"212":[],"21t00":33,"22":[15,30],"22t17":[],"22t19":[],"23":[15,17],"236":[],"23t00":[],"23t06":[],"23t16":[],"23t18":[],"23t22":[],"24":[15,17],"24t16":[],"24t18":[],"25":[15,26],"25t16":[],"25t18":33,"26":15,"267":[],"27":15,"270":[],"27t00":32,"27th":32,"28":[15,32],"280":[],"284":[],"28t00":33,"29":15,"29th":32,"2h":[15,28],"2nd":15,"3":[0,4,5,6,14,15,17,19,26,28,30,31,32,33,34,39],"30":[4,14,15,30,32,33,39],"31":15,"31st":15,"31t00":15,"32":15,"320":[],"33":[15,17],"3333333333333333":32,"34":15,"340":[],"344":[],"347":[],"35":15,"350":[],"353":[],"36":15,"367":[],"37":[15,30],"371":[],"372":[],"38":15,"389":[],"39":[15,39],"394":[],"3pm":32,"4":[0,4,6,14,15,17,19,26,28,30,31,32,33,39],"40":15,"404":[],"408":[],"41":[15,26],"411":[],"4111111111111111":[15,26],"42":15,"420":[],"422":[],"43":15,"44":15,"441":[],"444":[],"45":15,"455":[],"459":[],"46":15,"47":15,"470":[],"476":[],"48":15,"49":[15,39],"499":[],"4pm":32,"5":[4,6,13,15,16,26,28,30,31,32,33,39],"50":39,"504":[],"51":39,"519":[],"52":[3,39],"53":39,"537827":39,"54":[15,39],"542":[],"548":[],"549":[4,6],"55":39,"550":[4,6],"551":[4,6],"552":[4,6],"553":[4,6],"56":39,"57":[],"570":[],"58":[],"59":[],"5pm":[32,33],"5th":15,"6":[4,6,15,30,32,33,39],"609":[],"610":[],"613":[],"625":[],"63":[],"635":[],"639":15,"64":[],"657":[],"659":[],"66":[],"6666666666666666":[],"667":[],"67":[],"688":[],"6pm":32,"6th":32,"7":[4,6,15,19,30,32,33,39],"705":[],"707":[],"71":[],"72":30,"7200":[15,28],"725":[],"73":[],"733":[],"74":[],"745":[],"750":[],"753":[],"758":[],"769":[],"77":[],"781":[],"784":[],"795":[],"7pm":15,"7th":32,"8":[4,6,14,15,30,32,34,39],"8000":[15,16],"809":[],"81":[],"82":[],"839":[],"85":[],"86":[],"8601":[4,39],"862":15,"87":[],"88":[],"884":[],"89":[],"891":[],"893":[],"9":[4,6,15,28,30,39],"90":[],"91":[],"910":[],"914":[],"92":[],"93":[],"94":[],"95":[],"956":[],"958":[],"962":[],"97":[],"98":[],"988":[],"997":[],"9pm":15,"\u0915\u0930":15,"\u0915\u0932":15,"\u0917":15,"\u0925":15,"\u0926":15,"\u0939":15,"abstract":[0,2,11,12,13,17,18,19,20],"break":5,"case":[6,13,14,15,19,28,32,34,39,40],"class":[0,3,4,5,6,8,11,12,13,14,15,16,17,18,19,20,24,25,26,27,28,29,30,31,32,33,34,37,40],"const":[6,25,39],"default":[4,5,6,7,13,15,24,25,30,39,40],"do":[1,14,15,30,32],"final":40,"float":[3,4,5,11,13,15,18,24,25,29,34,39],"function":[6,7,11,12,13,15,17,18,19,20,25,39,40],"import":[4,5,6,15,17,19,24,26,28,29,30,31,32,33,34,35,38,39,40],"int":[4,13,16,18,25,29,34,39],"long":32,"new":[0,4,5,6,7,17,23,25],"null":14,"return":[0,3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,24,25,26,27,28,30,31,32,33,34,37,39,40],"static":[3,13,27],"super":6,"switch":[4,40],"true":[4,6,13,14,17,18,20,32,34,39],"try":[4,39],"while":[4,6,13,15,20,25],A:[0,3,4,5,6,7,13,15,16,17,18,19,20,22,25,31,34,39,40],As:20,At:14,For:[32,34],If:[4,5,6,13,15,17,18,20,25,32,34,39],In:[4,5,6,13,15,17,19,26,28,30,31,32,33,34,39],It:[0,4,5,6,11,24,32,40],Its:25,Not:20,Of:15,One:[17,18],Or:39,Such:6,That:5,The:[0,3,4,5,6,7,11,12,13,14,15,17,18,19,20,25,30,34,39,40],Then:4,There:[4,15,18,22,34],These:[3,4,6,15,17,29],To:[6,15,20,32],_:[6,11,13,17,18,19,20,26,28,30,31,32,33,34],__any__:15,__init__:6,__setattr__:[4,6],_alternatives_:11,_callback_:[4,14],_error_:13,_frozen_setattr:[4,6],_greeting_:[5,6],_make:[4,6],_meta:[15,17,28],_oos_:[],_search:13,_thread:40,ab:13,abc:6,abil:34,abort:7,about:[15,32],abov:[3,15],absenc:4,absolut:15,access:[20,23,24,25,29,35,39],account:[6,34],across:[6,14,15],act:[15,22],action:[32,34],activ:[0,4],activate_latent_ent:15,ad:[3,15,23],adapt:39,add:[25,28,37,40],add_pars:[25,34],add_project_command_argu:7,add_workflow_command_argu:7,addit:[15,20],address:[15,31],adjust_signal_strength:[],advent:15,advis:6,affect:18,after:[6,14,15,28,40],again:6,against:3,aggreg:[3,4],aggregate_ent:3,aggregate_fn:[],ago:[],ahead:28,ai:[0,3,7,15,39],air:22,algorithm:[],all:[0,3,6,10,11,17,18,19,24,25,30,32,33,34,37,40],allocate_lock:40,allow:[4,17,20],along:[0,6],alpha2:15,alreadi:[6,7,15,22],already_paid:15,also:[0,5,6,13,15,17,28,30],altern:[6,11,12,14,15,16,17,18,19,38,39],alternative_index:[4,5,6,14,15,17,24,25,26,27,28,29,30,31,32,33,34],alternative_indic:[15,24,25,26,28,29,30,31,32,33],alwai:[5,15],am:[4,11,15,32,33],am_scor:0,ambigu:15,amount:[0,15,24,27,34],amount_of_monei:[22,23,27],an:[0,2,3,5,6,7,11,12,13,15,17,18,19,20,22,25,29,34,39,40],ani:[0,3,4,5,6,7,11,12,13,14,15,17,18,19,20,23,24,25,26,27,28,29,32,33,34,37,39,40],anoth:[18,34],answer:34,anyon:6,anyth:6,apart:[5,32],api:[0,4,5,15,40],append:[6,13],appli:[3,6,13,15,20,25,34,39],applic:[0,15],apply_entity_class:15,apply_filt:[3,15],appropri:[13,15],april:32,ar:[0,3,4,5,6,7,11,13,14,15,17,18,19,20,22,23,24,31,32,34,37,39,40],arbitrari:[5,25,39],aren:[6,40],arg:[7,13],argbrighton:[15,16],args_map:13,argument:[0,4,5,7,39],argumentpars:7,arrang:20,artifact:[7,13,40],arxiv:13,as_tim:[28,30],asia:[4,15,26,28,30,31,32,33,39],asr:[0,4,11,13,19,29,39],asr_output:11,assert:39,assign:4,assist:[20,39],associ:[20,22,34],assum:[6,14,15],assumpt:30,attach:[4,6],attempt:[],attent:6,attr:[4,6],attribut:[4,5,7,15,17,24,25,28,30,32,33,34,40],attributeerror:13,automat:34,avail:[7,13,14,17,18,20,34,39],azur:17,bad:11,bank:34,base:[0,1,8,11,12,13,14,15,16,17,18,19,20,24,25,26,27,28,29,30,31,32,33,34,37,40,41],base_ent:[5,22,23,24,26,27,28,29,30,31,32,37],baseent:[3,5,6,14,15,16,20,24,25,26,27,28,29,30,31,32,34,37],baseestim:11,bear:[4,5],becaus:[0,3,5,6,15,32],becom:5,been:[6,13,32],beep:39,befor:[0,11,39],being:[25,34],belong:6,below:4,best:19,best_transcript:6,better:34,between:[11,15,20,22,32,33,34],beyond:[],big:15,bit:[11,20],black:40,blackbox:40,bloat:[25,40],block:[0,34],blue:17,bodi:[3,4,14,15,17,24,25,26,28,29,30,31,32,33,34],book:[4,6,15,28],bool:[4,6,11,13,14,17,18,20,25,29,32,34,39],boost:[],booster:[],boot:15,bop:39,bot:14,both:[4,5,32,33],box:40,branch:[0,7],budget:34,build:[0,7],bundl:18,calc_bin:39,calcul:13,calibr:[9,10],calibra:11,calibrationmodel:11,call:[4,6,15,17,25,34,39],callabl:[27,39],callback_datetim:[4,14],can:[0,3,4,5,6,13,14,15,18,20,22,24,28,30,32,33,34,37,40],candid:[17,18],canonic:[9,10],canonicalizationplugin:12,card:[0,15,23,27],carri:15,cast:[10,23],categor:34,categori:[6,20],caution:25,cd:[0,7],certain:[15,17,20,39],chang:[0,5,11,25],charact:39,check:[4,6,11,20,25,32,34,39],child:15,children:[15,31],chronolog:32,classif:[9,10,22],classifi:[0,4,11,13,19,20],classmethod:[4,5,24,25,26,27,28,30,31,32,33],cleanup:[20,34],clear:37,clearli:4,clf_featur:[0,4,6,19],cli:[0,1,41],clone:0,close:6,code:[0,4,15,18,39,40],collect:[6,14,31,32,33],collect_datetime_valu:[32,33],colour:17,column:[6,13],com:[0,3,15,20,39],combin:[0,3,6,14],combine_date_tim:[9,10],combine_time_entities_from_slot:[6,14],combinedatetimeoverslot:[0,4,6,14],combinedatetimeplugin:[],combinetimeentitiesfromslot:[],come:[4,15,19],command:[0,7],command_str:7,common:[4,5],compar:[3,15],con:24,concaten:[0,19,34],conceal:25,conda:0,condit:[6,15,40],condition:15,confid:[3,4,5,6,34],configur:[3,15,18,20,34,39],confus:[4,5],connect:[0,15],consensu:[],consid:[3,11,22],consider:[],consist:[4,15],constant:[1,41],constitu:[],constraint:[15,27,32,33],constructor:6,contain:[0,3,4,5,7,11,13,15,20,29,31,32,34,40],content:41,context:15,contextu:[],convers:[4,5,6,22,40],convert:[4,15,25,28,30,34,37,39],copi:[7,25],copier:7,correct:15,correspond:13,could:[4,5,6,15,32],count:[],counter:6,counterpart:[],countri:[4,15],coupl:31,cover:19,cpu:15,creat:[0,4,5,6,7,15,17,20,25,34,39],create_timestamps_path:39,creation:6,credit:[0,15,23,27],credit_card_numb:[22,23,27],creditcardnumberent:[26,27],crimson:17,cross:4,csv:7,cuda:39,cue:34,currenc:[15,24],currencyent:[24,27],current:[0,5,6,14,18,20,28,34,37,40],current_ent:14,current_st:[4,6,15,19],d:[4,5,24,25,26,28,30,31,32,33],d_valu:32,dai:[4,14,15,28,30,32],dampen:[],data:[3,4,6,7,11,12,13,15,17,19,25,40],data_column:13,databas:15,datafram:[6,11,12,13,15,17,19,40],dataset:7,date:[0,4,10,14,22,24,28,30,32,33,34,39],date_tim:39,datetim:[1,4,14,15,24,30,32,33,34,41],datetime_filt:[15,16],datetime_slot:34,de:3,debug:[6,11,12,13,14,15,16,17,18,19,20,25,34,40],decemb:[14,15,32],decid:[6,24],decod:15,deep:25,deepli:39,def:[0,4,6],defin:[15,18,20,25,35,39],definit:37,delhi:17,demo:34,depend:[0,3,4,23],depict:[],deploi:15,deriv:[0,4,6,13],descend:[5,6],describ:[0,4,5,6,11,12,13,17,18,19,20,34,39,40],descript:[0,5,19,24,34,40],deseri:[22,23],deserialize_duckl:27,deserialize_duckling_ent:[],design:20,dest:[6,11,12,13,14,15,16,17,18,19,20,26,28,30,31,32,33],destin:[22,34],destination_path:7,detail:[15,19,34,37,40],detect:[0,29],develop:0,devic:39,df:11,dialog:[5,14,20],dict:[3,4,5,6,11,13,14,15,16,17,18,19,25,26,27,28,29,32,33,34,37,39,40],dict_:25,dict_get:39,dict_travers:39,dictionari:[4,5,11,25,32,33,34,37,39],did:32,didn:32,differ:[15,18,25,32,34],digit:39,dim:[24,25,26,27,28,29,30,31,32,33],dimens:[15,16,24,26,28,30,31,32,33],dir:7,dir_path:39,directori:[0,7,39],divis:32,doc:[0,20,34],docker:15,document:40,doe:[1,20],doesn:[3,4,13,25,39],don:[4,5,6,15,34,39],done:[3,5,19],down:15,download:[0,7],dp:18,dp_search:18,drop:15,dry:0,dry_run:39,dsttzinfo:[],dt2timestamp:[15,30,39],duckl:[0,4,14,15,16,18,23,24,30,32],duckling_entity_dict:27,duckling_plugin:[9,10,16,26,28,30,31,32,33],ducklingplugin:[0,5,14,15,16,18,26,28,30,31,32,33],ducklingpluginlb:16,due:39,duplic:3,durat:[0,15,22,23,27,30,32],duration_cast_oper:[15,27,28],durationent:[27,28],dure:11,e:4,each:[4,18,19,20,25,32,34,39],eagerli:20,easi:17,easili:[],either:[15,22,32,33],elect:[],element:[5,25,39],els:[6,13,32,39],emerald:17,emit:[],en:[4,6,19],en_core_web_sm:17,en_gb:15,en_in:[4,6,15,16,19,26,28,30,31,32,33],en_u:15,enabl:13,encod:39,end:[4,14,15,17,19,26,28,30,32,33],end_dat:34,english:[4,20],enough:29,ensur:0,entir:[4,6],entit:29,entiti:[0,1,3,4,5,6,12,14,15,16,17,18,20,22,34,37,39,40],entitiy_class:27,entity_column:12,entity_consensu:3,entity_dict:15,entity_extractor:[1,2,15,17,18],entity_pattern:18,entity_scor:3,entity_synthesi:25,entity_typ:[4,14,15,17,18,24,25,26,28,29,30,31,32,33],entity_type_val_group:3,entity_type_value_group:3,entitydeseri:27,entityscoringmixin:[3,15,17,18],entri:7,env:[4,6],equal:15,equival:6,error:39,especi:15,etc:[15,29,32],evalu:6,even:[3,4,5,6,20],everi:[3,4],everyth:39,evid:[],ex:32,exactli:4,exampl:[6,7,10,11,20,22,31,32,34],except:39,exclus:39,execut:[6,15,20,34,40],exhaust:40,exhibit:[7,40],exist:[0,2,5,6,7,13,39],exit:[0,7],expect:[4,6,7,13,15,16,18,19,20,22,25,28,39,40],experi:15,explicit:32,explicitli:23,explor:[6,34],expos:7,express:[0,6,15],extra:[15,40],extract:[0,17,18,20,29,37],f:39,facilit:39,fail:39,fairli:0,fallback:4,fallback_int:[],fallback_label:13,fals:[4,6,7,11,12,13,14,15,16,17,18,19,20,24,25,26,28,29,30,31,32,33,34,39,40],featur:[0,4,6,11,13,19,34],featureextractor:11,femal:15,few:[0,6,17,18,20,22,40],field:6,file:[4,6,7,39],file_handl:[1,41],file_nam:39,file_path:39,fill:[4,5,6,10,14,22,34,37],fill_multipl:[20,34],fill_slot:34,filler:[0,20],filter:[3,4,10,11,25],filter_asr_output:11,filter_typ:15,find:[],fine:39,first:[6,11,14],fit:11,fit_ts_paramet:39,fix:32,flag:[13,17,18],flatten:[39,40],flight:[4,15,32,33],flush:40,fn:7,fname:11,follow:[0,4,5,6,7,34,40],forc:0,forest:[],forgot:6,fork:15,form:39,format:[4,11,13,15,32,33,39],former:6,found:[14,20,34],free:15,frequenc:[],from:[3,4,5,6,7,11,13,14,15,17,18,19,24,25,26,28,29,30,31,32,33,34,39,40],from_dict:[4,5,6,18,25],from_duckl:[24,25,26,28,30,31,32,33],from_valu:[15,33],froze:15,frozen:[2,6],frozeninstanceerror:[4,6],fruit:30,full:6,fun:15,fundament:0,futur:15,fuzzi:18,fuzzy_dp_config:18,fuzzy_init:18,fuzzy_threshold:18,gain:17,gap:[],gener:[6,7,22,32],geographi:15,get:[6,13,15,25,28,32,39,40],get_dimens:27,get_ent:[17,18],get_entity_class_str:27,get_entity_typ:12,get_formatted_gridparam:13,get_fuzzy_dp_search:18,get_gridsearch_grid:13,get_keys_in_value_as_str:27,get_metr:39,get_oper:15,get_tracked_slot:14,get_valu:[24,25,32,33],get_words_from_nlp:18,get_workflow:7,get_workflow_fn:7,getter:24,girl:15,git:[0,7],github:[0,3,7,15,39],gitlab:[0,7],give:14,given:[6,15,25,39],goe:[],gpe:17,grain:[4,14,15,30,32,33],graph:4,greater:15,green:17,greet:6,grid:13,gridsearch:13,gridsearchcv:13,group:3,guard:[2,10,11,12,13,14,16,17,18,19,20],h:[0,7],ha:[0,3,4,6,13,15,17,25,32,33,34,40],hack:18,had:6,handi:4,handl:[20,24,29,30],happen:15,hard:[0,13],has_time_compon:14,have:[3,4,6,11,14,15,17,20,24,30,31,32,33,34,39,40],head:[0,7],header:16,healthi:[],hello:[4,6,7,39],help:[0,4,6,7,17,25,28,34],here:[6,7,13,15,32,39],heurist:2,heuristic_based_int:6,heuristicbasedintentplugin:6,hi:4,hi_in:15,high:[],higher:[0,3,34],highest:[3,5],highli:6,hindi:15,histori:[4,6,19],hold:34,hope:39,hour:[15,28,30,32,33],how:[0,1,15],howev:6,html:20,http:[3,4,13,15,16,20,39],hyperparamet:13,hypothesi:4,i:[6,11,15,17,28,31,32,33,34,39],id:15,ideal:[],ident:[3,39],identifi:[4,20,25,34],identity_token:13,immut:[4,5,6,40],impact:[13,18],imper:[],implement:[6,12,15],impli:[],improv:[],in_:6,inaud:11,includ:25,index:[3,34,39],indexerror:[25,39],indic:3,indigo:17,individu:18,infer:[0,11,13,32,40],info:[],inform:[15,25,28,36,40],init_model:13,initi:[13,18],input:[0,1,2,6,11,12,13,14,15,17,18,19,20,26,28,30,31,32,33,39,40],input_:[0,6,15,16,18,19,39,40],input_column:[6,11,12,14,15,16,17,18,19],input_i:4,input_s:3,input_x:4,insert:37,instal:7,instanc:[2,5,6,7,15,25,34,37,39,40],instead:[0,4,6,15,34,39],integ:39,integr:23,intend:25,intent:[0,1,2,4,5,10,11,13,17,19,20,22,26,28,30,31,32,33,37,40],intent_detection_slot_fil:20,intent_vot:[],interact:14,intermedi:[6,18,40],interpret:34,intersect:15,interv:[15,23,24,30],invers:15,invoc:[0,7],involv:18,ip:6,ipython:15,irrespect:20,is_dat:14,is_each_el:39,is_list:39,is_list_of_str:39,is_str:39,is_uniq_date_from_valu:32,is_uniq_day_from_valu:32,is_unix_t:39,is_unsqueezed_utter:39,is_upd:7,is_utter:39,isn:[4,13,15,40],iso3166:15,iso:[4,15,32,33,39],issu:[2,3,15,23,39],issuer:[15,26],ist:[],item:[0,6,20],iter:40,its:[3,6,7,15,20,34,40],itself:[15,40],jade:17,jan:[15,32],job:11,join:[14,19],json:[3,4,5,14,15,25,34,37,40],just:[5,11,15,18,39],k:39,keep:[4,6,18],kei:[4,5,11,13,19,33,37,39],kept:40,key_error:39,keyerror:[25,39],keyword:[2,17,22,23],keywordent:[17,18,20,29],kid:31,knew:6,know:[15,39],known:[23,34],kolkata:[4,15,26,28,30,31,32,33,39],kwarg:[6,7,13,24,25,26,28,30,31,32,33],label:[13,17,18],label_column:13,label_count:13,labelencod:13,labels_list:39,labels_oneh:39,lack:0,lambda:[6,15,39],lang:[4,6,18,19],lang_detect_from_text:39,languag:[4,15,16,18,26,28,30,31,32,33,39,40],last:[4,6,32,39],latenc:15,latent:[4,15,24,25,26,28,29,30,31,32,33],latent_ent:[4,6,19],latest:[0,7],latter:6,lb_plugin:[9,10],lead:39,learn:[6,11],least:[4,6,13],leav:39,length:3,less:3,lesser:15,let:[6,15,20],li:[0,7],lib:[4,6,39],librari:0,like:[4,5,6,15,22,28,34],line:7,link:[7,20],lint:7,list:[0,3,4,5,6,11,12,13,14,15,16,17,18,19,20,25,26,29,32,33,34,37,39,40],list_entity_plugin:[9,10],list_of_ent:15,list_of_iso_639:4,list_of_tz_database_time_zon:4,list_search_plugin:[9,10],listentityplugin:[5,17],listsearchplugin:[5,18],lm:11,lm_score:0,load:[13,17,39,40],load_fil:39,loader:39,local:[4,6,7,15,16,19,26,28,30,31,32,33,39,40],locat:[7,34],lock:40,log:[4,5,6,34,40],logger:[1,41],logic:39,logit:39,logits_list:39,look:[6,15,34,39],lookup:29,lose:40,lost:[4,34],lower:[0,3],lr:39,machin:[15,34],made:[],mai:[3,4,6,13,15,20,32,39],main:7,make:[0,3,7,13,15,28,39],make_transform_valu:3,make_unix_t:[4,39],male:15,man:15,manag:[0,5,40],manage_project:7,mani:[],manner:32,map:[13,17,18,20,34],mar:39,march:15,mark:19,mask:12,mask_token:12,mask_transcript:12,master:[0,7,15],mastercard:39,match:[15,17,18,20,39],match_dict:18,matchtyp:[17,18],matter:32,max_it:39,mayb:34,maybe_utter:39,me:15,mean:[4,5,6,15,22,34],meant:[25,34],mention:32,merg:19,merge_asr_output:[9,10],merge_asr_output_plugin:[6,19],mergeasroutput:0,mergeasroutputplugin:[6,19],messag:[0,7],met:[],meta:[28,29],metadata:3,method:[0,6,11,12,13,15,16,17,18,19,20,25,30,40],microservic:40,might:[4,6],migrat:0,millisecond:[15,16],miniconda3:[4,6],minimum:3,minut:32,misc:[1,41],mismatch:39,miss:[4,7,19,39],mixin:3,mlp:[9,10],mlpclassifi:13,mlpmulticlass:[5,13,34],mode:39,model:[0,11,13,17,18,39],model_dir:13,model_nam:11,model_select:13,modif:[6,25,34],modifi:[3,25,34,40],modul:[0,41],moment:14,mondai:[15,32],monei:[0,15,24,27,34],month:[30,32],more:[0,13,15,20,25,34],morn:32,most:[3,4,6,39,40],mother:10,ms:[4,15,39],multipl:[3,15,34,39],must:[5,7,34,39],mutat:[20,25],my:[11,15,26,34],n:[4,13,19,31,39],naiv:6,naive_lang_detect:[1,41],name:[0,4,5,6,7,8,14,15,20,25,34,37,39],namespac:[0,7],natur:[15,16,26,28,30,31,32,33],navi:17,navig:39,need:[0,4,5,6,14,15,17,18,20,25,28,30,32,33,39,40],neg:32,ner:[10,18],ner_search:17,nest:[39,40],never:6,newlin:39,night:32,nlp:[17,18],nlpprogress:20,node:4,noisi:0,nomenclatur:[4,5],non:39,non_serializable_field:40,none:[3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,24,25,26,27,28,29,30,31,32,33,34,39,40],nonetyp:7,normal:[4,15,19,28,39],normalize_utter:[1,41],note:[4,15],noth:[4,5,24,25,26,28,29,30,31,32,33,34,37,40],notic:[15,30],notion:15,now:[4,5,15],np:[],ns:15,number:[0,3,6,13,15,20,22,23,24,27,28,30,31,32,34],numer:[15,22,23,24,27,31],numericalent:[27,30],o:[6,15,39],obj:39,obj_typ:39,object:[3,4,5,6,7,8,13,15,25,27,34,37,39,40],observ:[],obtain:[15,24,26,28,30,31,32,33,34],occurr:[],oct:32,octob:32,off:[4,40],offer:6,often:[15,17],onc:20,one:[3,6,13,14,20,22,32,40],onli:[0,5,15,17,18,19,20,25,32,34],oop:6,op:40,open:[23,39],oper:[19,28,34],oppos:18,option:[0,3,4,5,6,7,13,14,15,16,17,18,20,24,25,26,29,30,31,32,33,34,39,40],orchestr:20,order:[0,5,6,32,40],org:[4,13],organ:[0,7],origin:[13,15,22,25,29,30,32,33,34],original_int:[5,6,13,15,17,26,28,30,31,32,33],other:[0,3,4,6,15,17,18,20,25,40],otherwis:13,our:[4,6,15,32,34],out:[4,5,6,15,17,19,26,28,30,31,32,33,34,39,40],output:[0,1,2,6,11,12,13,14,15,16,17,18,19,20,24,26,28,30,31,32,33,39,40],output_column:[6,11,12,14,15,16,17,18,19],output_dir:7,over:[3,6,13,17],overal:15,overrid:[25,40],overridden:[],packag:41,pai:[6,15],paid:15,pair:[32,40],panda:13,param:[13,18,39],param_search:13,paramet:[3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,24,25,32,33,34,39,40],pari:4,park:32,pars:[4,14,15,16,17,18,24,26,28,30,31,32,33,34,39,40],parser:[4,5,6,7,14,15,17,24,25,26,28,29,30,31,32,33,34],part:[3,13,15,20,32,40],partial:39,particip:22,pass:[0,15,17,20,32,33],passeng:[22,34],past:15,path:[6,7,39,40],pattern:[4,5,15,17,18],pay_lat:15,payment:15,pd:[11,13,15,17,40],peopl:[0,15,22,23,27,34],peopleent:[15,27,31],per:[3,4,15,20],percentag:[],person:15,pertain:20,pick:[3,25],pick_previously_filled_time_ent:14,pick_valu:32,pinpoint:32,pip:0,pipelin:[11,13],piplin:11,pizza:15,pkl:11,place:[5,17],placehold:[4,20,34],plain:[],plan:2,planet:39,plugin:[0,1,2,22,23,25,34,40,41],pluginfn:[20,35],pm:[4,14,15,19,33],poetri:[0,7],point:[3,4,7,15],poor:[],popular:39,posit:[0,7,19,32,34],possibl:[32,34,39],post:40,postprocessor:25,pprint:15,pr:0,practic:20,pre:[20,35,40],pred:39,predict:[4,5,6,11,13,15,19,34],prefer:[25,34,39],prefix:39,prepar:6,presenc:[3,6,29],present:[4,6,20],preset:20,pretend:7,prevent:[6,15,18,25,40],previou:[0,4,6,14,32,40],previous:[4,14],previous_ent:14,previous_int:[4,6,19],print:6,pristin:18,privat:15,pro:24,problem:[3,6,10,34],procedur:[34,40],process:[5,40],produc:[0,4,5,6,13,15,16,40],product:[4,25,34],program:39,progress:[22,25,34],project:[1,8,17,22,41],project_cli:7,project_command_pars:7,promin:19,prop:39,proper:13,properti:[4,13,25,34,39,40],property_:25,proport:[],proprietari:0,provid:[6,7,8,11,13,14,15,19,20,23,24,25,26,28,29,30,31,32,33,35,36,38,39],purpos:[5,7,13,25],py:[4,6,39],python3:[4,6],python:[39,40],pythoncod:39,pytz:[15,30],quarter:32,queri:18,r:39,race:40,rais:[4,6,13,19,25,39],rang:[4,14,15,17,24,25,26,28,29,30,31,32,33,39],rank:[0,6],raspberri:17,re:[4,40],reach:15,read:[0,6,13,15,37],read_from_json:39,readabl:40,readi:[],real:34,rebuild:6,receiv:[14,15],recent:[4,6,39],reciev:40,recurs:39,red:17,reduc:[3,4,39],ref:[],refactor:18,refer:[4,5,6,15,16,24,25,39],reference_dt:[15,30],reference_tim:[4,6,15,16,19,27,28,30,39],reference_time_column:[15,16],reference_unix_t:[28,30],reftim:[15,16],regex:[10,18,29],regex_search:17,regexflag:[17,18],region:4,regist:27,rel:[4,15],relat:20,relationship:[20,22],relev:[5,34],remain:[],remov:[3,11,15,20,34,37],remove_low_scoring_ent:3,repeat:15,replac:[6,25,30,40],replace_output:[6,13,14,20],repositori:0,repres:[4,5,19,30,31,32,33,34,40],represent:[8,25],request:40,requir:[0,4,5,6,15,17,18,22,40],reserv:[22,40],reset:40,resid:39,resolut:15,resolv:15,resort:[],respect:[19,22],respons:[0,15,39,40],rest:6,result:[6,40],retain:[0,13,24],retain_int:[9,10],retainoriginalintentplugin:13,reus:2,roberta:13,role:20,root:[0,7],round:22,row:11,rtype:[18,25,39],rubi:17,rule:[20,34],rule_slot_fil:[9,10],rulebasedslotfillerplugin:[6,20,34],run:[0,6,15,16,17,19,20,26,28,30,31,32,33,40],s:[0,3,4,5,6,7,11,12,13,15,16,17,18,19,20,28,34,39,40],safe:[25,39,40],safest:[],sai:[5,6,15,32],said:[28,34],same:[3,11,18,34],saniti:11,saturdai:32,save:[6,11,13,15,39,40],save_fil:39,save_reliability_graph:39,save_to_json:39,scaffold:7,schema:20,score:[3,4,5,6,11,14,15,17,24,25,26,28,29,30,31,32,33,34],score_round_off:13,search:[3,10,15,18],search_regex:18,searchstrategyclass:18,second:[4,15,28,32],section:[0,6,15,22,25],see:[6,14,15],seem:[6,24],seen:17,select:[3,15],select_datetim:15,self:[0,4,5,6,32],sentenc:[19,22,28,31,32],separ:[4,5,6,19,34,40],sequenc:40,serial:[2,12,40],server:0,servic:[15,18],session:15,set:[0,2,3,4,6,11,14,15,17,18,20,22,34,40],set_entity_typ:32,setup:[0,15],seven:32,seventi:30,shall:20,shape:18,share:[3,34],sharp:11,she:28,ship:[6,18,39],shirt:17,should:[0,4,6,11,13,15,25,34,40],show:[0,6,7,17,18],signal:[1,8,22],signatur:[0,20],signific:[0,17,20,22],similar:[],simpl:[0,7,39,40],simul:15,sinc:[4,5,6,14,32,34,39],singl:[4,5,14,19,20,34,40],sit:11,site:[4,6],size:[],skip:[13,25],skip_entity_attr:25,skip_label:13,skit:0,sklearn:[11,13],slot:[0,1,4,5,6,10,14,15,22,34,40],slot_fil:[9,10],slot_track:[4,6,14,19],slot_typ:34,slow:15,slu:[0,4,5,11,17,22,34,40],small_talk:15,smallest:32,smoothli:0,snapshot:6,so:[6,14,18,22],solv:34,some:[4,6,25,39,40],someon:15,soon:5,sort:[5,15],sourc:[3,4,5,6,7,8,11,12,13,14,15,16,17,18,19,20,24,25,26,27,28,29,30,31,32,33,34,37,39,40],space:[18,39],spaci:[10,18],spacy_nlp:[17,18],sparingli:39,speaker:39,special:34,specif:[25,29,39,40],specifi:[7,15],split:6,spuriou:13,stai:17,stall:15,standard:[15,39],start:[4,7,14,15,17,19,26,28,30,32,33],start_dat:34,state:[4,6,13,15,40],state_column:13,state_expecting_numb:6,std:[],store:[32,33],str:[3,4,5,6,7,11,12,13,14,15,16,17,18,19,24,25,26,27,28,29,30,31,32,33,34,37,39,40],strategi:[18,19],strength:8,string:[3,4,13,15,17,18,19,32,33,39],strong:[],structur:[0,3,4,18,19,25,40],style:[17,18],subclass:[7,25],submodul:[1,9,10,22,41],subpackag:41,subsequ:14,subset:[4,5],sugar:[25,39],suitabl:40,sundai:32,support:[0,7,15,19,23,34],supported_ent:14,suppos:[],sure:[13,15],sy:15,syntat:39,syntax:4,system:[4,20],t:[3,4,5,6,13,15,25,32,34,39,40],t_scale:39,tag:[0,7,11],take:[6,7],task:[17,19],teal:17,tell:[15,20,22,28,32,34],temperatur:39,temperature_sc:[1,41],templat:[0,7],tempor:10,temporal_int:15,tend:15,tensor:39,termin:[19,40],test:10,text:[1,9,34,39],tfidf:[11,13],than:[3,15,20],thei:[14,32,34],them:[6,20,40],therefor:32,thi:[0,3,4,5,6,7,11,12,13,14,15,17,18,19,20,22,24,25,26,28,29,30,31,32,33,34,36,37,39,40],third:20,those:[15,34],thread:40,threshold:[3,6,11,12,13,15,17,18],through:[20,40],throughtout:8,ticket:22,ticket_book:34,till:32,time:[0,4,6,10,14,16,18,22,23,24,27,28,30,34],time_interv:[22,23,27],timeent:[14,15,20,27,28,30,32,33],timeinterv:15,timeintervalent:[27,33],timeout:[15,16],timestamp:[4,28,39],timezon:[4,6,15,16,19,26,27,28,30,31,32,33,39,40],to_time_ent:[],to_valu:[15,33],todai:[15,32,33],togeth:32,token:[9,10,18,20,22,29],tommorrow:15,tomorrow:[4,14,15,32],tonight:32,too:0,tool:18,top:[],total:15,traceback:[4,6,39],track:[0,3,4,13,14,15],tracked_slot:14,tracker:[14,40],train:[0,6,7,11,13,15,17,34,40],train_workflow:7,trainabl:[13,40],training_data:[6,11,12,13,15,17,19,40],transact:34,transcript2int:6,transcript2intentplugin:6,transcript:[3,4,6,11,12,13,15,17,18,19,34,39],transcrit:11,transform:[6,7,11,12,13,15,17,19,39],transformermixin:11,trascript:11,travel:22,travers:39,traverse_dict:39,tree:[],trial:[],trigger:5,trigger_int:14,trip:22,triplet:31,ts:39,tupl:[3,11,15,16,18,39,40],turn:[0,4,5,14,15,40],twenti:30,two:[11,15,20,28,30,31],type:[0,1,3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,39,40,41],type_:39,typeerror:[19,39],tz:[15,39],tzinfo:[15,30],umm:39,understand:[0,15,34],union:[4,5,13,28,39],uniqu:[3,32],unit:[0,15,24,28,31,32],unix:[4,39],unix_ts_to_datetim:39,unless:[4,20],unsaf:25,unset:39,up:15,updat:[0,2,7,25,34,39,40],upon:22,url:[15,16],us:[0,4,6,7,8,13,14,15,17,18,19,20,22,24,25,28,29,30,32,34,39],usag:[0,7],use_cuda:13,use_lat:15,use_mast:7,use_st:13,use_transform:[6,11,12,14,15,16,17,18,19],user:[0,7,14,15,32],usual:15,utc:[4,6,15,19,27,39],utf:39,util:[0,1,4,6,7,11,12,13,14,15,16,17,18,19,20,25,30,34,41],utter:[0,1,4,6,11,14,15,17,19,22,26,28,30,31,32,33,34,39,40],utterance2altern:39,valid:[5,11,13,15,27,40],valid_labelencod:13,valid_mlpmodel:13,validate_typ:39,valu:[3,4,6,11,12,13,14,15,17,18,19,20,24,25,26,28,29,30,31,32,33,34,37,39,40],value_kei:33,valueerror:13,variabl:13,variant:31,variou:[15,39],vc:7,vcs_ref:7,vector:11,verif:15,vernacular:[3,7,15,39],version:0,via:[4,15,17,20,26,28,30,31,32,33],virtualenv:0,visa:[15,26],visit:14,vote:[9,10,34],vote_sign:[],voteintentplugin:[],voteplugin:[],w:39,wa:[4,6,15,28,32,34,39],wai:[4,15,22],wake_up_alarm:34,walkthrough:23,wall:15,wallet:34,want:[4,11,14,15,17,28,34,39],wasn:6,we:[0,3,4,5,6,7,11,13,14,15,17,18,19,20,22,23,24,28,30,32,34,39,40],weak:[],week:32,weekdai:32,weekend:33,weight:[],well:[5,15,32],went:32,wercalibrationplugin:0,were:[4,15,20,25,34],what:[1,14,15,34],when:[14,15,34,39],where:[0,3,6,7,15,28,29,31,32,34],which:[3,5,15,17,18,19,24,25,28,30,31,32,33,34,39,40],whole:31,wiki:4,wikipedia:4,win:[],wish:28,within:[3,4,5,6,15,17,18,22,25,34,37,39,40],without:40,word:6,word_frequ:6,work:[0,4,5,19,22,39],workflow:[0,1,6,11,12,13,15,16,17,18,19,20,23,41],workflow_cli:7,world:[4,7],worst:[],would:[4,5,13,14,15,19,22,34,40],wrap:39,wrapper:17,write:[0,2,4,39],writer:39,wrote:6,x:39,xgb:[9,10],xgboostregressor:11,xlm:13,xlmr:[9,10],xlmrmulticlass:[0,5,13,34],y:11,year:32,yeild:34,yellow:[6,39],yesterdai:[15,32],yet:24,yield:[],you:[0,4,6,14,15,22,39],your:[0,6]},titles:["Dialogy","dialogy package","dialogy.base package","dialogy.base.entity_extractor package","dialogy.base.input package","dialogy.base.output package","dialogy.base.plugin package","dialogy.cli package","dialogy.constants package","dialogy.plugins package","dialogy.plugins.text package","dialogy.plugins.text.calibration package","dialogy.plugins.text.canonicalization package","dialogy.plugins.text.classification package","dialogy.plugins.text.combine_date_time package","dialogy.plugins.text.duckling_plugin package","dialogy.plugins.text.lb_plugin package","dialogy.plugins.text.list_entity_plugin package","dialogy.plugins.text.list_search_plugin package","dialogy.plugins.text.merge_asr_output package","dialogy.plugins.text.slot_filler package","dialogy.plugins.text.voting package","dialogy.types package","dialogy.types.entity package","dialogy.types.entity.amount_of_money package","dialogy.types.entity.base_entity package","dialogy.types.entity.credit_card_number package","dialogy.types.entity.deserialize package","dialogy.types.entity.duration package","dialogy.types.entity.keyword package","dialogy.types.entity.numerical package","dialogy.types.entity.people package","dialogy.types.entity.time package","dialogy.types.entity.time_interval package","dialogy.types.intent package","dialogy.types.plugin package","dialogy.types.signal package","dialogy.types.slots package","dialogy.types.utterances package","dialogy.utils package","dialogy.workflow package","dialogy"],titleterms:{"abstract":6,"do":[4,5,40],all:[4,5,15],amount_of_monei:24,an:4,base:[2,3,4,5,6],base_ent:25,calibr:11,canonic:12,card:26,cast:[15,30],classif:[13,34],cli:7,combine_date_tim:14,constant:8,content:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],contributor:0,creation:0,credit:26,credit_card_numb:26,date:15,datetim:39,deseri:27,dialogi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],doe:40,duckling_plugin:15,durat:28,entiti:[23,24,25,26,27,28,29,30,31,32,33],entity_extractor:3,exampl:15,exist:4,file_handl:39,fill:20,filter:15,frozen:4,get:0,guard:[6,15],heurist:6,how:40,i:[4,5],index:0,input:[4,5],instal:0,instanc:4,integr:[26,28,30,31,32,33],intent:[6,15,34],intent_vot:[],interv:33,issu:4,keyword:[6,29],lb_plugin:16,list_entity_plugin:17,list_search_plugin:18,logger:39,merge_asr_output:19,misc:39,mlp:13,modul:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],mother:15,naive_lang_detect:39,ner:17,normalize_utter:39,number:26,numer:30,output:[4,5],packag:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],peopl:31,plan:6,plugin:[4,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21,26,28,30,31,32,33,35],problem:15,project:[0,7],regex:17,retain_int:13,reus:4,rule_slot_fil:20,search:17,see:[4,5],serial:[4,5],set:5,signal:36,slot:[20,37],slot_fil:20,spaci:17,start:0,submodul:[7,11,13,20,36,39,40],subpackag:[1,2,9,10,22,23],temperature_sc:39,tempor:15,test:[0,15],text:[10,11,12,13,14,15,16,17,18,19,20,21],time:[15,32,33],time_interv:33,token:13,topic:0,type:[22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],updat:[4,6],util:39,utter:38,vote:21,walkthrough:[26,28,30,31,32,33],what:40,why:[4,5],workflow:[7,26,28,30,31,32,33,40],write:6,xgb:11,xlmr:13}})
\ No newline at end of file
diff --git a/docs/source/dialogy.base.entity_extractor.html b/docs/source/dialogy.base.entity_extractor.html
index 7163c556..6e0a3f77 100644
--- a/docs/source/dialogy.base.entity_extractor.html
+++ b/docs/source/dialogy.base.entity_extractor.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.plugins.text.lb_plugin package" href="dialogy.plugins.text.lb_plugin.html" /><link rel="prev" title="dialogy.plugins.text.list_search_plugin package" href="dialogy.plugins.text.list_search_plugin.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.base.entity_extractor package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.base.entity_extractor package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.base.html b/docs/source/dialogy.base.html
index f3b2588f..e180a4d0 100644
--- a/docs/source/dialogy.base.html
+++ b/docs/source/dialogy.base.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.base package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.base package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.base.input.html b/docs/source/dialogy.base.input.html
index b6fdb283..4f6b2c83 100644
--- a/docs/source/dialogy.base.input.html
+++ b/docs/source/dialogy.base.input.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.base.output package" href="dialogy.base.output.html" /><link rel="prev" title="Dialogy" href="../index.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.base.input package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.base.input package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.base.output.html b/docs/source/dialogy.base.output.html
index da97bbfe..6b521e6e 100644
--- a/docs/source/dialogy.base.output.html
+++ b/docs/source/dialogy.base.output.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.workflow package" href="dialogy.workflow.html" /><link rel="prev" title="dialogy.base.input package" href="dialogy.base.input.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.base.output package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.base.output package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.base.plugin.html b/docs/source/dialogy.base.plugin.html
index 1e4fc298..da2550dc 100644
--- a/docs/source/dialogy.base.plugin.html
+++ b/docs/source/dialogy.base.plugin.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.intent package" href="dialogy.types.intent.html" /><link rel="prev" title="dialogy.workflow package" href="dialogy.workflow.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.base.plugin package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.base.plugin package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.cli.html b/docs/source/dialogy.cli.html
index afea67a5..3559a286 100644
--- a/docs/source/dialogy.cli.html
+++ b/docs/source/dialogy.cli.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.cli package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.cli package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.constants.html b/docs/source/dialogy.constants.html
index 687c8923..b930920d 100644
--- a/docs/source/dialogy.constants.html
+++ b/docs/source/dialogy.constants.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.constants package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.constants package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.html b/docs/source/dialogy.html
index d16d400f..56e50ab7 100644
--- a/docs/source/dialogy.html
+++ b/docs/source/dialogy.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy package - dialogy 0.9.5 documentation</title>
+        <title>dialogy package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.html b/docs/source/dialogy.plugins.html
index b9a9e67f..0e8f5e93 100644
--- a/docs/source/dialogy.plugins.html
+++ b/docs/source/dialogy.plugins.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.calibration.html b/docs/source/dialogy.plugins.text.calibration.html
index 221c1fac..e3ab6d97 100644
--- a/docs/source/dialogy.plugins.text.calibration.html
+++ b/docs/source/dialogy.plugins.text.calibration.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.calibration package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.calibration package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.canonicalization.html b/docs/source/dialogy.plugins.text.canonicalization.html
index bf8f410f..8ded3699 100644
--- a/docs/source/dialogy.plugins.text.canonicalization.html
+++ b/docs/source/dialogy.plugins.text.canonicalization.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.canonicalization package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.canonicalization package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.classification.html b/docs/source/dialogy.plugins.text.classification.html
index d6916e5c..ec17ae96 100644
--- a/docs/source/dialogy.plugins.text.classification.html
+++ b/docs/source/dialogy.plugins.text.classification.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.plugins.text.duckling_plugin package" href="dialogy.plugins.text.duckling_plugin.html" /><link rel="prev" title="dialogy.plugins.text.merge_asr_output package" href="dialogy.plugins.text.merge_asr_output.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.classification package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.classification package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -249,7 +249,7 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this
 </dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.plugins.text.classification.mlp.MLPMultiClass.get_gridsearch_grid">
-<span class="sig-name descname"><span class="pre">get_gridsearch_grid</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/classification/mlp.html#MLPMultiClass.get_gridsearch_grid"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.classification.mlp.MLPMultiClass.get_gridsearch_grid" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">get_gridsearch_grid</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pipeline</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/classification/mlp.html#MLPMultiClass.get_gridsearch_grid"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.classification.mlp.MLPMultiClass.get_gridsearch_grid" title="Permalink to this definition">¶</a></dt>
 <dd><p>Gets gridsearch hyperparameters for the model in proper grid params format.</p>
 <dl class="simple">
 <dt>Raises:</dt><dd><p>ValueError: If a gridsearch parameter doesn’t exist in sklearns TFIDF and MLPClassifier modules.</p>
@@ -282,7 +282,7 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this
 </dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.plugins.text.classification.mlp.MLPMultiClass.init_model">
-<span class="sig-name descname"><span class="pre">init_model</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/classification/mlp.html#MLPMultiClass.init_model"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.classification.mlp.MLPMultiClass.init_model" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">init_model</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">param_search=&lt;class</span> <span class="pre">'sklearn.model_selection._search.GridSearchCV'&gt;</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/classification/mlp.html#MLPMultiClass.init_model"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.classification.mlp.MLPMultiClass.init_model" title="Permalink to this definition">¶</a></dt>
 <dd><p>Initialize the model if artifacts are available.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
@@ -315,7 +315,7 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this
 </dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.plugins.text.classification.mlp.MLPMultiClass.train">
-<span class="sig-name descname"><span class="pre">train</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training_data</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/classification/mlp.html#MLPMultiClass.train"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.classification.mlp.MLPMultiClass.train" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">train</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_search=&lt;class</span> <span class="pre">'sklearn.model_selection._search.GridSearchCV'&gt;</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/classification/mlp.html#MLPMultiClass.train"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.classification.mlp.MLPMultiClass.train" title="Permalink to this definition">¶</a></dt>
 <dd><p>Train an intent-classifier on the provided training data.</p>
 <p>The training is skipped if the data-format is not valid.
 :type training_data: <code class="xref py py-class docutils literal notranslate"><span class="pre">DataFrame</span></code>
@@ -435,12 +435,15 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this
 <p>The use_state flag in the XLMRMultiClass plugin is used to enable the use of state variable as the part of the text input.</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.plugins.text.classification.xlmr.XLMRMultiClass.inference">
-<span class="sig-name descname"><span class="pre">inference</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">texts</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/classification/xlmr.html#XLMRMultiClass.inference"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.classification.xlmr.XLMRMultiClass.inference" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">inference</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">texts</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/classification/xlmr.html#XLMRMultiClass.inference"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.classification.xlmr.XLMRMultiClass.inference" title="Permalink to this definition">¶</a></dt>
 <dd><p>Predict the intent of a list of texts.
 If the model has been trained using the state features, it expects the text to also be appended with the state token else the predictions would be spurious.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>texts</strong> (<em>List</em><em>[</em><em>str</em><em>]</em>) – A list of strings, derived from ASR transcripts.</p>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>texts</strong> (<em>List</em><em>[</em><em>str</em><em>]</em>) – A list of strings, derived from ASR transcripts.</p></li>
+<li><p><strong>state</strong> (<em>List</em><em>[</em><em>str</em><em>]</em>) – A list of states, mapped to the ASR transcripts.</p></li>
+</ul>
 </dd>
 <dt class="field-even">Raises</dt>
 <dd class="field-even"><p><strong>AttributeError</strong> – In case the labelencoder is not available.</p>
diff --git a/docs/source/dialogy.plugins.text.combine_date_time.html b/docs/source/dialogy.plugins.text.combine_date_time.html
index 495d8a31..2f38beee 100644
--- a/docs/source/dialogy.plugins.text.combine_date_time.html
+++ b/docs/source/dialogy.plugins.text.combine_date_time.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.utils package" href="dialogy.utils.html" /><link rel="prev" title="dialogy.plugins.text.lb_plugin package" href="dialogy.plugins.text.lb_plugin.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.combine_date_time package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.combine_date_time package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.duckling_plugin.html b/docs/source/dialogy.plugins.text.duckling_plugin.html
index 180065fe..00ac0d48 100644
--- a/docs/source/dialogy.plugins.text.duckling_plugin.html
+++ b/docs/source/dialogy.plugins.text.duckling_plugin.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.plugins.text.slot_filler package" href="dialogy.plugins.text.slot_filler.html" /><link rel="prev" title="dialogy.plugins.text.classification package" href="dialogy.plugins.text.classification.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.duckling_plugin package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.duckling_plugin package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -269,8 +269,8 @@ <h3>Mother of all examples<a class="headerlink" href="#mother-of-all-examples" t
 <span class="gp">In [5]: </span><span class="o">%%time</span>
 <span class="gp">   ...: </span><span class="n">input_</span><span class="p">,</span> <span class="n">output</span> <span class="o">=</span> <span class="n">workflow</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">Input</span><span class="p">(</span><span class="n">utterances</span><span class="o">=</span><span class="n">utterances</span><span class="p">))</span>
 <span class="gp">   ...: </span>
-<span class="go">CPU times: user 18.9 ms, sys: 10.9 ms, total: 29.8 ms</span>
-<span class="go">Wall time: 25.3 ms</span>
+<span class="go">CPU times: user 37.2 ms, sys: 1.28 ms, total: 38.4 ms</span>
+<span class="go">Wall time: 130 ms</span>
 
 <span class="gp">In [6]: </span><span class="n">output</span>
 <span class="gh">Out[6]: </span><span class="go"></span>
@@ -283,17 +283,17 @@ <h3>Mother of all examples<a class="headerlink" href="#mother-of-all-examples" t
 <span class="go">   'entity_type': 'datetime',</span>
 <span class="go">   'grain': 'hour',</span>
 <span class="go">   'type': 'interval',</span>
-<span class="go">   'from_value': '2022-02-22T19:00:00.000+00:00',</span>
-<span class="go">   'to_value': '2022-02-23T22:00:00.000+00:00',</span>
-<span class="go">   'value': {'from': '2022-02-22T19:00:00.000+00:00',</span>
-<span class="go">    'to': '2022-02-23T22:00:00.000+00:00'}},</span>
+<span class="go">   'from_value': '2022-03-14T19:00:00.000+00:00',</span>
+<span class="go">   'to_value': '2022-03-15T22:00:00.000+00:00',</span>
+<span class="go">   'value': {'from': '2022-03-14T19:00:00.000+00:00',</span>
+<span class="go">    'to': '2022-03-15T22:00:00.000+00:00'}},</span>
 <span class="go">  {'range': {'start': 14, 'end': 21},</span>
 <span class="go">   'body': 'at 6 am',</span>
 <span class="go">   'type': 'value',</span>
 <span class="go">   'parsers': ['DucklingPlugin'],</span>
 <span class="go">   'score': 0.08333333333333333,</span>
 <span class="go">   'alternative_index': 1,</span>
-<span class="go">   'value': '2022-02-23T06:00:00.000+00:00',</span>
+<span class="go">   'value': '2022-03-15T06:00:00.000+00:00',</span>
 <span class="go">   'entity_type': 'time',</span>
 <span class="go">   'grain': 'hour'},</span>
 <span class="go">  {'range': {'start': 7, 'end': 15},</span>
@@ -338,7 +338,7 @@ <h3>Mother of all examples<a class="headerlink" href="#mother-of-all-examples" t
 <span class="go">   'parsers': ['DucklingPlugin'],</span>
 <span class="go">   'score': 0.08333333333333333,</span>
 <span class="go">   'alternative_index': 4,</span>
-<span class="go">   'value': '2022-02-22T17:07:44.839+00:00',</span>
+<span class="go">   'value': '2022-03-14T17:30:10.862+00:00',</span>
 <span class="go">   'entity_type': 'datetime',</span>
 <span class="go">   'grain': 'second'},</span>
 <span class="go">  {'range': {'start': 11, 'end': 19},</span>
@@ -347,7 +347,7 @@ <h3>Mother of all examples<a class="headerlink" href="#mother-of-all-examples" t
 <span class="go">   'parsers': ['DucklingPlugin'],</span>
 <span class="go">   'score': 0.08333333333333333,</span>
 <span class="go">   'alternative_index': 5,</span>
-<span class="go">   'value': '2022-02-23T00:00:00.000+00:00',</span>
+<span class="go">   'value': '2022-03-15T00:00:00.000+00:00',</span>
 <span class="go">   'entity_type': 'date',</span>
 <span class="go">   'grain': 'day'},</span>
 <span class="go">  {'range': {'start': 4, 'end': 16},</span>
@@ -356,7 +356,7 @@ <h3>Mother of all examples<a class="headerlink" href="#mother-of-all-examples" t
 <span class="go">   'parsers': ['DucklingPlugin'],</span>
 <span class="go">   'score': 0.08333333333333333,</span>
 <span class="go">   'alternative_index': 6,</span>
-<span class="go">   'value': '2022-02-28T00:00:00.000+00:00',</span>
+<span class="go">   'value': '2022-03-14T00:00:00.000+00:00',</span>
 <span class="go">   'entity_type': 'date',</span>
 <span class="go">   'grain': 'day'},</span>
 <span class="go">  {'range': {'start': 8, 'end': 20},</span>
@@ -534,8 +534,8 @@ <h3>Guards<a class="headerlink" href="#guards" title="Permalink to this headline
 <span class="gp">In [11]: </span><span class="o">%%time</span>
 <span class="gp">   ....: </span><span class="n">input_</span><span class="p">,</span> <span class="n">output</span> <span class="o">=</span> <span class="n">workflow</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">Input</span><span class="p">(</span><span class="n">utterances</span><span class="o">=</span><span class="n">utterances</span><span class="p">,</span> <span class="n">current_state</span><span class="o">=</span><span class="s2">"SMALL_TALK"</span><span class="p">))</span>
 <span class="gp">   ....: </span>
-<span class="go">CPU times: user 116 us, sys: 25 us, total: 141 us</span>
-<span class="go">Wall time: 143 us</span>
+<span class="go">CPU times: user 176 us, sys: 0 ns, total: 176 us</span>
+<span class="go">Wall time: 180 us</span>
 
 <span class="gp">In [12]: </span><span class="n">output</span>
 <span class="gh">Out[12]: </span><span class="go">{'intents': [], 'entities': [], 'original_intent': {}}</span>
@@ -695,7 +695,7 @@ <h4>Filtering<a class="headerlink" href="#filtering" title="Permalink to this he
 <span class="gp">In [30]: </span><span class="n">utterances</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"कल ही कर दी थी"</span><span class="p">]</span>
 <span class="gp">   ....: </span><span class="n">workflow</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"output.intents"</span><span class="p">,</span> <span class="p">[</span><span class="n">Intent</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s2">"already_paid"</span><span class="p">,</span> <span class="n">score</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)])</span>
 <span class="gp">   ....: </span>
-<span class="gh">Out[30]: </span><span class="go">Workflow(plugins=[&lt;dialogy.plugins.text.duckling_plugin.DucklingPlugin object at 0x7f395fdc9130&gt;], input=None, output=Output(intents=[Intent(name='already_paid', score=1.0, alternative_index=None)], entities=[], original_intent={}), debug=False)</span>
+<span class="gh">Out[30]: </span><span class="go">Workflow(plugins=[&lt;dialogy.plugins.text.duckling_plugin.DucklingPlugin object at 0x7fec70909340&gt;], input=None, output=Output(intents=[Intent(name='already_paid', score=1.0, alternative_index=None)], entities=[], original_intent={}), debug=False)</span>
 
 <span class="gp">In [31]: </span><span class="n">reference_dt</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="mi">2022</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">tzinfo</span><span class="o">=</span><span class="n">pytz</span><span class="o">.</span><span class="n">timezone</span><span class="p">(</span><span class="s2">"Asia/Kolkata"</span><span class="p">))</span>
 <span class="gp">   ....: </span><span class="n">reference_time</span> <span class="o">=</span> <span class="n">dt2timestamp</span><span class="p">(</span><span class="n">reference_dt</span><span class="p">)</span>
@@ -937,7 +937,7 @@ <h4>Casting<a class="headerlink" href="#casting" title="Permalink to this headli
 </div>
 <dl class="py class">
 <dt class="sig sig-object py" id="dialogy.plugins.text.duckling_plugin.DucklingPlugin">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">DucklingPlugin</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dimensions</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timezone</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'UTC'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'http://0.0.0.0:8000/parse'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">locale</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'en_IN'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">temporal_intents</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dest</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">guards</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">datetime_filters</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">threshold</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">activate_latent_entities</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reference_time_column</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'reftime'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_column</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'alternatives'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_column</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">use_transform</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">debug</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/duckling_plugin.html#DucklingPlugin"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.duckling_plugin.DucklingPlugin" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">DucklingPlugin</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dimensions</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timezone</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'UTC'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">url</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'http://0.0.0.0:8000/parse'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">locale</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'en_IN'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">constraints</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">temporal_intents</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dest</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">guards</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">datetime_filters</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">threshold</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">activate_latent_entities</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reference_time_column</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'reftime'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">input_column</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'alternatives'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_column</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">use_transform</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">debug</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/duckling_plugin.html#DucklingPlugin"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.duckling_plugin.DucklingPlugin" title="Permalink to this definition">¶</a></dt>
 <dd><p>Bases: <a class="reference internal" href="dialogy.base.entity_extractor.html#dialogy.base.entity_extractor.EntityScoringMixin" title="dialogy.base.entity_extractor.EntityScoringMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">dialogy.base.entity_extractor.EntityScoringMixin</span></code></a>, <a class="reference internal" href="dialogy.base.plugin.html#dialogy.base.plugin.Plugin" title="dialogy.base.plugin.Plugin"><code class="xref py py-class docutils literal notranslate"><span class="pre">dialogy.base.plugin.Plugin</span></code></a></p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
diff --git a/docs/source/dialogy.plugins.text.html b/docs/source/dialogy.plugins.text.html
index d9fe152e..d206a8af 100644
--- a/docs/source/dialogy.plugins.text.html
+++ b/docs/source/dialogy.plugins.text.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.lb_plugin.html b/docs/source/dialogy.plugins.text.lb_plugin.html
index 4408c19a..03569d04 100644
--- a/docs/source/dialogy.plugins.text.lb_plugin.html
+++ b/docs/source/dialogy.plugins.text.lb_plugin.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.plugins.text.combine_date_time package" href="dialogy.plugins.text.combine_date_time.html" /><link rel="prev" title="dialogy.base.entity_extractor package" href="dialogy.base.entity_extractor.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.lb_plugin package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.lb_plugin package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.list_entity_plugin.html b/docs/source/dialogy.plugins.text.list_entity_plugin.html
index 0cb71d82..27a23bb3 100644
--- a/docs/source/dialogy.plugins.text.list_entity_plugin.html
+++ b/docs/source/dialogy.plugins.text.list_entity_plugin.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.plugins.text.list_search_plugin package" href="dialogy.plugins.text.list_search_plugin.html" /><link rel="prev" title="dialogy.plugins.text.slot_filler package" href="dialogy.plugins.text.slot_filler.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.list_entity_plugin package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.list_entity_plugin package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.list_search_plugin.html b/docs/source/dialogy.plugins.text.list_search_plugin.html
index d3610b5c..dcac9f7f 100644
--- a/docs/source/dialogy.plugins.text.list_search_plugin.html
+++ b/docs/source/dialogy.plugins.text.list_search_plugin.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.base.entity_extractor package" href="dialogy.base.entity_extractor.html" /><link rel="prev" title="dialogy.plugins.text.list_entity_plugin package" href="dialogy.plugins.text.list_entity_plugin.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.list_search_plugin package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.list_search_plugin package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -250,7 +250,7 @@ <h1>dialogy.plugins.text.list_search_plugin package<a class="headerlink" href="#
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.plugins.text.list_search_plugin.ListSearchPlugin.dp_search">
-<span class="sig-name descname"><span class="pre">dp_search</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">query</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nlp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity_patterns</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">['']</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_dict</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/list_search_plugin.html#ListSearchPlugin.dp_search"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.dp_search" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">dp_search</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">query</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nlp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity_patterns</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_dict</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/list_search_plugin.html#ListSearchPlugin.dp_search"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.dp_search" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Tuple</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-data docutils literal notranslate"><span class="pre">Tuple</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>], <code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code>]</p>
@@ -293,8 +293,17 @@ <h1>dialogy.plugins.text.list_search_plugin package<a class="headerlink" href="#
 :rtype: List[MatchType]</p>
 </dd></dl>
 <dl class="py method">
+<dt class="sig sig-object py" id="dialogy.plugins.text.list_search_plugin.ListSearchPlugin.get_words_from_nlp">
+<span class="sig-name descname"><span class="pre">get_words_from_nlp</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">nlp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">query</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/list_search_plugin.html#ListSearchPlugin.get_words_from_nlp"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.get_words_from_nlp" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">List</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">Dict</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-data docutils literal notranslate"><span class="pre">Any</span></code>]]</p>
+</dd>
+</dl>
+</dd></dl>
+<dl class="py method">
 <dt class="sig sig-object py" id="dialogy.plugins.text.list_search_plugin.ListSearchPlugin.search_regex">
-<span class="sig-name descname"><span class="pre">search_regex</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">query</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity_patterns</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">['']</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_dict</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/list_search_plugin.html#ListSearchPlugin.search_regex"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.search_regex" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">search_regex</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">query</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">entity_patterns</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">match_dict</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/plugins/text/list_search_plugin.html#ListSearchPlugin.search_regex"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.plugins.text.list_search_plugin.ListSearchPlugin.search_regex" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Tuple</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-data docutils literal notranslate"><span class="pre">Tuple</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>], <code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code>]</p>
diff --git a/docs/source/dialogy.plugins.text.merge_asr_output.html b/docs/source/dialogy.plugins.text.merge_asr_output.html
index c200a63c..99cdd967 100644
--- a/docs/source/dialogy.plugins.text.merge_asr_output.html
+++ b/docs/source/dialogy.plugins.text.merge_asr_output.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.plugins.text.classification package" href="dialogy.plugins.text.classification.html" /><link rel="prev" title="dialogy.types.entity.duration package" href="dialogy.types.entity.duration.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.merge_asr_output package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.merge_asr_output package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.slot_filler.html b/docs/source/dialogy.plugins.text.slot_filler.html
index 5a76ffbc..f95b8620 100644
--- a/docs/source/dialogy.plugins.text.slot_filler.html
+++ b/docs/source/dialogy.plugins.text.slot_filler.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.plugins.text.list_entity_plugin package" href="dialogy.plugins.text.list_entity_plugin.html" /><link rel="prev" title="dialogy.plugins.text.duckling_plugin package" href="dialogy.plugins.text.duckling_plugin.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.slot_filler package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.slot_filler package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.plugins.text.voting.html b/docs/source/dialogy.plugins.text.voting.html
index 7360cbd0..9ac160d2 100644
--- a/docs/source/dialogy.plugins.text.voting.html
+++ b/docs/source/dialogy.plugins.text.voting.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.plugins.text.voting package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.plugins.text.voting package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.types.entity.amount_of_money.html b/docs/source/dialogy.types.entity.amount_of_money.html
index 1182db9f..ac04238b 100644
--- a/docs/source/dialogy.types.entity.amount_of_money.html
+++ b/docs/source/dialogy.types.entity.amount_of_money.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.credit_card_number package" href="dialogy.types.entity.credit_card_number.html" /><link rel="prev" title="dialogy.types.entity.keyword package" href="dialogy.types.entity.keyword.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.amount_of_money package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.amount_of_money package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -252,7 +252,7 @@ <h1>dialogy.types.entity.amount_of_money package<a class="headerlink" href="#dia
 <dd></dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.amount_of_money.CurrencyEntity.from_duckling">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/amount_of_money.html#CurrencyEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.amount_of_money.CurrencyEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/amount_of_money.html#CurrencyEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.amount_of_money.CurrencyEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><a class="reference internal" href="#dialogy.types.entity.amount_of_money.CurrencyEntity" title="dialogy.types.entity.amount_of_money.CurrencyEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">CurrencyEntity</span></code></a></p>
diff --git a/docs/source/dialogy.types.entity.base_entity.html b/docs/source/dialogy.types.entity.base_entity.html
index bbd135c2..58d48981 100644
--- a/docs/source/dialogy.types.entity.base_entity.html
+++ b/docs/source/dialogy.types.entity.base_entity.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.slots package" href="dialogy.types.slots.html" /><link rel="prev" title="dialogy.types.intent package" href="dialogy.types.intent.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.base_entity package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.base_entity package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -354,6 +354,15 @@ <h1>dialogy.types.entity.base_entity package<a class="headerlink" href="#dialogy
 </dl>
 </dd></dl>
 <dl class="py method">
+<dt class="sig sig-object py" id="dialogy.types.entity.base_entity.BaseEntity.from_duckling">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/base_entity.html#BaseEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.base_entity.BaseEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><a class="reference internal" href="#dialogy.types.entity.base_entity.BaseEntity" title="dialogy.types.entity.base_entity.BaseEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseEntity</span></code></a></p>
+</dd>
+</dl>
+</dd></dl>
+<dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.base_entity.BaseEntity.get_value">
 <span class="sig-name descname"><span class="pre">get_value</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/base_entity.html#BaseEntity.get_value"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.base_entity.BaseEntity.get_value" title="Permalink to this definition">¶</a></dt>
 <dd><p>Get value of an entity.</p>
diff --git a/docs/source/dialogy.types.entity.credit_card_number.html b/docs/source/dialogy.types.entity.credit_card_number.html
index 000d30e1..8b5e7e76 100644
--- a/docs/source/dialogy.types.entity.credit_card_number.html
+++ b/docs/source/dialogy.types.entity.credit_card_number.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.numerical package" href="dialogy.types.entity.numerical.html" /><link rel="prev" title="dialogy.types.entity.amount_of_money package" href="dialogy.types.entity.amount_of_money.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.credit_card_number package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.credit_card_number package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -286,7 +286,7 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <dd></dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.credit_card_number.CreditCardNumberEntity.from_duckling">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/credit_card_number.html#CreditCardNumberEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.credit_card_number.CreditCardNumberEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/credit_card_number.html#CreditCardNumberEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.credit_card_number.CreditCardNumberEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><a class="reference internal" href="#dialogy.types.entity.credit_card_number.CreditCardNumberEntity" title="dialogy.types.entity.credit_card_number.CreditCardNumberEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">CreditCardNumberEntity</span></code></a></p>
diff --git a/docs/source/dialogy.types.entity.deserialize.html b/docs/source/dialogy.types.entity.deserialize.html
index 69e36814..895773e6 100644
--- a/docs/source/dialogy.types.entity.deserialize.html
+++ b/docs/source/dialogy.types.entity.deserialize.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.deserialize package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.deserialize package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -222,15 +222,69 @@
 <h1>dialogy.types.entity.deserialize package<a class="headerlink" href="#dialogy-types-entity-deserialize-package" title="Permalink to this headline">¶</a></h1>
 <section id="module-dialogy.types.entity.deserialize">
 <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-dialogy.types.entity.deserialize" title="Permalink to this headline">¶</a></h2>
-<dl class="py function">
-<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.deserialize_duckling_entity">
-<span class="sig-name descname"><span class="pre">deserialize_duckling_entity</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">duckling_entity_dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reference_time</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timezone</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'UTC'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">duration_cast_operator</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/deserialize.html#deserialize_duckling_entity"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.deserialize.deserialize_duckling_entity" title="Permalink to this definition">¶</a></dt>
+<dl class="py class">
+<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.EntityDeserializer">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">EntityDeserializer</span></span><a class="reference internal" href="../_modules/dialogy/types/entity/deserialize.html#EntityDeserializer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.deserialize.EntityDeserializer" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.EntityDeserializer.deserialize_duckling">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">deserialize_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">duckling_entity_dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reference_time</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timezone</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'UTC'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">duration_cast_operator</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">constraints</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/deserialize.html#EntityDeserializer.deserialize_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.deserialize.EntityDeserializer.deserialize_duckling" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><a class="reference internal" href="dialogy.types.entity.base_entity.html#dialogy.types.entity.base_entity.BaseEntity" title="dialogy.types.entity.base_entity.BaseEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseEntity</span></code></a></p>
 </dd>
 </dl>
 </dd></dl>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.EntityDeserializer.entitiy_classes">
+<span class="sig-name descname"><span class="pre">entitiy_classes</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="dialogy.types.entity.base_entity.html#dialogy.types.entity.base_entity.BaseEntity" title="dialogy.types.entity.base_entity.BaseEntity"><span class="pre">dialogy.types.entity.base_entity.BaseEntity</span></a><span class="p"><span class="pre">]</span></span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'amount-of-money':</span> <span class="pre">&lt;class</span> <span class="pre">'dialogy.types.entity.amount_of_money.CurrencyEntity'&gt;,</span> <span class="pre">'credit-card-number':</span> <span class="pre">&lt;class</span> <span class="pre">'dialogy.types.entity.credit_card_number.CreditCardNumberEntity'&gt;,</span> <span class="pre">'duration':</span> <span class="pre">&lt;class</span> <span class="pre">'dialogy.types.entity.duration.DurationEntity'&gt;,</span> <span class="pre">'number':</span> <span class="pre">&lt;class</span> <span class="pre">'dialogy.types.entity.numerical.NumericalEntity'&gt;,</span> <span class="pre">'people':</span> <span class="pre">&lt;class</span> <span class="pre">'dialogy.types.entity.people.PeopleEntity'&gt;,</span> <span class="pre">'time':</span> <span class="pre">&lt;class</span> <span class="pre">'dialogy.types.entity.time.TimeEntity'&gt;,</span> <span class="pre">'time_interval':</span> <span class="pre">&lt;class</span> <span class="pre">'dialogy.types.entity.time_interval.TimeIntervalEntity'&gt;}</span></em><a class="headerlink" href="#dialogy.types.entity.deserialize.EntityDeserializer.entitiy_classes" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.EntityDeserializer.get_dimension">
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_dimension</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">duckling_entity_dict</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/deserialize.html#EntityDeserializer.get_dimension"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.deserialize.EntityDeserializer.get_dimension" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.EntityDeserializer.get_entity_class_str">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_entity_class_str</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">duckling_entity_dict</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/deserialize.html#EntityDeserializer.get_entity_class_str"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.deserialize.EntityDeserializer.get_entity_class_str" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.EntityDeserializer.get_keys_in_value_as_str">
+<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_keys_in_value_as_str</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">duckling_entity_dict</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/deserialize.html#EntityDeserializer.get_keys_in_value_as_str"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.deserialize.EntityDeserializer.get_keys_in_value_as_str" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.EntityDeserializer.register">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">register</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dim</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/deserialize.html#EntityDeserializer.register"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.deserialize.EntityDeserializer.register" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Callable</span></code>[[<code class="xref py py-data docutils literal notranslate"><span class="pre">Any</span></code>], <code class="xref py py-data docutils literal notranslate"><span class="pre">Any</span></code>]</p>
+</dd>
+</dl>
+</dd></dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="dialogy.types.entity.deserialize.EntityDeserializer.validate">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">duckling_entity_dict</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/deserialize.html#EntityDeserializer.validate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.deserialize.EntityDeserializer.validate" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">None</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+</dd></dl>
 </section>
 </section>
 
diff --git a/docs/source/dialogy.types.entity.duration.html b/docs/source/dialogy.types.entity.duration.html
index e62d0d67..43290cd4 100644
--- a/docs/source/dialogy.types.entity.duration.html
+++ b/docs/source/dialogy.types.entity.duration.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.plugins.text.merge_asr_output package" href="dialogy.plugins.text.merge_asr_output.html" /><link rel="prev" title="dialogy.types.entity.time_interval package" href="dialogy.types.entity.time_interval.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.duration package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.duration package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -304,10 +304,10 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <dd></dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.duration.DurationEntity.from_duckling">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/duration.html#DurationEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.duration.DurationEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reference_time</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timezone</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">duration_cast_operator</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/duration.html#DurationEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.duration.DurationEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><a class="reference internal" href="#dialogy.types.entity.duration.DurationEntity" title="dialogy.types.entity.duration.DurationEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">DurationEntity</span></code></a></p>
+<dd class="field-odd"><p><code class="xref py py-data docutils literal notranslate"><span class="pre">Union</span></code>[<a class="reference internal" href="#dialogy.types.entity.duration.DurationEntity" title="dialogy.types.entity.duration.DurationEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">DurationEntity</span></code></a>, <a class="reference internal" href="dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity" title="dialogy.types.entity.time.TimeEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">TimeEntity</span></code></a>]</p>
 </dd>
 </dl>
 </dd></dl>
diff --git a/docs/source/dialogy.types.entity.html b/docs/source/dialogy.types.entity.html
index bceb8849..0c8c8d07 100644
--- a/docs/source/dialogy.types.entity.html
+++ b/docs/source/dialogy.types.entity.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.types.entity.keyword.html b/docs/source/dialogy.types.entity.keyword.html
index d68a42af..a66ff330 100644
--- a/docs/source/dialogy.types.entity.keyword.html
+++ b/docs/source/dialogy.types.entity.keyword.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.amount_of_money package" href="dialogy.types.entity.amount_of_money.html" /><link rel="prev" title="dialogy.types.slots package" href="dialogy.types.slots.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.keyword package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.keyword package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.types.entity.numerical.html b/docs/source/dialogy.types.entity.numerical.html
index b4cf02f1..b2c06661 100644
--- a/docs/source/dialogy.types.entity.numerical.html
+++ b/docs/source/dialogy.types.entity.numerical.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.people package" href="dialogy.types.entity.people.html" /><link rel="prev" title="dialogy.types.entity.credit_card_number package" href="dialogy.types.entity.credit_card_number.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.numerical package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.numerical package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -351,7 +351,7 @@ <h4>CASTING<a class="headerlink" href="#casting" title="Permalink to this headli
 <dd></dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.numerical.NumericalEntity.from_duckling">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/numerical.html#NumericalEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.numerical.NumericalEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/numerical.html#NumericalEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.numerical.NumericalEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><a class="reference internal" href="#dialogy.types.entity.numerical.NumericalEntity" title="dialogy.types.entity.numerical.NumericalEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">NumericalEntity</span></code></a></p>
diff --git a/docs/source/dialogy.types.entity.people.html b/docs/source/dialogy.types.entity.people.html
index 8f179865..0b98e375 100644
--- a/docs/source/dialogy.types.entity.people.html
+++ b/docs/source/dialogy.types.entity.people.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.time package" href="dialogy.types.entity.time.html" /><link rel="prev" title="dialogy.types.entity.numerical package" href="dialogy.types.entity.numerical.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.people package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.people package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -280,7 +280,7 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <dd></dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.people.PeopleEntity.from_duckling">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/people.html#PeopleEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.people.PeopleEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/people.html#PeopleEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.people.PeopleEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><a class="reference internal" href="#dialogy.types.entity.people.PeopleEntity" title="dialogy.types.entity.people.PeopleEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">PeopleEntity</span></code></a></p>
diff --git a/docs/source/dialogy.types.entity.time.html b/docs/source/dialogy.types.entity.time.html
index 07c0de11..3cb11bef 100644
--- a/docs/source/dialogy.types.entity.time.html
+++ b/docs/source/dialogy.types.entity.time.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.time_interval package" href="dialogy.types.entity.time_interval.html" /><link rel="prev" title="dialogy.types.entity.people package" href="dialogy.types.entity.people.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.time package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.time package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -238,10 +238,10 @@ <h4>Plugin Walkthrough<a class="headerlink" href="#plugin-walkthrough" title="Pe
 <span class="gp">   ...: </span>
 
 <span class="gp">In [3]: </span><span class="n">duckling_plugin</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">"tomorrow"</span><span class="p">)</span>
-<span class="gh">Out[3]: </span><span class="go">[TimeEntity(body='tomorrow', type='value', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, value='2022-02-23T00:00:00.000+05:30', entity_type='date', origin='value', dim='time', grain='day')]</span>
+<span class="gh">Out[3]: </span><span class="go">[TimeEntity(body='tomorrow', type='value', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, value='2022-03-15T00:00:00.000+05:30', entity_type='date', origin='value', dim='time', grain='day')]</span>
 
 <span class="gp">In [4]: </span><span class="n">duckling_plugin</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">"monday"</span><span class="p">)</span>
-<span class="gh">Out[4]: </span><span class="go">[TimeEntity(body='monday', type='value', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, value='2022-02-28T00:00:00.000+05:30', entity_type='date', origin='value', dim='time', grain='day')]</span>
+<span class="gh">Out[4]: </span><span class="go">[TimeEntity(body='monday', type='value', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, value='2022-03-14T00:00:00.000+05:30', entity_type='date', origin='value', dim='time', grain='day')]</span>
 
 <span class="gp">In [5]: </span><span class="n">duckling_plugin</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">"27th jan"</span><span class="p">)</span>
 <span class="gh">Out[5]: </span><span class="go">[TimeEntity(body='27th jan', type='value', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, value='2023-01-27T00:00:00.000+05:30', entity_type='date', origin='value', dim='time', grain='day')]</span>
@@ -276,7 +276,7 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <span class="go">   'parsers': ['DucklingPlugin'],</span>
 <span class="go">   'score': 0.3333333333333333,</span>
 <span class="go">   'alternative_index': 0,</span>
-<span class="go">   'value': '2022-02-23T00:00:00.000+05:30',</span>
+<span class="go">   'value': '2022-03-15T00:00:00.000+05:30',</span>
 <span class="go">   'entity_type': 'date',</span>
 <span class="go">   'grain': 'day'},</span>
 <span class="go">  {'range': {'start': 0, 'end': 6},</span>
@@ -285,7 +285,7 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <span class="go">   'parsers': ['DucklingPlugin'],</span>
 <span class="go">   'score': 0.3333333333333333,</span>
 <span class="go">   'alternative_index': 1,</span>
-<span class="go">   'value': '2022-02-28T00:00:00.000+05:30',</span>
+<span class="go">   'value': '2022-03-14T00:00:00.000+05:30',</span>
 <span class="go">   'entity_type': 'date',</span>
 <span class="go">   'grain': 'day'},</span>
 <span class="go">  {'range': {'start': 0, 'end': 8},</span>
@@ -330,7 +330,7 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <dd></dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.time.TimeEntity.from_duckling">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/time.html#TimeEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.time.TimeEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">constraints</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/time.html#TimeEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.time.TimeEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><a class="reference internal" href="#dialogy.types.entity.time.TimeEntity" title="dialogy.types.entity.time.TimeEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">TimeEntity</span></code></a></p>
@@ -410,6 +410,15 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <span class="sig-name descname"><span class="pre">origin</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#dialogy.types.entity.time.TimeEntity.origin" title="Permalink to this definition">¶</a></dt>
 <dd></dd></dl>
 <dl class="py method">
+<dt class="sig sig-object py" id="dialogy.types.entity.time.TimeEntity.pick_value">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">pick_value</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d_values</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">grain</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">constraints</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/time.html#TimeEntity.pick_value"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.time.TimeEntity.pick_value" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="field-list simple">
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">List</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">Dict</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>, <code class="xref py py-data docutils literal notranslate"><span class="pre">Any</span></code>]]</p>
+</dd>
+</dl>
+</dd></dl>
+<dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.time.TimeEntity.set_entity_type">
 <span class="sig-name descname"><span class="pre">set_entity_type</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/time.html#TimeEntity.set_entity_type"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.time.TimeEntity.set_entity_type" title="Permalink to this definition">¶</a></dt>
 <dd><p>Returns the type for this entity</p>
diff --git a/docs/source/dialogy.types.entity.time_interval.html b/docs/source/dialogy.types.entity.time_interval.html
index fc8b39fc..85cd55ab 100644
--- a/docs/source/dialogy.types.entity.time_interval.html
+++ b/docs/source/dialogy.types.entity.time_interval.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.duration package" href="dialogy.types.entity.duration.html" /><link rel="prev" title="dialogy.types.entity.time package" href="dialogy.types.entity.time.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.entity.time_interval package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.entity.time_interval package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -238,10 +238,10 @@ <h4>Plugin Walkthrough<a class="headerlink" href="#plugin-walkthrough" title="Pe
 <span class="gp">   ...: </span>
 
 <span class="gp">In [3]: </span><span class="n">duckling_plugin</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">"weekend"</span><span class="p">)</span>
-<span class="gh">Out[3]: </span><span class="go">[TimeIntervalEntity(body='weekend', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, entity_type='datetime', origin='value', dim='time', grain='hour', type='interval', from_value='2022-02-25T18:00:00.000+05:30', to_value='2022-02-28T00:00:00.000+05:30', values=[{'to': {'value': '2022-02-28T00:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-02-25T18:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}, {'to': {'value': '2022-03-07T00:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-03-04T18:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}, {'to': {'value': '2022-03-14T00:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-03-11T18:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}], value={'from': '2022-02-25T18:00:00.000+05:30', 'to': '2022-02-28T00:00:00.000+05:30'})]</span>
+<span class="gh">Out[3]: </span><span class="go">[TimeIntervalEntity(body='weekend', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, entity_type='datetime', origin='value', dim='time', grain='hour', type='interval', from_value='2022-03-18T18:00:00.000+05:30', to_value='2022-03-21T00:00:00.000+05:30', values=[{'to': {'value': '2022-03-21T00:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-03-18T18:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}, {'to': {'value': '2022-03-28T00:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-03-25T18:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}, {'to': {'value': '2022-04-04T00:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-04-01T18:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}], value={'from': '2022-03-18T18:00:00.000+05:30', 'to': '2022-03-21T00:00:00.000+05:30'})]</span>
 
 <span class="gp">In [4]: </span><span class="n">duckling_plugin</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">"between 4 to 5pm"</span><span class="p">)</span>
-<span class="gh">Out[4]: </span><span class="go">[TimeIntervalEntity(body='between 4 to 5pm', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, entity_type='time', origin='value', dim='time', grain='hour', type='interval', from_value='2022-02-23T16:00:00.000+05:30', to_value='2022-02-23T18:00:00.000+05:30', values=[{'to': {'value': '2022-02-23T18:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-02-23T16:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}, {'to': {'value': '2022-02-24T18:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-02-24T16:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}, {'to': {'value': '2022-02-25T18:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-02-25T16:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}], value={'from': '2022-02-23T16:00:00.000+05:30', 'to': '2022-02-23T18:00:00.000+05:30'})]</span>
+<span class="gh">Out[4]: </span><span class="go">[TimeIntervalEntity(body='between 4 to 5pm', parsers=['DucklingPlugin'], score=1.0, alternative_index=0, alternative_indices=[0], latent=False, entity_type='time', origin='value', dim='time', grain='hour', type='interval', from_value='2022-03-15T16:00:00.000+05:30', to_value='2022-03-15T18:00:00.000+05:30', values=[{'to': {'value': '2022-03-15T18:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-03-15T16:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}, {'to': {'value': '2022-03-16T18:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-03-16T16:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}, {'to': {'value': '2022-03-17T18:00:00.000+05:30', 'grain': 'hour'}, 'from': {'value': '2022-03-17T16:00:00.000+05:30', 'grain': 'hour'}, 'type': 'interval'}], value={'from': '2022-03-15T16:00:00.000+05:30', 'to': '2022-03-15T18:00:00.000+05:30'})]</span>
 </pre></div>
 </div>
 </section>
@@ -275,10 +275,10 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <span class="go">   'entity_type': 'datetime',</span>
 <span class="go">   'grain': 'hour',</span>
 <span class="go">   'type': 'interval',</span>
-<span class="go">   'from_value': '2022-02-25T18:00:00.000+05:30',</span>
-<span class="go">   'to_value': '2022-02-28T00:00:00.000+05:30',</span>
-<span class="go">   'value': {'from': '2022-02-25T18:00:00.000+05:30',</span>
-<span class="go">    'to': '2022-02-28T00:00:00.000+05:30'}},</span>
+<span class="go">   'from_value': '2022-03-18T18:00:00.000+05:30',</span>
+<span class="go">   'to_value': '2022-03-21T00:00:00.000+05:30',</span>
+<span class="go">   'value': {'from': '2022-03-18T18:00:00.000+05:30',</span>
+<span class="go">    'to': '2022-03-21T00:00:00.000+05:30'}},</span>
 <span class="go">  {'range': {'start': 0, 'end': 16},</span>
 <span class="go">   'body': 'between 4 to 5pm',</span>
 <span class="go">   'parsers': ['DucklingPlugin'],</span>
@@ -287,10 +287,10 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <span class="go">   'entity_type': 'time',</span>
 <span class="go">   'grain': 'hour',</span>
 <span class="go">   'type': 'interval',</span>
-<span class="go">   'from_value': '2022-02-23T16:00:00.000+05:30',</span>
-<span class="go">   'to_value': '2022-02-23T18:00:00.000+05:30',</span>
-<span class="go">   'value': {'from': '2022-02-23T16:00:00.000+05:30',</span>
-<span class="go">    'to': '2022-02-23T18:00:00.000+05:30'}}],</span>
+<span class="go">   'from_value': '2022-03-15T16:00:00.000+05:30',</span>
+<span class="go">   'to_value': '2022-03-15T18:00:00.000+05:30',</span>
+<span class="go">   'value': {'from': '2022-03-15T16:00:00.000+05:30',</span>
+<span class="go">    'to': '2022-03-15T18:00:00.000+05:30'}}],</span>
 <span class="go"> 'original_intent': {}}</span>
 </pre></div>
 </div>
@@ -325,7 +325,7 @@ <h4>Workflow Integration<a class="headerlink" href="#workflow-integration" title
 <dd></dd></dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="dialogy.types.entity.time_interval.TimeIntervalEntity.from_duckling">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/time_interval.html#TimeIntervalEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.time_interval.TimeIntervalEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_duckling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">d</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">alternative_index</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">constraints</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/types/entity/time_interval.html#TimeIntervalEntity.from_duckling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.types.entity.time_interval.TimeIntervalEntity.from_duckling" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><a class="reference internal" href="dialogy.types.entity.time.html#dialogy.types.entity.time.TimeEntity" title="dialogy.types.entity.time.TimeEntity"><code class="xref py py-class docutils literal notranslate"><span class="pre">TimeEntity</span></code></a></p>
diff --git a/docs/source/dialogy.types.html b/docs/source/dialogy.types.html
index 7210ef17..468b520d 100644
--- a/docs/source/dialogy.types.html
+++ b/docs/source/dialogy.types.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.types.intent.html b/docs/source/dialogy.types.intent.html
index 0ac01238..d23018ed 100644
--- a/docs/source/dialogy.types.intent.html
+++ b/docs/source/dialogy.types.intent.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.base_entity package" href="dialogy.types.entity.base_entity.html" /><link rel="prev" title="dialogy.base.plugin package" href="dialogy.base.plugin.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.intent package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.intent package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.types.plugin.html b/docs/source/dialogy.types.plugin.html
index 2d174e0a..0e09cfa9 100644
--- a/docs/source/dialogy.types.plugin.html
+++ b/docs/source/dialogy.types.plugin.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.plugin package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.plugin package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.types.signal.html b/docs/source/dialogy.types.signal.html
index b5e1fd45..3dbf3b4f 100644
--- a/docs/source/dialogy.types.signal.html
+++ b/docs/source/dialogy.types.signal.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.signal package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.signal package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.types.slots.html b/docs/source/dialogy.types.slots.html
index d3c67c95..084aa9f7 100644
--- a/docs/source/dialogy.types.slots.html
+++ b/docs/source/dialogy.types.slots.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.types.entity.keyword package" href="dialogy.types.entity.keyword.html" /><link rel="prev" title="dialogy.types.entity.base_entity package" href="dialogy.types.entity.base_entity.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.slots package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.slots package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.types.utterances.html b/docs/source/dialogy.types.utterances.html
index 08032767..5ebf5f54 100644
--- a/docs/source/dialogy.types.utterances.html
+++ b/docs/source/dialogy.types.utterances.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.types.utterances package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.types.utterances package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/dialogy.utils.html b/docs/source/dialogy.utils.html
index 24032d8a..b1d5ece6 100644
--- a/docs/source/dialogy.utils.html
+++ b/docs/source/dialogy.utils.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="prev" title="dialogy.plugins.text.combine_date_time package" href="dialogy.plugins.text.combine_date_time.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.utils package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.utils package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
@@ -790,7 +790,7 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this
 </dd></dl>
 <dl class="py function">
 <dt class="sig sig-object py" id="dialogy.utils.temperature_scaling.fit_ts_parameter">
-<span class="sig-name descname"><span class="pre">fit_ts_parameter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">logits_list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">labels_list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lr</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.001</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_iter</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10000</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/utils/temperature_scaling.html#fit_ts_parameter"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.utils.temperature_scaling.fit_ts_parameter" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit_ts_parameter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">logits_list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">labels_list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lr</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.001</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_iter</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10000</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">device(type='cuda')</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/dialogy/utils/temperature_scaling.html#fit_ts_parameter"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#dialogy.utils.temperature_scaling.fit_ts_parameter" title="Permalink to this definition">¶</a></dt>
 <dd><dl class="field-list simple">
 <dt class="field-odd">Return type</dt>
 <dd class="field-odd"><p><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></p>
diff --git a/docs/source/dialogy.workflow.html b/docs/source/dialogy.workflow.html
index 6482c7b1..53376468 100644
--- a/docs/source/dialogy.workflow.html
+++ b/docs/source/dialogy.workflow.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="dialogy.base.plugin package" href="dialogy.base.plugin.html" /><link rel="prev" title="dialogy.base.output package" href="dialogy.base.output.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy.workflow package - dialogy 0.9.5 documentation</title>
+        <title>dialogy.workflow package - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
diff --git a/docs/source/modules.html b/docs/source/modules.html
index 58b4955b..2d6342ec 100644
--- a/docs/source/modules.html
+++ b/docs/source/modules.html
@@ -6,7 +6,7 @@
 <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
 
     <meta name="generator" content="sphinx-4.4.0, furo 2021.11.23"/>
-        <title>dialogy - dialogy 0.9.5 documentation</title>
+        <title>dialogy - dialogy 0.9.6 documentation</title>
       <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
     <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?digest=7f0192ddeb2adecfbaa87ffbcf67d16358b30bc1" />
     <link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
@@ -125,7 +125,7 @@
       </label>
     </div>
     <div class="header-center">
-      <a href="../index.html"><div class="brand">dialogy 0.9.5 documentation</div></a>
+      <a href="../index.html"><div class="brand">dialogy 0.9.6 documentation</div></a>
     </div>
     <div class="header-right">
       <div class="theme-toggle-container theme-toggle-header">
@@ -148,7 +148,7 @@
       <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
   
   
-  <span class="sidebar-brand-text">dialogy 0.9.5 documentation</span>
+  <span class="sidebar-brand-text">dialogy 0.9.6 documentation</span>
   
 </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
   <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">


Test patch:
diff --git a/tests/cli/test_project.py b/tests/cli/test_project.py
index 253eac9f..5c361cd2 100644
--- a/tests/cli/test_project.py
+++ b/tests/cli/test_project.py
@@ -38,22 +38,6 @@ def test_project_creation_invalid():
         cli.main("unknown hello_world --dry-run")
 
 
-def test_project_creation_from_tag(monkeypatch):
-    """Test a valid command to build from latest tag."""
-    monkeypatch.setattr("sys.stdin", io.StringIO("no"))
-    try:
-        cli.main("create hello_world --dry-run")
-    except SystemExit:
-        pytest.fail("Unexpected SystemExit")
-
-
-def test_project_creation_from_master(monkeypatch):
-    """Test a valid command to build from master branch."""
-    monkeypatch.setattr("sys.stdin", io.StringIO("no"))
-    with pytest.raises(pydantic.ValidationError):
-        cli.main("create hello_world --dry-run --master")
-
-
 def test_project_creation_safe_exit(monkeypatch):
     """Test the command to fail if destination is not empty."""
     monkeypatch.setattr("sys.stdin", io.StringIO("no"))
diff --git a/tests/plugin/text/classification/test_mlp.py b/tests/plugin/text/classification/test_mlp.py
index da109a8f..984e4503 100644
--- a/tests/plugin/text/classification/test_mlp.py
+++ b/tests/plugin/text/classification/test_mlp.py
@@ -1,15 +1,15 @@
 import json
 import os
-import tempfile
 from typing import List
 
 import joblib
 import pandas as pd
 import pytest
 import sklearn
+from sklearn.model_selection import GridSearchCV
 
 import dialogy.constants as const
-from dialogy.base import Guard, Input, Plugin
+from dialogy.base import Input
 from dialogy.plugins import MergeASROutputPlugin, MLPMultiClass
 from dialogy.utils import load_file
 from dialogy.workflow import Workflow
@@ -32,17 +32,22 @@ def train(self, training_data: pd.DataFrame):
         return
 
 
+class MockGridSearchCV:
+    def __init__(self, *args, **kwargs):
+        self.best_params_ = {}
+
+    def fit(self, X, y):
+        self.classes_ = []
+
+
 def test_mlp_plugin_when_no_mlpmodel_saved():
     mlp_clf = MLPMultiClass(model_dir=".", dest="output.intents")
     assert isinstance(mlp_clf, MLPMultiClass)
     assert mlp_clf.model_pipeline is None
 
 
-def test_mlp_plugin_when_mlpmodel_EOFError(capsys):
-    _, file_path = tempfile.mkstemp(suffix=".pkl")
-    save_mlp_model_file = const.MLPMODEL_FILE
-    directory, file_name = os.path.split(file_path)
-    const.MLPMODEL_FILE = file_name
+def test_mlp_plugin_when_mlpmodel_EOFError(capsys, tmpdir):
+    directory = tmpdir.mkdir("mlp_plugin")
     with capsys.disabled():
         mlp_plugin = MLPMultiClass(
             model_dir=directory,
@@ -50,8 +55,6 @@ def test_mlp_plugin_when_mlpmodel_EOFError(capsys):
             debug=False,
         )
         assert mlp_plugin.model_pipeline is None
-    os.remove(file_path)
-    const.MLPMODEL_FILE = save_mlp_model_file
 
 
 def test_mlp_init_mock():
@@ -133,8 +136,8 @@ def test_mlp_gridsearch_argsmap():
         xlmr_clf_invalid.init_model()
 
 
-def test_train_mlp_mock():
-    directory = "/tmp"
+def test_train_mlp_mock(tmpdir):
+    directory = tmpdir.mkdir("mlp_plugin")
     file_path = os.path.join(directory, const.MLPMODEL_FILE)
 
     mlp_clf = MLPMultiClass(
@@ -165,12 +168,10 @@ def test_train_mlp_mock():
     mlp_clf_copy.load()
     assert isinstance(mlp_clf_copy.model_pipeline, sklearn.pipeline.Pipeline)
     assert mlp_clf_copy.valid_mlpmodel is True
-    os.remove(file_path)
 
 
-def test_train_mlp_gridsearch_mock():
-    directory = "/tmp"
-    file_path = os.path.join(directory, const.MLPMODEL_FILE)
+def test_train_mlp_gridsearch_mock(tmpdir, monkeypatch, mocker):
+    directory = tmpdir.mkdir("mlp_plugin")
     USE = "use"
     fake_args = {
         const.TRAIN: {
@@ -207,7 +208,7 @@ def test_train_mlp_gridsearch_mock():
         ]
     )
 
-    mlp_clf.train(train_df)
+    mlp_clf.train(train_df, param_search=MockGridSearchCV)
     assert mlp_clf.labels_num == 2
 
     # This copy loads from the same directory that was trained previously.
@@ -219,15 +220,11 @@ def test_train_mlp_gridsearch_mock():
     )
     mlp_clf_copy.load()
     assert mlp_clf_copy.valid_mlpmodel is True
-    mlp_clf_copy.train(train_df)  # When trying to train an already trained model
-    os.remove(file_path)
 
 
-def test_invalid_operations():
-    directory = "/tmp"
-    file_path = os.path.join(directory, const.MLPMODEL_FILE)
-    if os.path.exists(file_path):
-        os.remove(file_path)
+def test_invalid_operations(tmpdir):
+    directory = tmpdir.mkdir("mlp_plugin")
+    file_path = directory.join(const.MLPMODEL_FILE)
 
     mlp_clf = MLPMultiClass(
         model_dir=directory,
@@ -267,16 +264,11 @@ def test_invalid_operations():
     mlp_clf.model_pipeline = None
     assert mlp_clf.inference(["text"])[0].name == "_error_"
 
-    if os.path.exists(file_path):
-        os.remove(file_path)
-
 
 @pytest.mark.parametrize("payload", load_tests("mlp_cases", __file__))
-def test_inference(payload):
-    directory = "/tmp"
-    file_path = os.path.join(directory, const.MLPMODEL_FILE)
-    if os.path.exists(file_path):
-        os.remove(file_path)
+def test_inference(payload, tmpdir):
+    directory = tmpdir.mkdir("mlp_plugin")
+    file_path = directory.join(const.MLPMODEL_FILE)
 
     USE = "use"
     fake_args = {
@@ -350,5 +342,3 @@ def test_inference(payload):
     )
     assert output[const.INTENTS][0]["name"] == intent
     assert output[const.INTENTS][0]["score"] > 0.5
-    if os.path.exists(file_path):
-        os.remove(file_path)
diff --git a/tests/plugin/text/classification/test_xlmr.py b/tests/plugin/text/classification/test_xlmr.py
index 35812ce0..b3fcb023 100644
--- a/tests/plugin/text/classification/test_xlmr.py
+++ b/tests/plugin/text/classification/test_xlmr.py
@@ -57,7 +57,9 @@ def test_xlmr_plugin_no_module_error(mocker):
 
 
 def test_xlmr_plugin_when_no_labelencoder_saved(mocker):
-    mocker.patch.object(const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr")
+    mocker.patch.object(
+        const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr"
+    )
     mocker.patch.object(const, "XLMR_MULTI_CLASS_MODEL", "MockClassifier")
 
     xlmr_clf = XLMRMultiClass(model_dir=".", dest="output.intents", debug=False)
@@ -66,7 +68,9 @@ def test_xlmr_plugin_when_no_labelencoder_saved(mocker):
 
 
 def test_xlmr_plugin_when_labelencoder_EOFError(capsys, mocker, tmpdir):
-    mocker.patch.object(const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr")
+    mocker.patch.object(
+        const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr"
+    )
     mocker.patch.object(const, "XLMR_MULTI_CLASS_MODEL", "MockClassifier")
 
     _, file_path = tempfile.mkstemp(suffix=".pkl")
@@ -86,7 +90,9 @@ def test_xlmr_plugin_when_labelencoder_EOFError(capsys, mocker, tmpdir):
 
 
 def test_xlmr_init_mock(mocker):
-    mocker.patch.object(const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr")
+    mocker.patch.object(
+        const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr"
+    )
     mocker.patch.object(const, "XLMR_MULTI_CLASS_MODEL", "MockClassifier")
 
     xlmr_clf = XLMRMultiClass(model_dir=".", dest="output.intents", debug=False)
@@ -95,7 +101,9 @@ def test_xlmr_init_mock(mocker):
 
 
 def test_xlmr_init_mock(mocker):
-    mocker.patch.object(const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr")
+    mocker.patch.object(
+        const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr"
+    )
     mocker.patch.object(const, "XLMR_MULTI_CLASS_MODEL", "MockClassifier")
 
     with pytest.raises(ValueError):
@@ -108,15 +116,15 @@ def test_xlmr_init_mock(mocker):
 
 
 def test_train_xlmr_mock(mocker, tmpdir):
-    mocker.patch.object(const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr")
+    mocker.patch.object(
+        const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr"
+    )
     mocker.patch.object(const, "XLMR_MULTI_CLASS_MODEL", "MockClassifier")
 
-
     directory = "/tmp"
     file_path = tmpdir.mkdir(directory).join("labelencoder.pkl")
     mocker.patch.object(const, "LABELENCODER_FILE", file_path)
 
-
     xlmr_clf = XLMRMultiClass(model_dir=directory, dest="output.intents", debug=False)
 
     xlmr_clf_state = XLMRMultiClass(
@@ -157,7 +165,9 @@ def test_train_xlmr_mock(mocker, tmpdir):
 
 
 def test_invalid_operations(mocker, tmpdir):
-    mocker.patch.object(const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr")
+    mocker.patch.object(
+        const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr"
+    )
     mocker.patch.object(const, "XLMR_MULTI_CLASS_MODEL", "MockClassifier")
     directory = "/tmp"
     file_path = tmpdir.mkdir(directory).join("labelencoder.pkl")
@@ -197,7 +207,9 @@ def test_invalid_operations(mocker, tmpdir):
 
 
 def test_invalid_operations_with_state(mocker, tmpdir):
-    mocker.patch.object(const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr")
+    mocker.patch.object(
+        const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr"
+    )
     mocker.patch.object(const, "XLMR_MULTI_CLASS_MODEL", "MockClassifier")
     directory = "/tmp"
     file_path = tmpdir.mkdir(directory).join("labelencoder.pkl")
@@ -246,7 +258,9 @@ def test_invalid_operations_with_state(mocker, tmpdir):
 
 @pytest.mark.parametrize("payload", load_tests("cases", __file__))
 def test_inference(payload, mocker, tmpdir):
-    mocker.patch.object(const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr")
+    mocker.patch.object(
+        const, "XLMR_MODULE", "tests.plugin.text.classification.test_xlmr"
+    )
     mocker.patch.object(const, "XLMR_MULTI_CLASS_MODEL", "MockClassifier")
     directory = "/tmp"
     file_path = tmpdir.mkdir(directory).join(const.LABELENCODER_FILE)
diff --git a/tests/plugin/text/test_calibration/test_calibration_filter.py b/tests/plugin/text/test_calibration/test_calibration_filter.py
index 996d631a..05104a1a 100644
--- a/tests/plugin/text/test_calibration/test_calibration_filter.py
+++ b/tests/plugin/text/test_calibration/test_calibration_filter.py
@@ -1,8 +1,5 @@
-# type : ignore
-
 import json
 from copy import copy
-from typing import ValuesView
 
 import numpy as np
 import pandas as pd
@@ -10,7 +7,6 @@
 
 from dialogy.base import Input, Output
 from dialogy.plugins.text.calibration.xgb import CalibrationModel
-from dialogy.types import utterances
 from tests import load_tests
 
 json_data = load_tests("df", __file__, ext=".json")
diff --git a/tests/plugin/text/test_list_search_plugin/test_cases.yaml b/tests/plugin/text/test_list_search_plugin/test_cases.yaml
index 5b420827..faac846c 100644
--- a/tests/plugin/text/test_list_search_plugin/test_cases.yaml
+++ b/tests/plugin/text/test_list_search_plugin/test_cases.yaml
@@ -1,4 +1,72 @@
-
+- description: "Test location entities using regex"
+  input:
+    - text: "I live in punjab"
+  lang: en
+  expected: []
+  nlp_words: [{
+    "id": 1,
+    "text": "I",
+    "lemma": "I",
+    "upos": "PRON",
+    "xpos": "PRP",
+    "feats": "Case=Nom|Number=Sing|Person=1|PronType=Prs",
+    "head": 2,
+    "deprel": "nsubj",
+    "misc": "",
+    "start_char": 0,
+    "end_char": 1,
+    "ner": "O"
+  },
+  {
+    "id": 2,
+    "text": "live",
+    "lemma": "live",
+    "upos": "VERB",
+    "xpos": "VBP",
+    "feats": "Mood=Ind|Tense=Pres|VerbForm=Fin",
+    "head": 0,
+    "deprel": "root",
+    "misc": "",
+    "start_char": 2,
+    "end_char": 6,
+    "ner": "O"
+  }, {
+    "id": 3,
+    "text": "in",
+    "lemma": "in",
+    "upos": "ADP",
+    "xpos": "IN",
+    "head": 4,
+    "deprel": "case",
+    "misc": "",
+    "start_char": 7,
+    "end_char": 9,
+    "ner": "O"
+  },
+  {
+    "id": 4,
+    "text": "punjab",
+    "lemma": "punjab",
+    "upos": "PROPN",
+    "xpos": "NNP",
+    "feats": "Number=Sing",
+    "head": 2,
+    "deprel": "obl",
+    "misc": "",
+    "start_char": 10,
+    "end_char": 16,
+    "ner": "O"
+    }
+  ]
+  config:
+    debug: false
+    fuzzy_threshold: 0.4
+    fuzzy_dp_config:
+      en:
+        location:
+          New Delhi: Delhi
+          new deli: Delhi
+          delhi: Delhi
 
 - description: "Test location entities using regex"
   input:
@@ -7,6 +75,118 @@
   expected:
     - type: "location"
       value: "Delhi"
+  nlp_words:   [
+    {
+      "id": 1,
+      "text": "i",
+      "lemma": "I",
+      "upos": "PRON",
+      "xpos": "PRP",
+      "feats": "Case=Nom|Number=Sing|Person=1|PronType=Prs",
+      "head": 2,
+      "deprel": "nsubj",
+      "misc": "",
+      "start_char": 0,
+      "end_char": 1,
+      "ner": "O"
+    },
+    {
+      "id": 2,
+      "text": "want",
+      "lemma": "want",
+      "upos": "VERB",
+      "xpos": "VBP",
+      "feats": "Mood=Ind|Tense=Pres|VerbForm=Fin",
+      "head": 0,
+      "deprel": "root",
+      "misc": "",
+      "start_char": 2,
+      "end_char": 6,
+      "ner": "O"
+    },
+    {
+      "id": 3,
+      "text": "to",
+      "lemma": "to",
+      "upos": "PART",
+      "xpos": "TO",
+      "head": 4,
+      "deprel": "mark",
+      "misc": "",
+      "start_char": 7,
+      "end_char": 9,
+      "ner": "O"
+    },
+    {
+      "id": 4,
+      "text": "parse",
+      "lemma": "parse",
+      "upos": "VERB",
+      "xpos": "VB",
+      "feats": "VerbForm=Inf",
+      "head": 2,
+      "deprel": "xcomp",
+      "misc": "",
+      "start_char": 10,
+      "end_char": 15,
+      "ner": "O"
+    },
+    {
+      "id": 5,
+      "text": "a",
+      "lemma": "a",
+      "upos": "DET",
+      "xpos": "DT",
+      "feats": "Definite=Ind|PronType=Art",
+      "head": 6,
+      "deprel": "det",
+      "misc": "",
+      "start_char": 16,
+      "end_char": 17,
+      "ner": "O"
+    },
+    {
+      "id": 6,
+      "text": "token",
+      "lemma": "token",
+      "upos": "NOUN",
+      "xpos": "NN",
+      "feats": "Number=Sing",
+      "head": 4,
+      "deprel": "obj",
+      "misc": "",
+      "start_char": 18,
+      "end_char": 23,
+      "ner": "O"
+    },
+    {
+      "id": 7,
+      "text": "in",
+      "lemma": "in",
+      "upos": "ADP",
+      "xpos": "IN",
+      "head": 8,
+      "deprel": "case",
+      "misc": "",
+      "start_char": 24,
+      "end_char": 26,
+      "ner": "O"
+    },
+    {
+      "id": 8,
+      "text": "delhi",
+      "lemma": "delhi",
+      "upos": "PROPN",
+      "xpos": "NNP",
+      "feats": "Number=Sing",
+      "head": 6,
+      "deprel": "nmod",
+      "misc": "",
+      "start_char": 27,
+      "end_char": 32,
+      "ner": "S-GPE"
+    }
+  ]
   config:
     debug: false
     fuzzy_threshold: 0.4
@@ -17,7 +197,6 @@
           new deli: Delhi
           delhi: Delhi
 
-
 - description: "Test location entities using regex"
   input:
     - text: "i want to parse a token in deli"
@@ -25,6 +204,118 @@
   expected:
     - type: "location"
       value: "Delhi"
+  nlp_words:   [
+    {
+      "id": 1,
+      "text": "i",
+      "lemma": "I",
+      "upos": "PRON",
+      "xpos": "PRP",
+      "feats": "Case=Nom|Number=Sing|Person=1|PronType=Prs",
+      "head": 2,
+      "deprel": "nsubj",
+      "misc": "",
+      "start_char": 0,
+      "end_char": 1,
+      "ner": "O"
+    },
+    {
+      "id": 2,
+      "text": "want",
+      "lemma": "want",
+      "upos": "VERB",
+      "xpos": "VBP",
+      "feats": "Mood=Ind|Tense=Pres|VerbForm=Fin",
+      "head": 0,
+      "deprel": "root",
+      "misc": "",
+      "start_char": 2,
+      "end_char": 6,
+      "ner": "O"
+    },
+    {
+      "id": 3,
+      "text": "to",
+      "lemma": "to",
+      "upos": "PART",
+      "xpos": "TO",
+      "head": 4,
+      "deprel": "mark",
+      "misc": "",
+      "start_char": 7,
+      "end_char": 9,
+      "ner": "O"
+    },
+    {
+      "id": 4,
+      "text": "parse",
+      "lemma": "parse",
+      "upos": "VERB",
+      "xpos": "VB",
+      "feats": "VerbForm=Inf",
+      "head": 2,
+      "deprel": "xcomp",
+      "misc": "",
+      "start_char": 10,
+      "end_char": 15,
+      "ner": "O"
+    },
+    {
+      "id": 5,
+      "text": "a",
+      "lemma": "a",
+      "upos": "DET",
+      "xpos": "DT",
+      "feats": "Definite=Ind|PronType=Art",
+      "head": 6,
+      "deprel": "det",
+      "misc": "",
+      "start_char": 16,
+      "end_char": 17,
+      "ner": "O"
+    },
+    {
+      "id": 6,
+      "text": "token",
+      "lemma": "token",
+      "upos": "NOUN",
+      "xpos": "NN",
+      "feats": "Number=Sing",
+      "head": 4,
+      "deprel": "obj",
+      "misc": "",
+      "start_char": 18,
+      "end_char": 23,
+      "ner": "O"
+    },
+    {
+      "id": 7,
+      "text": "in",
+      "lemma": "in",
+      "upos": "ADP",
+      "xpos": "IN",
+      "head": 8,
+      "deprel": "case",
+      "misc": "",
+      "start_char": 24,
+      "end_char": 26,
+      "ner": "O"
+    },
+    {
+      "id": 8,
+      "text": "deli",
+      "lemma": "deli",
+      "upos": "NOUN",
+      "xpos": "NN",
+      "feats": "Number=Sing",
+      "head": 4,
+      "deprel": "obl",
+      "misc": "",
+      "start_char": 27,
+      "end_char": 31,
+      "ner": "O"
+    }
+  ]
   config:
     debug: false
     fuzzy_threshold: 0.4
diff --git a/tests/plugin/text/test_list_search_plugin/test_list_search_plugin.py b/tests/plugin/text/test_list_search_plugin/test_list_search_plugin.py
index 994873f9..abc5c331 100644
--- a/tests/plugin/text/test_list_search_plugin/test_list_search_plugin.py
+++ b/tests/plugin/text/test_list_search_plugin/test_list_search_plugin.py
@@ -1,7 +1,8 @@
-import pandas as pd
+import json
+
 import pytest
 
-from dialogy.base import Input, Output
+from dialogy.base import Input
 from dialogy.plugins import ListSearchPlugin
 from dialogy.workflow import Workflow
 from tests import EXCEPTIONS, load_tests
@@ -20,7 +21,51 @@ def __call__(self, transcript):
         return self
 
 
-def test_not_supported_lang():
+class MockDocument:
+    def __init__(self, d) -> None:
+        self.d = d
+
+    def to_dict(self):
+        return self.d
+
+
+def test_get_words_from_nlp(mocker):
+    mocker.patch("stanza.download", return_value=1)
+    mocker.patch("stanza.Pipeline", return_value={})
+    l = ListSearchPlugin(
+        dest="output.entities",
+        fuzzy_threshold=0.3,
+        fuzzy_dp_config={
+            "en": {
+                "location": {
+                    "New Delhi": "Delhi",
+                    "new deli": "Delhi",
+                    "delhi": "Delhi",
+                }
+            }
+        },
+    )
+    expected = json.loads(
+        """[[{"id": 1, "text": "I", "lemma": "I", "upos": "PRON", "xpos": "PRP", 
+    "feats": "Case=Nom|Number=Sing|Person=1|PronType=Prs", "head": 2, "deprel": "nsubj", "misc": "", 
+    "start_char": 0, "end_char": 1, "ner": "O"}, {"id": 2, "text": "live", "lemma": "live", 
+    "upos": "VERB", "xpos": "VBP", "feats": "Mood=Ind|Tense=Pres|VerbForm=Fin", "head": 0, "deprel": "root", 
+    "misc": "", "start_char": 2, "end_char": 6, "ner": "O"}, {"id": 3, "text": "in", "lemma": "in", 
+    "upos": "ADP", "xpos": "IN", "head": 4, "deprel": "case", "misc": "", "start_char": 7, "end_char": 9, 
+    "ner": "O"}, {"id": 4, "text": "punjab", "lemma": "punjab", "upos": "PROPN", 
+    "xpos": "NNP", "feats": "Number=Sing", "head": 2, "deprel": "obl", "misc": "", 
+    "start_char": 10, "end_char": 16, "ner": "O"}]]"""
+    )
+
+    def mock_nlp(query):
+        return MockDocument(expected)
+
+    assert expected[0] == l.get_words_from_nlp(mock_nlp, "I live in punjab")
+
+
+def test_not_supported_lang(mocker):
+    mocker.patch("stanza.download", return_value=1)
+    mocker.patch("stanza.Pipeline", return_value={})
     with pytest.raises(ValueError):
         l = ListSearchPlugin(
             dest="output.entities",
@@ -30,42 +75,32 @@ def test_not_supported_lang():
         l.get_entities(["........."], "te")
 
 
-def test_entity_not_found():
-    l = ListSearchPlugin(
-        dest="output.entities",
-        fuzzy_threshold=0.4,
-        fuzzy_dp_config={"en": {"location": {"delhi": "Delhi"}}},
-    )
-    assert l.get_entities(["I live in punjab"], "en") == []
-
-
 @pytest.mark.parametrize("payload", load_tests("cases", __file__))
-def test_get_list_entities(payload):
+def test_get_list_entities(payload, mocker):
     input_ = payload.get("input")
     lang_ = payload.get("lang")
     expected = payload.get("expected")
-    exception = payload.get("exception")
     config = payload.get("config")
+    nlp_words = payload.get("nlp_words")
     transcripts = [expectation["text"] for expectation in input_]
 
-    if expected:
-        list_entity_plugin = ListSearchPlugin(dest="output.entities", **config)
+    mocker.patch("stanza.download", return_value=1)
+    mocker.patch("stanza.Pipeline", return_value={})
+    mocker.patch(
+        "dialogy.plugins.ListSearchPlugin.get_words_from_nlp", return_value=nlp_words
+    )
 
-        workflow = Workflow([list_entity_plugin])
-        _, output = workflow.run(Input(utterances=transcripts, lang=lang_))
-        entities = output["entities"]
+    list_entity_plugin = ListSearchPlugin(dest="output.entities", **config)
 
-        if not entities and expected:
-            pytest.fail("No entities found!")
+    workflow = Workflow([list_entity_plugin])
+    _, output = workflow.run(Input(utterances=transcripts, lang=lang_))
+    entities = output["entities"]
 
-        for i, entity in enumerate(entities):
-            assert entity["value"] == expected[i]["value"]
-            assert entity["type"] == expected[i]["type"]
-            if "score" in expected[i]:
-                assert entity["score"] == expected[i]["score"]
-    else:
-        with pytest.raises(EXCEPTIONS.get(exception)):
-            list_entity_plugin = ListSearchPlugin(dest="output.entities", **config)
+    if not entities and expected:
+        pytest.fail("No entities found!")
 
-            workflow = Workflow([list_entity_plugin])
-            workflow.run(Input(utterances=transcripts, lang=lang_))
+    for i, entity in enumerate(entities):
+        assert entity["value"] == expected[i]["value"]
+        assert entity["type"] == expected[i]["type"]
+        if "score" in expected[i]:
+            assert entity["score"] == expected[i]["score"]
diff --git a/tests/types/entity/test_entities.py b/tests/types/entity/test_entities.py
index dc6796bd..9e4c90bb 100644
--- a/tests/types/entity/test_entities.py
+++ b/tests/types/entity/test_entities.py
@@ -173,56 +173,54 @@ def test_time_entity_grain_not_str_error():
             range={"from": 0, "to": len(body)}, body=body, entity_type="time", grain=0
         )
 
+
 def test_time_entities_with_constraint() -> None:
-    req_time = dt2timestamp(
-        datetime.fromisoformat("2022-03-06T12:00:00.000+05:30")
-    )
+    req_time = dt2timestamp(datetime.fromisoformat("2022-03-06T12:00:00.000+05:30"))
     no_constraint_time = dt2timestamp(
         datetime.fromisoformat("2022-03-06T00:00:00.000+05:30")
     )
     test_constraints = {
-        "time": {
-            "lte": {"hour": 21, "minute": 59},
-            "gte": {"hour": 7, "minute": 0}
-        }
+        "time": {"lte": {"hour": 21, "minute": 59}, "gte": {"hour": 7, "minute": 0}}
     }
     not_time_constraints = {
-        "date":{
+        "date": {
             "start": {"year": 2010, "month": 1, "day": 1},
-            "end": {"year": 2020, "month": 1, "day": 1}
+            "end": {"year": 2020, "month": 1, "day": 1},
         }
     }
     d_multiple = {
-            'body': 'कल 12:00',
-            'start': 0,
-            'value': {
-                'values': [
-                    {
-                        'value': '2022-03-06T00:00:00.000+05:30',
-                        'grain': 'minute',
-                        'type': 'value'
-                    },
-                    {
-                        'value': '2022-03-06T12:00:00.000+05:30',
-                        'grain': 'minute',
-                        'type': 'value'
-                    }
-                ],
-                'value': '2022-03-06T00:00:00.000+05:30',
-                'grain': 'minute',
-                'type': 'value'
-            },
-            'end': 8,
-            'dim': 'time',
-            'latent': False
+        "body": "कल 12:00",
+        "start": 0,
+        "value": {
+            "values": [
+                {
+                    "value": "2022-03-06T00:00:00.000+05:30",
+                    "grain": "minute",
+                    "type": "value",
+                },
+                {
+                    "value": "2022-03-06T12:00:00.000+05:30",
+                    "grain": "minute",
+                    "type": "value",
+                },
+            ],
+            "value": "2022-03-06T00:00:00.000+05:30",
+            "grain": "minute",
+            "type": "value",
+        },
+        "end": 8,
+        "dim": "time",
+        "latent": False,
     }
-    
+
     time_entity = TimeEntity.from_duckling(d_multiple, 1, test_constraints)
-    no_constraint_time_entity = TimeEntity.from_duckling(d_multiple, 1, not_time_constraints)
+    no_constraint_time_entity = TimeEntity.from_duckling(
+        d_multiple, 1, not_time_constraints
+    )
     assert req_time == dt2timestamp(time_entity.get_value())
     assert no_constraint_time == dt2timestamp(no_constraint_time_entity.get_value())
-    
-    
+
+
 def test_time_interval_entity_value_not_dict_error():
     body = "from 4 pm to 12 am"
     with pytest.raises(TypeError):
@@ -476,7 +474,7 @@ def test_numerical_entity_as_time() -> None:
         value="2021-01-04T02:00:00.000+05:30",
         grain="hour",
     )
-    print(numeric_entity.as_time(reference_time, "Asia/Kolkata"))
+
     assert (
         numeric_entity.as_time(reference_time, "Asia/Kolkata").get_value()
         == time_entity.get_value()
diff --git a/tests/utils/test_temperature_scaling.py b/tests/utils/test_temperature_scaling.py
index 2d6ff450..124b0d4a 100644
--- a/tests/utils/test_temperature_scaling.py
+++ b/tests/utils/test_temperature_scaling.py
@@ -1,6 +1,7 @@
 import os
 
 import numpy as np
+import pytest
 import torch
 
 import dialogy.constants as const
@@ -34,14 +35,30 @@ def test_get_metrics():
     assert isinstance(mce, float)
 
 
-def test_save_reliability_graph():
+@pytest.fixture
+def full_path():
     prefix = "test"
     temp_dir = "/tmp"
     graph_name = "reliability_graph"
     full_path = os.path.join(temp_dir, f"{prefix}_{graph_name}.png")
+    yield full_path
+    os.remove(full_path)
+
+
+def mock_save_fig(full_path):
+    def fn(file_path, *args, **kwargs):
+        with open(full_path, "w") as f:
+            f.write("test")
+
+    return fn
+
+
+def test_save_reliability_graph(full_path, mocker):
+    prefix = "test"
+    temp_dir = "/tmp"
+    mocker.patch("matplotlib.pyplot.savefig", mock_save_fig(full_path))
     save_reliability_graph(preds, labels_oneh, temp_dir, prefix)
     assert os.path.exists(full_path)
-    os.remove(full_path)
 
 
 def test_T_scaling():
@@ -53,8 +70,8 @@ def test_T_scaling():
 
 
 def test_fit_ts_parameter():
-    res1 = fit_ts_parameter(logits, labels_list, lr=0, max_iter=1)
-    res2 = fit_ts_parameter(logits, labels_list, lr=0.1, max_iter=1)
+    res1 = fit_ts_parameter(logits, labels_list, lr=0, max_iter=1, device="cpu")
+    res2 = fit_ts_parameter(logits, labels_list, lr=0.1, max_iter=1, device="cpu")
     assert isinstance(res1, float)
     assert isinstance(res2, float)
     assert res1 != res2