Implementing buttons without using OR in story

Hello,

I am trying to restructure my domain to reduce/remove ORs from stories without losing intent ifnromation, as at this moment my model runs out of memory when I try to train.

I have a 16 question questionnaire the user needs to fill out, they answer on a 5-point Likert scale from strongly disagree to strongly agree. To implement this, I’ve used five buttons for each question with five intent payloads. The exact intent does not affect the flow of the conversation as the bot just moves on to the next question, however, I do need to know which exact button the user selected in the action server where I perform some calculations. At the moment, my implementation looks like so:

  - story: q_15
    steps:
      - checkpoint: q_15
      - or:
          - intent: likert_1
          - intent: likert_2
          - intent: likert_3
          - intent: likert_4
          - intent: likert_5
      - action: action_calc_qs
      - action: utter_q_16
      - checkpoint: q_16
 utter_q_1:
    - text: some statement is here 
      buttons:
        - title: Strongly disagree
          payload: /likert_1
        - title: Disagree
          payload: /likert_2
        - title: Neither Agree or Disagree
          payload: /likert_3
        - title: Agree
          payload: /likert_4
        - title: Strongly Agree
          payload: /likert_5
        questionnaire = tracker.get_slot(key="questionnaire")
        intent = tracker.get_intent_of_latest_message()
        question = tracker.latest_action_name

        if "likert_" in intent:
            intent_value = interpret_answer(intent) # transform intent to integer value
            if "q_16" in question:
                questionnaire[15] = intent_value

I cannot think of a way to remove the ORs from the stories without losing the intent information, but training over 16x5 stories looks like it will be impossible, are there any suggestions?

Maybe you can try check the condition and send buttons in custom actions

I’m not seeing others ways to do it :cry:

buttons = []

#append the response of API in the form of title and payload

buttons.append({“title”: ‘any_text’ , “payload”: ‘payload_value’})

#then display it using dispatcher

dispatcher.utter_message(text= “message you want to display” , buttons=buttons)

Ah, thanks! I will try that and update this thread!