For a question for which it is falling under 2-stage fallback and showing buttons, but if without selecting from those options I am again posting a question then it is giving Restart option. The conversation is getting hanged after this Restart button even though if I am clicking on the Restart button.
Rasa Version : 1.3.7
Below is my Action file code :
class ActionDefaultFallback(Action): def name(self) -> Text: return “action_default_fallback”
def run(
self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]
) -> List["Event"]:
# Fallback caused by TwoStageFallbackPolicy
logger.debug(tracker.events)
logger.debug("tracker.events[-4].name = ''%s'", tracker.events[-4].get("name"))
if (
len(tracker.events) >= 4
and tracker.events[-4].get("name") == "action_default_ask_affirmation"
):
dispatcher.utter_template("utter_restart_with_button", tracker)
return [SlotSet("feedback_value", "poor"), ConversationPaused()]
# Fallback caused by Core
else:
dispatcher.utter_template("utter_default", tracker)
return [UserUtteranceReverted()]
class ActionDefaultAskAffirmation(Action): “”“Asks for an affirmation of the intent if NLU threshold is not met.”""
def name(self) -> Text:
return "action_default_ask_affirmation"
def __init__(self) -> None:
import pandas as pd
self.intent_mappings = pd.read_csv("data/" "intent_description_mapping.csv")
self.intent_mappings.fillna("", inplace=True)
self.intent_mappings.entities = self.intent_mappings.entities.map(
lambda entities: {e.strip() for e in entities.split(",")}
)
def run(
self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any],
) -> List["Event"]:
intent_ranking = tracker.latest_message.get("intent_ranking", [])
if len(intent_ranking) > 1:
diff_intent_confidence = intent_ranking[0].get(
"confidence"
) - intent_ranking[1].get("confidence")
if diff_intent_confidence < 0.2:
intent_ranking = intent_ranking[:2]
else:
intent_ranking = intent_ranking[:1]
first_intent_names = [
intent.get("name", "")
for intent in intent_ranking
if intent.get("name", "") != "out_of_scope"
]
message_title = (
"Sorry, I'm not sure I've understood " "you correctly. Do you mean..."
)
entities = tracker.latest_message.get("entities", [])
entities = {e["entity"]: e["value"] for e in entities}
entities_json = json.dumps(entities)
buttons = []
intent_max_count = 4
intent_count = 0
for intent in first_intent_names:
if intent_count < intent_max_count:
intent_count = intent_count + 1
logger.debug(intent)
logger.debug(entities)
buttons.append(
{
"title": self.get_button_title(intent, entities),
"payload": "/{}{}".format(intent, entities_json),
}
)
buttons.append({"title": "Something else", "payload": "/ask_human_handoff"})
dispatcher.utter_button_message(message_title, buttons=buttons)
return []