class_docstr: `UnexpecTEDIntentPolicy` has the same model architecture as `TEDPolicy`.
  
  The difference is at a task level.
  Instead of predicting the next probable action, this policy
  predicts whether the last predicted intent is a likely intent
  according to the training stories and conversation context.
class_docstr_tok: ["`","UnexpecTEDIntentPolicy","`","has","the","same","model","architecture","as","`","TEDPolicy","`",".","The","difference","is","at","a","task","level",".","Instead","of","predicting","the","next","probable","action",",","this","policy","predicts","whether","the","last","predicted","intent","is","a","likely","intent","according","to","the","training","stories","and","conversation","context","."]
docstr: Collects metadata to be attached to the predicted action.
  
  Metadata schema looks like this:
  
  {
      "query_intent": <metadata of intent that was queried>,
      "ranking": <sorted list of metadata corresponding to all intents
                  (truncated by `ranking_length` parameter)
                  It also includes the `query_intent`.
                  Sorting is based on predicted similarities.>
  }
  
  Each metadata dictionary looks like this:
  
  {
      "name": <name of intent>,
      "score": <predicted similarity score>,
      "threshold": <threshold used for intent>,
      "severity": <numerical difference between threshold and score>
  }
  
  Args:
      domain: Domain of the assistant.
      similarities: Predicted similarities for each intent.
      query_intent: Name of intent queried in this round of inference.
  
  Returns:
      Metadata to be attached.
docstr_tok: ["Collects","metadata","to","be","attached","to","the","predicted","action",".","Metadata","schema","looks","like","this",":","{","``","query_intent","''",":","<","metadata","of","intent","that","was","queried",">",",","``","ranking","''",":","<","sorted","list","of","metadata","corresponding","to","all","intents","(","truncated","by","`","ranking_length","`","parameter",")","It","also","includes","the","`","query_intent","`",".","Sorting","is","based","on","predicted","similarities.",">","}","Each","metadata","dictionary","looks","like","this",":","{","``","name","''",":","<","name","of","intent",">",",","``","score","''",":","<","predicted","similarity","score",">",",","``","threshold","''",":","<","threshold","used","for","intent",">",",","``","severity","''",":","<","numerical","difference","between","threshold","and","score",">","}","Args",":","domain",":","Domain","of","the","assistant",".","similarities",":","Predicted","similarities","for","each","intent",".","query_intent",":","Name","of","intent","queried","in","this","round","of","inference",".","Returns",":","Metadata","to","be","attached","."]
code: def _collect_action_metadata(
      self, domain: Domain, similarities: np.ndarray, query_intent: Text
  ) -> UnexpecTEDIntentPolicyMetadata:
      """Collects metadata to be attached to the predicted action.
  
      Metadata schema looks like this:
  
      {
          "query_intent": <metadata of intent that was queried>,
          "ranking": <sorted list of metadata corresponding to all intents
                      (truncated by `ranking_length` parameter)
                      It also includes the `query_intent`.
                      Sorting is based on predicted similarities.>
      }
  
      Each metadata dictionary looks like this:
  
      {
          "name": <name of intent>,
          "score": <predicted similarity score>,
          "threshold": <threshold used for intent>,
          "severity": <numerical difference between threshold and score>
      }
  
      Args:
          domain: Domain of the assistant.
          similarities: Predicted similarities for each intent.
          query_intent: Name of intent queried in this round of inference.
  
      Returns:
          Metadata to be attached.
      """
      query_intent_index = domain.intents.index(query_intent)
  
      def _compile_metadata_for_label(
          label_name: Text,
          similarity_score: float,
          threshold: Optional[float],
      ) -> RankingCandidateMetadata:
          severity = (
              float(threshold - similarity_score) if threshold else None
          )
          return RankingCandidateMetadata(
              label_name,
              float(similarity_score),
              float(threshold) if threshold else None,
              severity,
          )
  
      query_intent_metadata = _compile_metadata_for_label(
          query_intent,
          similarities[0][domain.intents.index(query_intent)],
          self.label_thresholds.get(query_intent_index),
      )
  
      # Ranking in descending order of predicted similarities
      sorted_similarities = sorted(
          [
              (index, similarity)
              for index, similarity in enumerate(similarities[0])
          ],
          key=lambda x: -x[1],
      )
  
      if self.config[RANKING_LENGTH] > 0:
          sorted_similarities = sorted_similarities[
              : self.config[RANKING_LENGTH]
          ]
  
      ranking_metadata = [
          _compile_metadata_for_label(
              domain.intents[intent_index],
              similarity,
              self.label_thresholds.get(intent_index),
          )
          for intent_index, similarity in sorted_similarities
      ]
  
      return UnexpecTEDIntentPolicyMetadata(
          query_intent_metadata, ranking_metadata
      )
  
imports: import dataclasses
  import logging
  from pathlib import Path
  from typing import Any, List, Optional, Text, Dict, Type, Union
  import numpy
  import tensorflow
  import rasa.utils.common
  from rasa.engine.graph import ExecutionContext
  from rasa.engine.recipes.default_recipe import DefaultV1Recipe
  from rasa.engine.storage.resource import Resource
  from rasa.engine.storage.storage import ModelStorage
  from rasa.nlu.classifiers import LABEL_RANKING_LENGTH
  from rasa.shared.nlu.training_data.features import Features
  from rasa.shared.core.domain import Domain
  from rasa.shared.core.trackers import DialogueStateTracker
  from rasa.shared.core.constants import SLOTS, ACTIVE_LOOP, ACTION_UNLIKELY_INTENT_NAME
  from rasa.shared.core.events import UserUttered, ActionExecuted
  from rasa.shared.nlu.constants import INTENT, TEXT, ENTITIES, ACTION_NAME, SPLIT_ENTITIES_BY_COMMA, SPLIT_ENTITIES_BY_COMMA_DEFAULT_VALUE
  from rasa.nlu.extractors.extractor import EntityTagSpec
  from rasa.core.featurizers.precomputation import MessageContainerForCoreFeaturization
  from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
  from rasa.core.featurizers.tracker_featurizers import IntentMaxHistoryTrackerFeaturizer
  from rasa.core.featurizers.single_state_featurizer import IntentTokenizerSingleStateFeaturizer
  from rasa.shared.core.generator import TrackerWithCachedStates
  from rasa.core.constants import DIALOGUE, POLICY_MAX_HISTORY, POLICY_PRIORITY, UNLIKELY_INTENT_POLICY_PRIORITY
  from rasa.core.policies.policy import PolicyPrediction
  from rasa.core.policies.ted_policy import LABEL_KEY, LABEL_SUB_KEY, TEDPolicy, TED, SEQUENCE_LENGTH, SEQUENCE, PREDICTION_FEATURES
  from rasa.utils import train_utils
  from rasa.utils.tensorflow.models import RasaModel
  from rasa.utils.tensorflow.constants import LABEL, DENSE_DIMENSION, ENCODING_DIMENSION, UNIDIRECTIONAL_ENCODER, TRANSFORMER_SIZE, NUM_TRANSFORMER_LAYERS, NUM_HEADS, BATCH_SIZES, BATCH_STRATEGY, EPOCHS, RANDOM_SEED, RANKING_LENGTH, LOSS_TYPE, SIMILARITY_TYPE, NUM_NEG, EVAL_NUM_EXAMPLES, EVAL_NUM_EPOCHS, REGULARIZATION_CONSTANT, SCALE_LOSS, EMBEDDING_DIMENSION, DROP_RATE_DIALOGUE, DROP_RATE_LABEL, DROP_RATE, DROP_RATE_ATTENTION, CONNECTION_DENSITY, KEY_RELATIVE_ATTENTION, VALUE_RELATIVE_ATTENTION, MAX_RELATIVE_POSITION, INNER, BALANCED, TENSORBOARD_LOG_DIR, TENSORBOARD_LOG_LEVEL, CHECKPOINT_MODEL, FEATURIZERS, ENTITY_RECOGNITION, IGNORE_INTENTS_LIST, BILOU_FLAG, LEARNING_RATE, CROSS_ENTROPY, SPARSE_INPUT_DROPOUT, DENSE_INPUT_DROPOUT, MASKED_LM, HIDDEN_LAYERS_SIZES, CONCAT_DIMENSION, TOLERANCE, LABEL_PAD_ID, POSITIVE_SCORES_KEY, NEGATIVE_SCORES_KEY, USE_GPU
  from rasa.utils.tensorflow import layers
  from rasa.utils.tensorflow.model_data import RasaModelData, FeatureArray, Data
  import rasa.utils.io
  from rasa.core.exceptions import RasaCoreException
  from rasa.shared.utils import common
label_desc: Use image node_id 12 for calling the UnexpecTEDIntentPolicy obj's underlying member method code with example usage: obj._collect_action_metadata(domain, similarities, query_intent) and returns: UnexpecTEDIntentPolicyMetadata, RankingCandidateMetadata