> 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 AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/guardrails/_mcp/server.

# nemoguardrails.rails.llm.rails_config_fields

## Module Contents

### Classes

| Name                                                                                 | Description |
| ------------------------------------------------------------------------------------ | ----------- |
| [`RailsConfigField`](#nemoguardrails-rails-llm-rails_config_fields-RailsConfigField) | -           |

### Functions

| Name                                                                                                                       | Description                                                                       |
| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| [`_add_config_field`](#nemoguardrails-rails-llm-rails_config_fields-_add_config_field)                                     | -                                                                                 |
| [`_project_config_fields`](#nemoguardrails-rails-llm-rails_config_fields-_project_config_fields)                           | -                                                                                 |
| [`_reset_rails_config_fields_cache`](#nemoguardrails-rails-llm-rails_config_fields-_reset_rails_config_fields_cache)       | Clear projected config fields so the next read reprojects from the manifests.     |
| [`all_config_fields`](#nemoguardrails-rails-llm-rails_config_fields-all_config_fields)                                     | -                                                                                 |
| [`build_rails_config_data`](#nemoguardrails-rails-llm-rails_config_fields-build_rails_config_data)                         | Build the RailsConfigData model from the projected config fields.                 |
| [`config_exported_names`](#nemoguardrails-rails-llm-rails_config_fields-config_exported_names)                             | -                                                                                 |
| [`config_key_to_rail_name`](#nemoguardrails-rails-llm-rails_config_fields-config_key_to_rail_name)                         | -                                                                                 |
| [`discover_rails_config_fields`](#nemoguardrails-rails-llm-rails_config_fields-discover_rails_config_fields)               | Project the rails.config field specs from the rail manifests once and cache them. |
| [`resolve_config_export`](#nemoguardrails-rails-llm-rails_config_fields-resolve_config_export)                             | -                                                                                 |
| [`validate_no_config_export_shadowing`](#nemoguardrails-rails-llm-rails_config_fields-validate_no_config_export_shadowing) | -                                                                                 |

### Data

[`_EXPORTS`](#nemoguardrails-rails-llm-rails_config_fields-_EXPORTS)

[`_FIELDS`](#nemoguardrails-rails-llm-rails_config_fields-_FIELDS)

[`_discovered`](#nemoguardrails-rails-llm-rails_config_fields-_discovered)

[`_discovering`](#nemoguardrails-rails-llm-rails_config_fields-_discovering)

### API

```python
class nemoguardrails.rails.llm.rails_config_fields.RailsConfigField(
    rail_name: str,
    config_key: str,
    config: nemoguardrails.manifests.config_schema.RailConfigSpec,
    origin: str = ''
)
```

Dataclass

**`config`** `RailConfigSpec`

---

**`config_key`** `str`

---

**`origin`** `str = ''`

---

**`rail_name`** `str`

---

```python
nemoguardrails.rails.llm.rails_config_fields._add_config_field(
    fields: typing.Dict[str, nemoguardrails.rails.llm.rails_config_fields.RailsConfigField],
    exports: typing.Dict[str, typing.Tuple[str, typing.Any]],
    field: nemoguardrails.rails.llm.rails_config_fields.RailsConfigField
) -> None
```

```python
nemoguardrails.rails.llm.rails_config_fields._project_config_fields(
    manifests: typing.Mapping[str, nemoguardrails.manifests.RailManifest],
    include_exports: bool = True
) -> typing.Tuple[typing.Dict[str, nemoguardrails.rails.llm.rails_config_fields.RailsConfigField], typing.Dict[str, typing.Tuple[str, typing.Any]]]
```

```python
nemoguardrails.rails.llm.rails_config_fields._reset_rails_config_fields_cache() -> None
```

Clear projected config fields so the next read reprojects from the manifests.

Test seam only; production never calls this. The in-progress flag is reset too so a
projection aborted by the re-entrancy guard cannot stay latched and poison later reads.

```python
nemoguardrails.rails.llm.rails_config_fields.all_config_fields() -> typing.Dict[str, nemoguardrails.rails.llm.rails_config_fields.RailsConfigField]
```

```python
nemoguardrails.rails.llm.rails_config_fields.build_rails_config_data(
    base: typing.Optional[typing.Type[pydantic.BaseModel]] = None,
    module: str = 'nemoguardrails.rails.llm.c...,
    manifests: typing.Optional[typing.Mapping[str, nemoguardrails.manifests.RailManifest]] = None,
    model_name: str = 'RailsConfigData'
) -> typing.Type[pydantic.BaseModel]
```

Build the RailsConfigData model from the projected config fields.

config.py calls this at import time and bakes the result into a module-level class
and **all**, so the field set cannot be varied by mutating discovery state at runtime.
A test needing a different built-in field set must install substitute manifests, call
the *reset*\* seams, then importlib.reload the config module.

```python
nemoguardrails.rails.llm.rails_config_fields.config_exported_names() -> typing.Tuple[str, ...]
```

```python
nemoguardrails.rails.llm.rails_config_fields.config_key_to_rail_name() -> typing.Dict[str, str]
```

```python
nemoguardrails.rails.llm.rails_config_fields.discover_rails_config_fields() -> None
```

Project the rails.config field specs from the rail manifests once and cache them.

Like discover\_rail\_manifests, the explicit two-flag guard must stay: functools.cache
cannot express the in-progress re-entrancy check.

```python
nemoguardrails.rails.llm.rails_config_fields.resolve_config_export(
    name: str
) -> typing.Any
```

```python
nemoguardrails.rails.llm.rails_config_fields.validate_no_config_export_shadowing(
    existing_names: collections.abc.Collection[str]
) -> None
```

```python
nemoguardrails.rails.llm.rails_config_fields._EXPORTS: Dict[str, Tuple[str, Any]] = {}
```

```python
nemoguardrails.rails.llm.rails_config_fields._FIELDS: Dict[str, RailsConfigField] = {}
```

```python
nemoguardrails.rails.llm.rails_config_fields._discovered = False
```

```python
nemoguardrails.rails.llm.rails_config_fields._discovering = False
```