Action server workhsop?

A can master now Rasa NLU but I still struggle with action server even I have some python knowledge. What is the best place to learn about it?

Check out the Rasa Learning Center and Rasa YouTube Channel.

Rasa Actions are regular Python, if you know Python, you know Actions. All the extra stuff is explained in the Action Server Docs.

What are you struggling with specifically?

Thanks for the links, I found this very useful

Mainy I’m struggling with these

           dispatcher: CollectingDispatcher,
           tracker: Tracker,
           domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

How and when to use differesnt SDK actions? Then domain specification, I understand that it takes Dictonary with key as “Text” and data as “Any” and then changes it to List of Dictionaries, but why this is done or needed, I don’t understand?

What do you mean?

It does not change domain to a List of Dictionaries.

Look at the arrow, it is placed AFTER closing the parenthesis, and thus denotes what the run method returns: A List of Dictionaries (or, practically, a list of events that you use like here).

This is just Python type hinting.

Why is this done? (ref)

  1. Helps type checkers: By hinting at what type you want the object to be the type checker can easily detect if, for instance, you’re passing an object with a type that isn’t expected.
  2. Helps with documentation: A third person viewing your code will know what is expected where, ergo, how to use it without getting them TypeErrors.
  3. Helps IDEs develop more accurate and robust tools: Development Environments will be better suited at suggesting appropriate methods when know what type your object is. You have probably experienced this with some IDE at some point, hitting the . and having methods/attributes pop up which aren’t defined for an object.

Why is this needed?

  • They are not needed, you can completely remove them and nothing will change:
    def run(
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any]
    ) -> List[Dict[Text, Any]]:
    is the same as
    def run(self, dispatcher, tracker, domain):

Ok, this helped me very much, thank you. Now I just need to do a few, to learn in practice