How can I programmatically change the locale in a Duckling Pipeline with Python?

Trying to change the locale in the Duckling Pipeline so the program can automatically change the locale based on the location that appears in an API. I don’t think I can dynamically change the config file, since I will have to run the rasa train all over again which takes time. Can’t reveal anything else due to the NDA I signed with the company I’m at.

When I check the documentation it seems like you can change the locale via config.yml. Per docs:

- name: "DucklingEntityExtractor"
  # url of the running duckling server
  url: "http://localhost:8000"
  # dimensions to extract
  dimensions: ["time", "number", "amount-of-money", "distance"]
  # allows you to configure the locale, by default the language is
  # used
  locale: "de_DE"
  # if not set the default timezone of Duckling is going to be used
  # needed to calculate dates from relative expressions like "tomorrow"
  timezone: "Europe/Berlin"
  # Timeout for receiving response from http url of the running duckling server
  # if not set the default timeout of duckling http url is set to 3 seconds.
  timeout : 3

You’re right to observe that this is static though.

Looking at the Docker container that hosts Duckling I see a small hint of something that could theoretically help. You could use the same container for different languages via;

$ curl -XPOST --data 'locale=en_GB&text=tomorrow at eight'

This suggests that you might be able to make a custom action, or a custom NLU component, that hooks into the container via this HTTP route.

I think the easiest is to use a custom action to connect to duckling and pass metadata to the rasa API where you can pass the locale you want.

I actually tried creating a custom NLU component, but Rasa’s current API don’t pass the metadata to Rasa NLU’s custom component (see the discussion here)

There is actually an open PR for this ISSUE-2801: Added support for passing dynamic timezone to Duckling component by shaswat-indian · Pull Request #8047 · RasaHQ/rasa · GitHub (or leat tackles some parts of the problem)