nemoguardrails.colang.v1_0.lang.colang_parser

View as Markdown

Module Contents

Classes

NameDescription
ColangParser-

Functions

NameDescription
parse_coflows_to_yml_flowsParses a file in .co format to a YAML flows format.
parse_snippets_and_importsParses snippets and imports from a file.

Data

VALID_MAIN_TOKENS

__all__

API

class nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser(
filename: str,
content: str,
include_source_mapping: bool = False,
snippets: typing.Optional[dict] = None
)
branches
= []
current_indentation
= 0
current_indentations
= []
current_line
= {}
current_line_idx
= 0
current_namespace
= ''
current_namespaces
= []
current_params_indentation
= 1
flows
= {}
ifs
= []
imports
= []
is_interruption_flow
bool = False
is_response_flow
bool = False
lines
= get_numbered_lines(self.content)
main_token
= ''
md_content
= []
mode
= 'colang'
next_line
= {}
symbol_type
= ''
text
= ''
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._check_flow_exists()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._check_ifs_and_branches()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._create_namespace(
namespace
)

create a namespace.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_indentation_levels()

Helper to extract the indentation levels higher than the current line.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_indented_lines()

Helper to extract the indented lines, relative to the current line.

It also needs to take into account if the params should be indented one level or two.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_markdown()

Helper to extract markdown content.

The self.symbol_type and self.symbol_name must be set correctly before calling this.

It will start with the next line, and use it as a reference for the indentation level. As long as the indentation is higher, it will keep parsing the lines as markdown.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_params(
param_lines: typing.Optional[typing.List] = None
)

Helper to parse additional parameters for an element.

We transform the indented lines into valid YAML format. It should end up being a dict and not a list.

:param param_lines: If provided, these lines will be used to extract the params.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._extract_snippet_name()

Helper to extract the name of a snippet. Also updates self.text.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._fetch_current_line()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._ignore_block_body()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._include_source_mappings()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._is_sample_flow()

Returns true if the current flow is a sample one.

NOTE: This will not work correctly if the current position is nested inside another branch like an “if”. But currently, it is meant for test flows, which should be linear.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._is_test_flow()

Returns true if the current flow is a test one.

NOTE: This will not work correctly if the current position is nested inside another branch like an “if”. But currently, it is meant for test flows, which should be linear.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._normalize_line_text()

Applies a series of normalizations for a line of colang.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_any()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_bot()

Parser for the bot X syntax.

The syntax is quite flexible, see example_45.co for various ways.

A meta syntax is the following:

bot <utterance_id>? “sample_utterance”? (with/for param=value)?param=value)? ?param (:|=) value

“sample_utterance_1”? “sample_utterance_2”?

When id and sample utterance is included, an utterance definition is also generated as markdown content.

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_break()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_continue()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_do()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_else_if()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_event()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_generic()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_goto()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_if()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_if_branch(
if_condition
)
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_infer()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_label()

Supports parsing labels, with or without a value.

e.g. label bla label speech hints $hints

nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_meta()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_return()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_run()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_stop()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_user()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_when()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._parse_while()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._process_define()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._record_import()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser._split_inline_params(
value
)
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser.parse()
nemoguardrails.colang.v1_0.lang.colang_parser.ColangParser.parse_snippets_and_imports()

Parses just the snippets and imports from the file.

The data is returned in the format { “snippet_name”: { “name”: “snippet_name”, “params”: [“T”, “A”], “lines”: <numbered lines> } }, [“skill_1”, …]

nemoguardrails.colang.v1_0.lang.colang_parser.parse_coflows_to_yml_flows(
filename: str,
content: str,
include_source_mapping: bool = False,
snippets: typing.Optional[dict] = None
)

Parses a file in .co format to a YAML flows format.

Parameters:

  • filename (str): The name of the file.
  • content (str): The content of the file.
  • include_source_mapping (bool): Whether to include source mapping into the flow elements.
  • snippets (Optional[dict]): Snippets to use when parsing the file.

Returns: The parsed YAML flows.

Example:

filename = "example.co"
content = "..."
flows = parse_coflows_to_yml_flows(filename, content, include_source_mapping=True)

Note:

  • The function uses the ColangParser to convert .co format to YAML flows.
nemoguardrails.colang.v1_0.lang.colang_parser.parse_snippets_and_imports(
filename: str,
content: str
)

Parses snippets and imports from a file.

Parameters:

  • filename (str): The name of the file.
  • content (str): The content of the file.

Returns: A dictionary of snippets and a list of skill names.

Example:

filename = "example.co"
content = "..."
snippets, skills = parse_snippets_and_imports(filename, content)

Note:

  • The function uses the ColangParser to extract snippets and imports.
nemoguardrails.colang.v1_0.lang.colang_parser.VALID_MAIN_TOKENS = ['import', 'include', 'use', 'define', 'when', 'else when', 'user', 'bot', 'even...
nemoguardrails.colang.v1_0.lang.colang_parser.__all__ = ['ColangParser', 'parse_coflows_to_yml_flows', 'parse_snippets_and_imports']