Working with LUIS^Teneo

The concept of LUIS^Teneo is to handle the core of the language understanding in Microsoft LUIS and then fine-tune and further improve it and also handle the conversation in Teneo.

This page will describe in depth on how LUIS^Teneo works and how to think using this approach.


In the general workflow for a LUIS^Teneo setup, language understanding is handled in LUIS in the form of Intents and Entities, which are then used in a Teneo solution to be combined with the powerful features of Teneo. These include the Linguistic Modeling Language, out-of-the-box linguistic building blocks, and context match requirements, to name a few. In other words, language understanding is further finetuned and improved, ultimately giving you both the power of machine learning and the precision and linguistic scalability of linguistic conditions.


While working with intents we need to:

  • Modify the Intents in your LUIS application.
  • Train and Publish the LUIS application to the staging slot.
  • Make sure an intent provided by LUIS triggers the appropriate flow in Teneo. This is done by setting the name of the intent as written in LUIS in the field in a class trigger in Teneo.

To align with required format for Teneo class names, upper-case your intent names and use underscores instead of spaces. For example, Hello world should be named HELLO_WORLD. Any intents with other names will automatically be renamed by the LuisPredict groovy script. You can read ore about class names in our Documentation


We can easily consume entities from LUIS in Teneo. Entities are annotated in inputs and can be picked up using either listeners or through attached scripts. It is also possible to use Data Actions and Match Requirements You can read more about how to do this here or learn more about doing this with LUIS entities here.

The 'LuisPredict' groovy script will annotate LUIS entities like this: LUIS_ENTITY_NAME.ENTITY (for example, the prebuilt LUIS entity 'geographyv2' will be annotated as LUIS_GEOGRAPHYV2.ENTITY.)

The LUIS entities also coexist with the extensive entity support in Teneo where the user has to opportunity to get the best of two worlds.


Any changes made in the LUIS application need to be trained and published before being used in Teneo.
The 'LuisPredict' groovy script will automatically decide between the staging and production slot in LUIS.
Only production publishing targets in Teneo will use the production slot in LUIS and all others will call the staging slot.

The LuisPredict groovy script

The LuisPredict.groovy is responsible for:

  • Taking the users input.
  • Sending it to LUIS.
  • Parsing the results.
  • Adding annotations in Teneo for Intents and Entities.

The call to LUIS is set up to always log utterances in LUIS which is useful for development. For production use cases, we may want to apply other reasoning and only log when the LUIS^Teneo solution is deployed in production.

A detailed guide on how to use the LuisPredict script in your solution is available in Your first LUIS^Teneo solution.

Where to go next?

Here is a gentle introduction to your first LUIS^Teneo solution.

Was this page helpful?