Use the NeMo Guardrails plugin when you want first-party Guardrails policy around managed NeMo Relay LLM and tool execution through the shared plugin system.
The built-in plugin component has kind nemo_guardrails and is available as a
first-party NeMo Relay plugin.
The plugin is designed around backend modes:
remote
local
nemoguardrails backend.Start here when you need to:
llm.execute(...)
calls.tool_output lane.The current shipped user-facing lane is the built-in remote backend.
That lane supports:
input checks.output checks.tool_output.The current built-in remote backend does not support:
tool_input checks against the stock Guardrails remote contract.local mode.codec = "openai_chat".The NeMo Guardrails plugin model uses two different concepts:
inputoutputtool_outputrequest_defaults.contextrequest_defaults.thread_idrequest_defaults.staterequest_defaults.railsrequest_defaults.llm_paramsrequest_defaults.llm_outputrequest_defaults.output_varsrequest_defaults.logThis distinction matters:
llm.execute(...) and tools.execute(...).request_defaults fields are forwarded to the selected Guardrails backend as
request semantics. They do not create new NeMo Relay-native execution
surfaces.request_defaults can still influence Guardrails behavior, but they do not
give NeMo Relay a new local runtime step to wrap. Relay is passing backend
options along with a request, not creating a new middleware boundary of its
own.request_defaults are also backend-contract dependent. A selected Guardrails
backend can use them when evaluating a request, but the exact effect depends
on what that backend supports. Relay is not creating a separate local
retrieval, dialog, or tool boundary just because those fields exist in the
request.In practice, the tradeoff is:
request_defaults give you backend-level configuration for a request, but
not a separate Relay-owned interception point, runtime boundary, or
middleware surface.Another way to think about it:
request_defaults are notes that NeMo Relay passes to the Guardrails backend
with a request.Top-level tool_input is still part of the built-in plugin contract, but it is
not supported by the current stock-remote backend.
The overlap in names is important:
input is a managed NeMo Relay execution surface.request_defaults.rails.input is a backend pass-through option.output is a managed NeMo Relay execution surface.request_defaults.rails.output is a backend pass-through option.tool_input is part of the built-in plugin model, but the current
stock-remote backend rejects it.request_defaults.rails.tool_input is a backend pass-through option.tool_output is a managed NeMo Relay execution surface.request_defaults.rails.tool_output is a backend pass-through option.In particular, request_defaults.rails.dialog and
request_defaults.rails.retrieval are simple pass-through options. They are
not separate managed middleware surfaces in NeMo Relay.