nemoguardrails.guardrails.rail_action

View as Markdown

Base class for IORails rail actions.

Defines the template-method pipeline: extract → prompt → respond → parse. Subclasses override individual steps. The base provides three concrete response helpers for the common call patterns (LLM, API, local).

Module Contents

Classes

NameDescription
RailActionBase class for all IORails rail actions.

Data

log

API

class nemoguardrails.guardrails.rail_action.RailAction(
engine_registry: nemoguardrails.guardrails.engine_registry.EngineRegistry,
task_manager: nemoguardrails.llm.taskmanager.LLMTaskManager,
tracer: typing.Optional['Tracer'] = None
)
Abstract

Base class for all IORails rail actions.

Subclasses implement the abstract _-prefixed hooks to customise each stage of the pipeline. The public entry point is :meth:run.

action_name
str
fallback_model
Optional[str] = None
requires_model
bool = True
nemoguardrails.guardrails.rail_action.RailAction._create_prompt(
model_type: typing.Optional[str],
extracted: dict[str, typing.Any]
) -> typing.Any
abstract

Build the prompt / request payload from extracted data.

Returns whatever _get_response needs: a message list, a dict body, etc. May return None if the response step doesn’t need a prompt (e.g. API calls that build their own payload).

nemoguardrails.guardrails.rail_action.RailAction._extract_messages(
messages: nemoguardrails.guardrails.guardrails_types.LLMMessages,
bot_response: typing.Optional[str]
) -> dict[str, typing.Any]
abstract

Extract the relevant fields from messages into a dict.

Returns a dict of extracted values that will be passed to _create_prompt.

nemoguardrails.guardrails.rail_action.RailAction._get_api_response(
api_name: str,
body: dict[str, typing.Any],
kwargs: typing.Any = {}
) -> dict[str, typing.Any]
async

Call an API endpoint via EngineRegistry and return the response dict.

nemoguardrails.guardrails.rail_action.RailAction._get_llm_response(
model_type: typing.Optional[str],
messages: list[dict],
kwargs: typing.Any = {}
) -> nemoguardrails.types.LLMResponse
async

Call an LLM via EngineRegistry and return the structured response.

nemoguardrails.guardrails.rail_action.RailAction._get_local_response(
kwargs: typing.Any = {}
) -> typing.Any
async

Run a local/in-process check. Override in subclasses that need it.

nemoguardrails.guardrails.rail_action.RailAction._get_model_type(
flow: str
) -> typing.Optional[str]

Extract model from the flow’s $model= parameter, falling back to :attr:fallback_model.

nemoguardrails.guardrails.rail_action.RailAction._get_response(
model_type: typing.Optional[str],
prompt: typing.Any
) -> typing.Any
asyncabstract

Call the model/API/local engine and return the raw response.

nemoguardrails.guardrails.rail_action.RailAction._last_user_content(
messages: nemoguardrails.guardrails.guardrails_types.LLMMessages
) -> str
staticmethod

Return the content of the last user message.

nemoguardrails.guardrails.rail_action.RailAction._parse_response(
response: typing.Any
) -> nemoguardrails.guardrails.guardrails_types.RailResult
abstract

Convert the raw response into a RailResult.

nemoguardrails.guardrails.rail_action.RailAction._prompt_to_messages(
prompt: typing.Union[str, list[dict]]
) -> list[dict]
staticmethod

Convert LLMTaskManager render output to role/content message format.

nemoguardrails.guardrails.rail_action.RailAction._validate_flow_name(
base_flow: str | None
) -> None

Verify the flow’s base name matches this action’s action_name.

nemoguardrails.guardrails.rail_action.RailAction.run(
flow: str,
messages: nemoguardrails.guardrails.guardrails_types.LLMMessages,
bot_response: typing.Optional[str] = None
) -> nemoguardrails.guardrails.guardrails_types.RailResult
async

Execute the full rail pipeline and return a safety result.

nemoguardrails.guardrails.rail_action.log = logging.getLogger(__name__)