Migrating from Colang 1 to Colang 2#
The NeMo Guardrails CLI provides a tool (nemoguardrails convert ...) for converting guardrail configurations from Colang 1.0 format to Colang 2.x.
It performs several syntax transformations on the content of the files, such as converting certain keywords and changing the case of certain identifiers.
Warning
There are edge cases not convered by the conversion tool. You should always manually review a guardrail configuration after conversion.
How it Works#
The tool walks through the directory specified by the path argument and applies the transformations to each file ending with .co. The transformations include:
Converting
define flowtoflow.Converting
define subflowtoflow.Converting
define bottoflow bot.Converting
define usertoflow user.Converting
executetoawait.Converting snake_case identifiers after
awaitto CamelCase and append it with key wordActionwhile preserving any arguments used..Converting
else whentoor when.Converting
stoptoabort.Converting quoted strings after
bottobot sayoror bot say.Converting quoted strings after
usertouser saidoror user said.Convert anonymous flows.
Use
activedecorator for root flows (flows that need activation).Add
globalkeyword to global variables.Converting
...to corresponding syntax in Colang 2.
Generation operator#
The syntax for the generation operation has changed slightly between Colang 1.0 and 2.0. The following Colang 1.0 snippet:
# some instruction in natural language
$var_name = ...
It is translated to:
$name = ... "some instruction in natural language"
Generic Matching#
In Colang 1.0 it was possible to use generic matching using user ... and bot ....
These have a different equivalent in Colang 2.0. The ... can no longer be used for matching, only for generation.
The following changes are applied during conversion:
user ...is translated touser said somethingbot ...is translated tobot said something
Rails Configuration#
Colang 1.0 configuration can define certain rails in the rails field.
If rails are defined in
config.ymla_rails.cofile is generated with the rails defined in it.
Example Flow conversion#
As an example, the following flow:
define flow
user express greeting
bot express greeting
is converted to:
@active
flow express_greeting
user express greeting
bot express greeting
Note
It is a convention to use past tense for user flows and present tense for bot flows. However, the migration tool does not enforce this convention.
The tool keeps track of the number of lines processed and the number of changes made in each file. It also counts the total number of files changed.
Warning
The tool modifies the original files. It is recommended to use version control to track the changes made by the tool. It also enables you to see the differences between the original and modified files.
Usage#
To use the conversion tool, use the following command:
nemoguardrails convert --from-version '1.0' "path/to/config"
The convert command has several options:
--from-version: The version of the colang files to migrate from. Available options: [‘1.0’, ‘2.0-alpha’]. Default is1.0.--verboseor--no-verbose: If the migration should be verbose and output detailed logs. Default isno-verbose.--validateor--no-validate: If the migration should validate the output using Colang Parser. Default isno-validate.--use-active-decoratoror--no-use-active-decorator: If the migration should use theactivedecorator. Default isuse-active-decorator.--include-main-flowor--no-include-main-flow: If the migration should add a main flow to the config. Default isinclude-main-flow.
Assumptions and Limitations#
The tool assumes that the input files are correctly formatted. If a file is not correctly formatted, the tool may not work as expected.
The tool uses regular expressions to find and replace certain patterns in the text. If the input files contain text that matches these patterns but should not be replaced, the tool may produce incorrect results.
The tool renames the original files and writes the transformed content to new files with the original names. Use version control to track the changes made by the tool.
The tool does not handle errors that may occur during file reading and writing operations. If an error occurs, the tool logs the error and continues with the next file.
Using characters like
-,+and tokens likeor,and, etc. is not supported in flow definition, the migration tool does not handle this conversion.It is a better practice to define global variables at the beginning of the flow. However, the migration tool does not enforce this.