class_docstr: Container for data that can be used to describe a conversation turn.
  
  The turn is described by a set of attributes such as e.g. `TEXT`  and  `INTENT`
  when describing a user utterance or e.g. `ACTION_NAME` for describing a bot action.
  The container includes raw information (`self.data`) as well as features
  (`self.features`) for each such attribute.
  Moreover, the message has a timestamp and can keep track about information
  on a specific subset of attributes (`self.output_properties`).
docstr: Splits intent into main intent name and optional sub-intent name.
  
  For example, `"FAQ/how_to_contribute"` would be split into
  `("FAQ", "how_to_contribute")`. The response delimiter can
  take different values (not just `"/"`) and depends on the
  constant - `RESPONSE_IDENTIFIER_DELIMITER`.
  If there is no response delimiter in the intent, the second tuple
  item is `None`, e.g. `"FAQ"` would be mapped to `("FAQ", None)`.
docstr_tok: ["Splits","intent","into","main","intent","name","and","optional","sub-intent","name",".","For","example",",","`","``","FAQ\/how_to_contribute","''","`","would","be","split","into","`","(","``","FAQ","''",",","``","how_to_contribute","''",")","`",".","The","response","delimiter","can","take","different","values","(","not","just","`","``","\/","''","`",")","and","depends","on","the","constant","-","`","RESPONSE_IDENTIFIER_DELIMITER","`",".","If","there","is","no","response","delimiter","in","the","intent",",","the","second","tuple","item","is","`","None","`",",","e.g",".","`","``","FAQ","''","`","would","be","mapped","to","`","(","``","FAQ","''",",","None",")","`","."]
code: def separate_intent_response_key(
      original_intent: Text,
  ) -> Tuple[Text, Optional[Text]]:
      """Splits intent into main intent name and optional sub-intent name.
  
      For example, `"FAQ/how_to_contribute"` would be split into
      `("FAQ", "how_to_contribute")`. The response delimiter can
      take different values (not just `"/"`) and depends on the
      constant - `RESPONSE_IDENTIFIER_DELIMITER`.
      If there is no response delimiter in the intent, the second tuple
      item is `None`, e.g. `"FAQ"` would be mapped to `("FAQ", None)`.
      """
      split_title = original_intent.split(RESPONSE_IDENTIFIER_DELIMITER)
      if len(split_title) == 2:
          return split_title[0], split_title[1]
      elif len(split_title) == 1:
          return split_title[0], None
  
      raise RasaException(
          f"Intent name '{original_intent}' is invalid, "
          f"it cannot contain more than one '{RESPONSE_IDENTIFIER_DELIMITER}'."
      )
  
imports: from typing import Any, Optional, Tuple, Text, Dict, Set, List
  import typing
  import copy
  import rasa.shared.utils.io
  from rasa.shared.exceptions import RasaException
  from rasa.shared.nlu.constants import TEXT, INTENT, RESPONSE, INTENT_RESPONSE_KEY, METADATA, METADATA_INTENT, METADATA_EXAMPLE, ENTITIES, ENTITY_ATTRIBUTE_START, ENTITY_ATTRIBUTE_END, RESPONSE_IDENTIFIER_DELIMITER, FEATURE_TYPE_SENTENCE, FEATURE_TYPE_SEQUENCE, ACTION_TEXT, ACTION_NAME, TEXT_TOKENS
  from rasa.shared.constants import DIAGNOSTIC_DATA
label_desc: Use image node_id 13 for calling the Message obj's underlying member method code with example usage: obj.separate_intent_response_key(original_intent) and returns: split_title,  split_title, split_title,  None