How can I extract entity role, entity group from slot

as learning data of nlu.md file,

Give me a [small]{“entity”: “size”, “group”: “1”} pizza with [mushrooms]{“entity”: “topping”, “group”: “1”} and a [large]{“entity”: “size”, “group”: “2”} [pepperoni]{“entity”: “topping”, “group”: “2”}

How can I extract entity role, entity group from tracker slot in knowledge_base?

1 Like

Anyone knows a solution for this? Facing same problem.

Hi @edubrigham

Eg: Give me a [small]{“entity”: “size”, “group”: “1”} pizza with [mushrooms]{“entity”: “topping”, “group”: “1”} and a [large]{“entity”: “size”, “group”: “2”} [pepperoni]{“entity”: “topping”, “group”: “2”}

use

next(tracker.get_latest_entity_values(entity_type=“size”, entity_group=“1”))

For entity_role

Just the change the entity_group to entity_role

Eg:

I am from [USA]{“entity”:“Country”, “role”:“currentlocation”} and want to go to [UK]{“entity”:“Country”, “role”:“destination”}

next(tracker.get_latest_entity_values(entity_type=“Country”, entity_role=“destination”))

2 Likes

Hi Thank you for the help :pray: I’m sorry, but i’m still new to Rasa and i dont know where to adapt the actions to reflect what you wrote. in my nlu.md file i’m declaring training data in the following fashion:

  • how much for [4]{“entity”: “itemQty”, “group”: “1”, “role”: “orderItem1”} [beers]{“entity”: “itemName”, “group”: “1”, “role”: “orderItem1”, “value”: “beer”} and [1]{“entity”: “itemQty”, “group”: “2”, “role”: “orderItem2”} [perrier]{“entity”: “itemName”, “group”: “2”, “role”: “orderItem2”, “value”: “spa red”}
  • what does it cost for [1]{“entity”: “itemQty”, “group”: “1”, “role”: “orderItem1”} [carlsberg]{“entity”: “itemName”, “group”: “1”, “role”: “orderItem1”} + [2]{“entity”: “itemQty”, “group”: “2”, “role”: “orderItem2”} [latte]{“entity”: “itemName”, “group”: “2”, “role”: “orderItem2”} + [2]{“entity”: “itemQty”, “group”: “3”, “role”: “orderItem3”} [pils]{“entity”: “itemName”, “group”: “3”, “role”: “orderItem3”, “value”: “beer”}

To make the link between entities “itemQty” to “itemType”, i declared the same “group” and “role” to differentiate between multiple orders (order1 , order2 , order3 , etc.) I would like to extract the role value of each entity pair (itemQty+itemName from role=orderItem1), and programmatically print out the value pairs.: ex.:

I want 1 coke and 2 Fanta

should print out: `

order1: [1]{“entity”: “itemQty”, “group”: “1”, “role”: “orderItem1”} [coke]{“entity”: “itemName”, “group”: “1”, “role”: “orderItem1”} order2: [2]{“entity”: “itemQty”, “group”: “2”, “role”: “orderItem2”} [Fanta]{“entity”: “itemName”, “group”: “2”, “role”: “orderItem2”}

My actions.py is based on the original formsbot actions.py file, but i adjusted the names of the entities to reflect the entities i am trying to extract.

from typing import Dict, Text, Any, List, Union, Optional

from rasa_sdk import Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.forms import FormAction


class RestaurantForm(FormAction):
    """Example of a custom form action"""

    def name(self) -> Text:
        """Unique identifier of the form"""

        return "restaurant_form"

    @staticmethod
    def required_slots(tracker: Tracker) -> List[Text]:
        """A list of required slots that the form has to fill"""

        return ["itemName", "itemQty", "tableNum", "preferences"]

    def slot_mappings(self) -> Dict[Text, Union[Dict, List[Dict]]]:
        """A dictionary to map required slots to
            - an extracted entity
            - intent: value pairs
            - a whole message
            or a list of them, where a first match will be picked"""

        return {
            "itemName": self.from_entity(entity="itemName", not_intent="chitchat"),
            "itemQty": [
                self.from_entity(
                    entity="itemQty", intent=["itemName_order","say_itemQty_or_tableNum", "ask_unspecified_order"]
                ),
            ],
            "tableNum": [
                self.from_entity(
                    entity="tableNum", intent=["itemName_order", "say_itemQty_or_tableNum", "ask_unspecified_order", "ask_price"]
                ),
            ],
            "preferences": [
                self.from_intent(intent="deny", value="no additional preferences"),
                self.from_text(not_intent="affirm"),
            ],
            "feedback": [self.from_entity(entity="feedback"), self.from_text()],
        }

    # USED FOR DOCS: do not rename without updating in docs
    @staticmethod
    def itemName_db() -> List[Text]:
        """Database of supported itemNames"""

        return [
            "coke",
            "cokes",
            "cola",
            "colas",
            "beers",
            "beer",
            "beers",
            "water",
            "waters",
            "mojito",
        ]

    @staticmethod
    def is_int(string: Text) -> bool:
        """Check if a string is an integer"""

        try:
            int(string)
            return True
        except ValueError:
            return False

    # USED FOR DOCS: do not rename without updating in docs
    def validate_itemName(
        self,
        value: Text,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> Dict[Text, Any]:
        """Validate itemName value."""

        if value.lower() in self.itemName_db():
            # validation succeeded, set the value of the "itemName" slot to value
            return {"itemName": value}
        else:
            dispatcher.utter_message(template="utter_wrong_itemName")
            # validation failed, set this slot to None, meaning the
            # user will be asked for the slot again
            return {"itemName": None}

    def validate_itemQty(
        self,
        value: Text,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> Dict[Text, Any]:
        """Validate itemQty value."""

        if self.is_int(value) and int(value) > 0:
            return {"itemQty": value}
        else:
            dispatcher.utter_message(template="utter_wrong_itemQty")
            # validation failed, set slot to None
            return {"itemQty": None}

    def validate_tableNum(
        self,
        value: Text,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> Dict[Text, Any]:
        """Validate itemQty value."""

        if self.is_int(value) and int(value) > 0:
            return {"tableNum": value}
        else:
            dispatcher.utter_message(template="utter_wrong_tableNum")
            # validation failed, set slot to None
            return {"tableNum": None}

    def submit(
        self,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> List[Dict]:
        """Define what the form has to do
            after all required slots are filled"""

        # utter submit template
        dispatcher.utter_message(template="utter_slots_values")
        return []

Hi @edubrigham,

Define this in your submit method

a = next(tracker.get_latest_entity_values(entity_type="itemQty", 
      entity_group = "1",  entity_role="orderItem1"))
b = next(tracker.get_latest_entity_values(entity_type="itemName", 
    entity_group = "1", entity_role="orderItem1"))

   dispatcher.utter_message(text=a+b)

a = next(tracker.get_latest_entity_values(entity_type="itemQty", 
entity_group = "2",  entity_role="orderItem2"))
b = next(tracker.get_latest_entity_values(entity_type="itemName", 
entity_group = "2",  entity_role="orderItem2"))

   dispatcher.utter_message(text=a+b)

1 Like

I’m pretty sure I’m doing something wrong! I have followed your instructions and adapted the actions.py (4.7 KB) accordingly:

def submit(
        self, dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any]) -> List[Dict]:
        """Define what the form has to do
            after all required slots are filled"""
        a = next(tracker.get_latest_entity_values(entity_type="itemQty", entity_group = "1",  entity_role="orderItem1"))
        b = next(tracker.get_latest_entity_values(entity_type="itemName", entity_group = "1", entity_role="orderItem1"))
        print("Order1", a + b)
        dispatcher.utter_message(text=a+b)

        a = next(tracker.get_latest_entity_values(entity_type="itemQty", entity_group = "2",  entity_role="orderItem2"))
        b = next(tracker.get_latest_entity_values(entity_type="itemName", entity_group = "2",  entity_role="orderItem2"))
        print("Order2", a + b)
        dispatcher.utter_message(text=a+b)

But this is the response from my actions server:

 master ●  rasa run actions -v -vv
2020-05-31 11:58:14 INFO     rasa_sdk.endpoint  - Starting action endpoint server...
2020-05-31 11:58:14 INFO     rasa_sdk.executor  - Registered function for 'restaurant_form'.
2020-05-31 11:58:14 DEBUG    rasa_sdk.utils  - Using the default number of Sanic workers (1).
2020-05-31 12:00:01 DEBUG    rasa_sdk.executor  - Received request to run 'restaurant_form'
2020-05-31 12:00:01 DEBUG    rasa_sdk.forms  - There is no active form
2020-05-31 12:00:01 DEBUG    rasa_sdk.forms  - Activated the form 'restaurant_form'
2020-05-31 12:00:01 DEBUG    rasa_sdk.forms  - No pre-filled required slots to validate.
2020-05-31 12:00:01 DEBUG    rasa_sdk.forms  - Validating user input '{'intent': {'name': 'itemName_order', 'confidence': 1.0}, 'entities': [{'entity': 'itemQty', 'start': 7, 'end': 8, 'role': 'orderItem1', 'group': '1', 'value': '1', 'extractor': 'DIETClassifier'}, {'entity': 'itemName', 'start': 9, 'end': 13, 'role': 'orderItem1', 'group': '1', 'value': 'beer', 'extractor': 'DIETClassifier'}, {'entity': 'itemQty', 'start': 18, 'end': 19, 'role': 'orderItem2', 'group': '2', 'value': '1', 'extractor': 'DIETClassifier'}, {'entity': 'itemName', 'start': 20, 'end': 24, 'role': 'orderItem2', 'group': '2', 'value': 'coke', 'extractor': 'DIETClassifier'}], 'intent_ranking': [{'name': 'itemName_order', 'confidence': 1.0}, {'name': 'deny', 'confidence': 1.3075308835652777e-08}, {'name': 'say_itemQty_or_tableNum', 'confidence': 8.540051332772691e-09}, {'name': 'feedback', 'confidence': 1.0265213123972217e-09}, {'name': 'restart', 'confidence': 4.484710380836532e-10}, {'name': 'ask_unspecified_order', 'confidence': 3.380443147626977e-10}, {'name': 'stop', 'confidence': 2.6472235514773956e-10}, {'name': 'greet', 'confidence': 2.62369348469349e-10}, {'name': 'ask_price', 'confidence': 2.5228685807121565e-10}, {'name': 'preferences', 'confidence': 8.4804066546873e-11}], 'response_selector': {'default': {'response': {'name': None, 'confidence': 0.0}, 'ranking': [], 'full_retrieval_intent': None}}, 'text': 'I want 1 beer and 1 coke'}'
2020-05-31 12:00:01 DEBUG    rasa_sdk.forms  - Extracted '['beer', 'coke']' for extra slot 'itemName'.
2020-05-31 12:00:01 DEBUG    rasa_sdk.forms  - Extracted '['1', '1']' for extra slot 'itemQty'.
2020-05-31 12:00:01 DEBUG    rasa_sdk.forms  - Validating extracted slots: {'itemName': ['beer', 'coke'], 'itemQty': ['1', '1']}
Exception occurred while handling uri: 'http://localhost:5055/webhook'
Traceback (most recent call last):
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/sanic/app.py", line 976, in handle_request
    response = await response
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa_sdk/endpoint.py", line 102, in webhook
    result = await executor.run(action_call)
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa_sdk/executor.py", line 385, in run
    events = await action(dispatcher, tracker, domain)
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa_sdk/forms.py", line 584, in run
    events.extend(await self._validate_if_required(dispatcher, tracker, domain))
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa_sdk/forms.py", line 551, in _validate_if_required
    return await self.validate(dispatcher, tracker, domain)
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa_sdk/forms.py", line 414, in validate
    return await self.validate_slots(slot_values, dispatcher, tracker, domain)
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa_sdk/forms.py", line 371, in validate_slots
    validation_output = validate_func(value, dispatcher, tracker, domain)
  File "/Users/eduardobrigham/Rasa/rasa_EN/actions/actions.py", line 86, in validate_itemName
    if value.lower() in self.itemName_db():
AttributeError: 'list' object has no attribute 'lower'

Thank you :pray: :blush:

Indeed i was doing something stupid! fixed it and now slots get filled:

Chat History

 #    Bot                                                                                                                                                                  You
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 1    action_listen
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 2                         [1]{"entity": "itemQty", "role": "orderItem1", "group": "1"} [coke]{"entity": "itemName", "role": "orderItem1", "group": "1"} and [1]{"entity": "itemQty",
                                                                             "role": "orderItem2", "group": "2"} [beer]{"entity": "itemName", "role": "orderItem2", "group": "2"} pls
                                                                                                                                                          intent: itemName_order 1.00
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 3    restaurant_form
      1coke
      1beer


Current slots:
	feedback: None, itemName: None, itemQty: None, preferences: None, requested_slot: None, tableNum: None

------
2020-05-31 13:15:36 DEBUG    rasa.core.tracker_store  - Recreating tracker for id '1d3b4069cbd241fa96304e98e50719d3

and action server prints:

(venv) (base) rasa run actions -v -vv
2020-05-31 13:15:06 INFO     rasa_sdk.endpoint  - Starting action endpoint server...
2020-05-31 13:15:06 INFO     rasa_sdk.executor  - Registered function for 'restaurant_form'.
2020-05-31 13:15:06 DEBUG    rasa_sdk.utils  - Using the default number of Sanic workers (1).
2020-05-31 13:15:35 DEBUG    rasa_sdk.executor  - Received request to run 'restaurant_form'
Order1 1coke
Order2 1beer
2020-05-31 13:15:35 DEBUG    rasa_sdk.executor  - Finished running 'restaurant_form'
1 Like

I was going to start typing on the error you getting from

anyhow Nice @edubrigham :slight_smile:

1 Like

Hello Chandran it seems i cried victory too soon! It’s definitely working well when I enter order1 AND order2, but I get an error if I just enter 1 intem instead of 2 (ex.:order1):

> I want 1 coke

Rasa action server

2020-05-31 21:21:06 DEBUG    rasa_sdk.executor  - Received request to run 'restaurant_form'
Exception occurred while handling uri: 'http://localhost:5055/webhook'
Traceback (most recent call last):
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa_sdk/executor.py", line 387, in run
    events = action(dispatcher, tracker, domain)
  File "/Users/eduardobrigham/Rasa/rasa_EN/actions/actions.py", line 15, in run
    a = next(tracker.get_latest_entity_values(entity_type="itemQty", entity_group = "1",  entity_role="orderItem1"))
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/sanic/app.py", line 976, in handle_request
    response = await response
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa_sdk/endpoint.py", line 102, in webhook
    result = await executor.run(action_call)
RuntimeError: coroutine raised StopIteration

Rasa interactive --debug

Your input -> I want 1 coke
2020-05-31 21:24:22 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
2020-05-31 21:24:22 DEBUG    rasa.core.processor  - Starting a new session for conversation ID 'f58da8adc1c64dc18546b15324ff4c08'.
2020-05-31 21:24:22 DEBUG    rasa.core.processor  - Action 'action_session_start' ended with events '[<rasa.core.events.SessionStarted object at 0x15ae17950>, <rasa.core.events.ActionExecuted object at 0x15ae17910>]'.
2020-05-31 21:24:22 DEBUG    rasa.core.processor  - Current slot values:
	feedback: None
	itemName: None
	itemQty: None
	preferences: None
	requested_slot: None
	tableNum: None
2020-05-31 21:24:22 DEBUG    rasa.nlu.classifiers.diet_classifier  - There is no trained model for 'ResponseSelector': The component is either not trained or didn't receive enough training data.
2020-05-31 21:24:22 DEBUG    rasa.nlu.selectors.response_selector  - Adding following selector key to message property: default
2020-05-31 21:24:22 DEBUG    rasa.core.processor  - Received user message 'I want 1 coke' with intent '{'name': 'itemName_order', 'confidence': 0.9990455508232117}' and entities '[{'entity': 'itemQty', 'start': 7, 'end': 8, 'value': '1', 'extractor': 'DIETClassifier'}, {'entity': 'itemName', 'start': 9, 'end': 13, 'value': 'coke', 'extractor': 'DIETClassifier'}]'
2020-05-31 21:24:22 DEBUG    rasa.core.processor  - Current slot values:
	feedback: None
	itemName: None
	itemQty: None
	preferences: None
	requested_slot: None
	tableNum: None
2020-05-31 21:24:22 DEBUG    rasa.core.processor  - Logged UserUtterance - tracker now has 4 events.
2020-05-31 21:24:22 DEBUG    rasa.core.lock_store  - Deleted lock for conversation 'f58da8adc1c64dc18546b15324ff4c08'.
2020-05-31 21:24:22 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
? Is the intent 'itemName_order' correct for 'I want [1](itemQty) [coke](itemName)' and are all entities labeled correctly?  Yes
2020-05-31 21:25:02 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
2020-05-31 21:25:02 DEBUG    rasa.core.policies.fallback  - NLU confidence threshold met, confidence of fallback action set to core threshold (0.3).
2020-05-31 21:25:02 DEBUG    rasa.core.policies.memoization  - Current tracker state [None, None, None, {}, {'entity_itemQty': 1.0, 'prev_action_listen': 1.0, 'entity_itemName': 1.0, 'intent_itemName_order': 1.0}]
2020-05-31 21:25:02 DEBUG    rasa.core.policies.memoization  - There is a memorised next action 'utter_greet'
2020-05-31 21:25:02 DEBUG    rasa.core.policies.form_policy  - There is no active form
2020-05-31 21:25:02 DEBUG    rasa.core.policies.ensemble  - Predicted next action using policy_1_MemoizationPolicy
2020-05-31 21:25:02 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
------
Chat History

 #    Bot                                          You
──────────────────────────────────────────────────────────────
 1    action_listen
──────────────────────────────────────────────────────────────
 2                       I want [1](itemQty) [coke](itemName)
                                  intent: itemName_order 1.00


Current slots:
	feedback: None, itemName: None, itemQty: None, preferences: None, requested_slot: None, tableNum: None

------
2020-05-31 21:25:02 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
? The bot wants to run 'utter_greet', correct?  No
2020-05-31 21:25:05 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
------
Chat History

 #    Bot                                          You
──────────────────────────────────────────────────────────────
 1    action_listen
──────────────────────────────────────────────────────────────
 2                       I want [1](itemQty) [coke](itemName)
                                  intent: itemName_order 1.00


Current slots:
	feedback: None, itemName: None, itemQty: None, preferences: None, requested_slot: None, tableNum: None

------
2020-05-31 21:25:05 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
? What is the next action of the bot?  0.00 restaurant_form
Thanks! The bot will now run restaurant_form.

2020-05-31 21:25:09 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
2020-05-31 21:25:09 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
2020-05-31 21:25:09 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
2020-05-31 21:25:09 DEBUG    rasa.core.actions.action  - Calling action endpoint to run action 'restaurant_form'.
2020-05-31 21:25:09 ERROR    rasa.core.processor  - Encountered an exception while running action 'restaurant_form'. Bot will continue, but the actions events are lost. Please check the logs of your action server for more information.
2020-05-31 21:25:09 DEBUG    rasa.core.processor  - Failed to execute custom action.
Traceback (most recent call last):
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa/core/actions/action.py", line 549, in run
    json=json_body, method="post", timeout=DEFAULT_REQUEST_TIMEOUT
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa/utils/endpoints.py", line 154, in request
    response.status, response.reason, await response.content.read()
rasa.utils.endpoints.ClientResponseError: 500, Internal Server Error, body='b'\n    <h1>Internal Server Error</h1>\n    <p>\n        The server encountered an internal error and cannot complete\n        your request.\n    </p>\n''

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa/core/processor.py", line 644, in _run_action
    events = await action.run(output_channel, nlg, tracker, self.domain)
  File "/Users/eduardobrigham/Rasa/venv/lib/python3.7/site-packages/rasa/core/actions/action.py", line 572, in run
    raise Exception("Failed to execute custom action.") from e
Exception: Failed to execute custom action.
2020-05-31 21:25:09 DEBUG    rasa.core.processor  - Action 'restaurant_form' ended with events '[]'.
2020-05-31 21:25:09 DEBUG    rasa.core.processor  - Current slot values:
	feedback: None
	itemName: None
	itemQty: None
	preferences: None
	requested_slot: None
	tableNum: None
2020-05-31 21:25:09 DEBUG    rasa.core.lock_store  - Deleted lock for conversation 'f58da8adc1c64dc18546b15324ff4c08'.
2020-05-31 21:25:09 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
2020-05-31 21:25:09 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
2020-05-31 21:25:09 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
2020-05-31 21:25:09 DEBUG    rasa.core.policies.fallback  - NLU confidence threshold met, confidence of fallback action set to core threshold (0.3).
2020-05-31 21:25:09 DEBUG    rasa.core.policies.memoization  - Current tracker state [None, None, {}, {'entity_itemQty': 1.0, 'prev_action_listen': 1.0, 'entity_itemName': 1.0, 'intent_itemName_order': 1.0}, {'prev_restaurant_form': 1.0, 'entity_itemQty': 1.0, 'entity_itemName': 1.0, 'intent_itemName_order': 1.0}]
2020-05-31 21:25:09 DEBUG    rasa.core.policies.memoization  - There is no memorised next action
2020-05-31 21:25:09 DEBUG    rasa.core.policies.form_policy  - There is no active form
2020-05-31 21:25:09 DEBUG    rasa.core.policies.mapping_policy  - There is no mapped action for the predicted intent, 'itemName_order'.
2020-05-31 21:25:09 DEBUG    rasa.core.policies.ensemble  - Predicted next action using policy_0_FallbackPolicy
2020-05-31 21:25:09 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'f58da8adc1c64dc18546b15324ff4c08'
------
Chat History

 #    Bot                                            You
────────────────────────────────────────────────────────────────
 1    action_listen
────────────────────────────────────────────────────────────────
 2                         I want [1](itemQty) [coke](itemName)
                                    intent: itemName_order 1.00
────────────────────────────────────────────────────────────────
 3    restaurant_form


Current slots:
	feedback: None, itemName: None, itemQty: None, preferences: None, requested_slot: None, tableNum: None

They above works for only 2 items

If you want to work for N itemQty and itemName

use a loop

   entities = tracker.latest_message['entities']
        for e in entities:
            if 'itemQty' in e['entity']:
                a = next(tracker.get_latest_entity_values(
                    entity_type=e['entity'], entity_group=e['group'],  entity_role=e['role']))
                dispatcher.utter_message(a)
           if 'itemName' in e['entity']:
                b = next(tracker.get_latest_entity_values(
                    entity_type=e['entity'], entity_group=e['group'],  entity_role=e['role']))
                dispatcher.utter_message(b)
1 Like

I really appreciate your help Murali. listen, would you be interested in doing some (paid) dev work? it’s not much, and it is quite simple i’m sure, but those very simple tasks take me an enormous amount of time to find out how to do it. I’m sure you can do all that i need in a couple of hours. What do you think :pray::wink:

Sure. But its hourly basis. If you are okay with it.

1 Like

:star_struck:

no problem! I’ll send you an email