> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/guardrails/llms.txt.
> For full documentation content, see https://docs.nvidia.com/nemo/guardrails/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/guardrails/_mcp/server.

# nemoguardrails.integrations.langchain.middleware

## Module Contents

### Classes

| Name                                                                                               | Description |
| -------------------------------------------------------------------------------------------------- | ----------- |
| [`GuardrailsMiddleware`](#nemoguardrails-integrations-langchain-middleware-GuardrailsMiddleware)   | -           |
| [`InputRailsMiddleware`](#nemoguardrails-integrations-langchain-middleware-InputRailsMiddleware)   | -           |
| [`OutputRailsMiddleware`](#nemoguardrails-integrations-langchain-middleware-OutputRailsMiddleware) | -           |

### Data

[`log`](#nemoguardrails-integrations-langchain-middleware-log)

### API

```python
class nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware(
    config_path: typing.Optional[str] = None,
    config_yaml: typing.Optional[str] = None,
    raise_on_violation: bool = False,
    blocked_input_message: str = 'I cannot process this requ...,
    blocked_output_message: str = 'I cannot provide this resp...,
    enable_input_rails: bool = True,
    enable_output_rails: bool = True
)
```

**Bases:** `AgentMiddleware`

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware._convert_to_rails_messages(
    messages: typing.List[langchain_core.messages.BaseMessage]
) -> typing.List[typing.Dict[str, typing.Any]]
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware._get_last_ai_message(
    messages: typing.List[langchain_core.messages.BaseMessage]
) -> typing.Optional[langchain_core.messages.AIMessage]
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware._get_last_user_message(
    messages: typing.List[langchain_core.messages.BaseMessage]
) -> typing.Optional[langchain_core.messages.HumanMessage]
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware._handle_guardrail_failure(
    result: nemoguardrails.rails.llm.options.RailsResult,
    rail_type: str,
    blocked_message: str
) -> None
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware._has_input_rails() -> bool
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware._has_output_rails() -> bool
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware._replace_last_ai_message(
    messages: list,
    replacement: langchain_core.messages.AIMessage
) -> list
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware._replace_last_human_message(
    messages: list,
    replacement: langchain_core.messages.HumanMessage
) -> list
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware.aafter_model(
    state: langchain.agents.middleware.types.AgentState,
    runtime: langgraph.runtime.Runtime
) -> typing.Optional[typing.Dict[str, typing.Any]]
```

async

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware.abefore_model(
    state: langchain.agents.middleware.types.AgentState,
    runtime: langgraph.runtime.Runtime
) -> typing.Optional[typing.Dict[str, typing.Any]]
```

async

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware.after_model(
    state: langchain.agents.middleware.types.AgentState,
    runtime: langgraph.runtime.Runtime
) -> typing.Optional[typing.Dict[str, typing.Any]]
```

```python
nemoguardrails.integrations.langchain.middleware.GuardrailsMiddleware.before_model(
    state: langchain.agents.middleware.types.AgentState,
    runtime: langgraph.runtime.Runtime
) -> typing.Optional[typing.Dict[str, typing.Any]]
```

```python
class nemoguardrails.integrations.langchain.middleware.InputRailsMiddleware(
    config_path: typing.Optional[str] = None,
    config_yaml: typing.Optional[str] = None,
    raise_on_violation: bool = False,
    blocked_input_message: str = 'I cannot process this requ...
)
```

**Bases:** [GuardrailsMiddleware](#nemoguardrails-integrations-langchain-middleware-GuardrailsMiddleware)

```python
nemoguardrails.integrations.langchain.middleware.InputRailsMiddleware.aafter_model(
    state: langchain.agents.middleware.types.AgentState,
    runtime: langgraph.runtime.Runtime
) -> typing.Optional[typing.Dict[str, typing.Any]]
```

async

```python
nemoguardrails.integrations.langchain.middleware.InputRailsMiddleware.after_agent(
    state: langchain.agents.middleware.types.AgentState,
    runtime: langgraph.runtime.Runtime
) -> typing.Optional[typing.Dict[str, typing.Any]]
```

```python
class nemoguardrails.integrations.langchain.middleware.OutputRailsMiddleware(
    config_path: typing.Optional[str] = None,
    config_yaml: typing.Optional[str] = None,
    raise_on_violation: bool = False,
    blocked_output_message: str = 'I cannot provide this resp...
)
```

**Bases:** [GuardrailsMiddleware](#nemoguardrails-integrations-langchain-middleware-GuardrailsMiddleware)

```python
nemoguardrails.integrations.langchain.middleware.OutputRailsMiddleware.abefore_model(
    state: langchain.agents.middleware.types.AgentState,
    runtime: langgraph.runtime.Runtime
) -> typing.Optional[typing.Dict[str, typing.Any]]
```

async

```python
nemoguardrails.integrations.langchain.middleware.OutputRailsMiddleware.before_agent(
    state: langchain.agents.middleware.types.AgentState,
    runtime: langgraph.runtime.Runtime
) -> typing.Optional[typing.Dict[str, typing.Any]]
```

```python
nemoguardrails.integrations.langchain.middleware.log = logging.getLogger(__name__)
```