Skip to content
message-square

GitHub Action

Rasa NLU Target Files

v1.0.1 Latest version

Rasa NLU Target Files

message-square

Rasa NLU Target Files

A GitHub action to put Rasa NLU data in prescribed target files

Installation

Copy and paste the following snippet into your .yml file.

              

- name: Rasa NLU Target Files

uses: RasaHQ/[email protected]

Learn more about this action in RasaHQ/rasa-nlu-target-files-gha

Choose a version

Rasa NLU Target Files Github Action

This repository contains code to infer and enforce target files for Rasa NLU data. This ensures that data of the same kind and class (e.g. instances of the same synonym) always end up in the same file, making reviewing NLU data changes easier.

It can be used locally or as a Github Action. When used as a Github action, it will enforce an NLU target files config. i.e. it will redistribute your NLU data into the target files you specify.

Locally it can also be used to bootstrap an NLU target file config by inferrring targets from your existing NLU data.

Target File Config

To use this action, you will need a config file that specifies target file paths, by default called target_files.yml. The path for nlu_data_path should be the root of the directory of all your NLU data. The directory can contain other data as well e.g. rules or stories, and these will be ignored.

Use relative paths! Absolute paths will not be applicable across different machines. You can bootstrap a config file by inferring target files locally. You can then update the config file manually to match the target files you want. You may specify keys (i.e. intents, synonyms, etc.) that do not exist yet. They will be ignored unless they appear in your data when you enforce the target file config.

The resulting file should follow this format:

nlu_data_path: <path to root directory of your NLU data>
default_target_files:
  intents: <some default path>
  synonyms: <some default path>
  regexes: <some default path>
  lookups: <some default path>
target_files:
  intents:
    intent1: <specific target file path>
    intent2: <specific target file path>
  synonyms:
    synonym1: <specific target file path>
    synonym2: <specific target file path>
  regexes:
    regex1: <specific target file path>
    regex2: <specific target file path>
  lookups:
    lookup1: <specific target file path>
    lookup2: <specific target file path>

Use as a Github Action

This Github action enforces an NLU target file config. It will redistribute the data according to the config file provided. If an input file has no target data associated with it, the file will be deleted.

Basic usage:

...
  steps:
  - name: Enforce NLU Target Files
    uses: RasaHQ/[email protected]
    with:
      target_files_config: ./target_files.yml

Input arguments

You can set the following options using with in the step running this action. The file specified by target_files_config must exist for the action to run successfully.

Input Description Default
target_files_config The YAML file specifying the target file config. This file can be bootstrapped by running python -m nlu_target_files infer locally. target_files.yml
update_config_file Also update (rewrite) the target_files_config file with any new items found. New items will explicitly be assigned to the default file for their section. Specify true to use. false

Action Output

There are no output parameters returned by this Github Action. It only rewrites NLU data files according to the given config, and updates the config file if update_config_file is specified. Remember to commit the resulting changes in an additional workflow step!

Example Usage

For this action to be effective, your workflow should include steps to run this action and stage and commit any changes made by the action.

For example:

on:
  push: {}

env:
  COMMIT_USERNAME: 'Github Actions'
  COMMIT_EMAIL: '[email protected]'
  DATA_DIRECTORY: 'data'
  TARGET_FILE_CONFIG: 'target_files.yml'
  COMMIT_MESSAGE: 'Github action: enforced NLU target files'

jobs:
  enforce_nlu_target_files:
    runs-on: ubuntu-latest
    name: Target Files
    steps:

    - name: Enforce NLU Target Files
      uses: RasaHQ/[email protected]
      with:
        nlu_target_file_config: ${{ env.TARGET_FILE_CONFIG }}
        update_config_file: true
    - name: Check if changes were made
      id: git_diff
      run: |
        git diff --exit-code
      continue-on-error: true
    - name: Commit changes if any were made
      if: steps.git_diff.outcome=='failure'
      run: |
        git config --global user.name '${{ env.COMMIT_USERNAME }}'
        git config --global user.email '${{ env.COMMIT_EMAIL }}'
        git add '${{ env.DATA_DIRECTORY }}' '${{ env.TARGET_FILE_CONFIG }}'
        git commit -am '${{ env.COMMIT_MESSAGE }}'
        git push

Local Use

To infer NLU target files from your existing Rasa project, run:

python -m nlu_target_files infer --nlu_data_path <PATH_TO_YOUR_NLU_DATA_DIR>

See python -m nlu_target_files infer --help for more options.

To enforce your target file config, run:

python -m nlu_target_files enforce --target_files_config <PATH_TO_YAML_FILE>