> 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.llm.frameworks.default

## Module Contents

### Classes

| Name                                                                          | Description |
| ----------------------------------------------------------------------------- | ----------- |
| [`DefaultFramework`](#nemoguardrails-llm-frameworks-default-DefaultFramework) | -           |

### Functions

| Name                                                                            | Description |
| ------------------------------------------------------------------------------- | ----------- |
| [`_resolve_api_key`](#nemoguardrails-llm-frameworks-default-_resolve_api_key)   | -           |
| [`_resolve_base_url`](#nemoguardrails-llm-frameworks-default-_resolve_base_url) | -           |

### Data

[`_API_KEY_ENV_VARS`](#nemoguardrails-llm-frameworks-default-_API_KEY_ENV_VARS)

[`_DEFAULT_BASE_URLS`](#nemoguardrails-llm-frameworks-default-_DEFAULT_BASE_URLS)

[`_UNSET`](#nemoguardrails-llm-frameworks-default-_UNSET)

[`log`](#nemoguardrails-llm-frameworks-default-log)

### API

```python
class nemoguardrails.llm.frameworks.default.DefaultFramework()
```

```python
nemoguardrails.llm.frameworks.default.DefaultFramework._get_or_create_client(
    base_url: str,
    api_key: typing.Optional[str],
    timeout: typing.Optional[float],
    connect_timeout: typing.Optional[float],
    max_retries: typing.Optional[int],
    default_headers: typing.Optional[typing.Dict[str, str]],
    default_query: typing.Optional[typing.Dict[str, typing.Any]]
) -> nemoguardrails.llm.clients.openai_compatible.OpenAICompatibleClient
```

```python
nemoguardrails.llm.frameworks.default.DefaultFramework._prepare_azure_kwargs(
    provider_name: str,
    kwargs: typing.Dict[str, typing.Any]
) -> None
```

Reshape kwargs in place for the Azure preset.

Validates Azure-specific inputs (`azure_endpoint` or `base_url`,
`azure_deployment`, `api_version`, `api_key`). Composes the
deployment URL, sets `api-version` in `default_query`, and writes
the `api-key` header so the standard create\_model path can build
the client without an Azure-specific branch.

Sets `kwargs["api_key"] = None` so the standard path does not emit
the `Authorization: Bearer` header. Azure authenticates via the
`api-key` header carried in `default_headers`.

The resource endpoint can be supplied as `azure_endpoint` (preferred,
matches the OpenAI Python SDK) or `base_url` (compatibility alias for
v0.21 LangChain configs). Both accept the same value (a resource-only
URL such as `https://my-resource.openai.azure.com/`); the deployment
path is composed by this preset. Setting both raises an error.

```python
nemoguardrails.llm.frameworks.default.DefaultFramework.aclose() -> None
```

async

Close all pooled HTTP clients and drop them from the pool.

Connection-pool teardown only. Registered providers are kept.
Mirrors `httpx.AsyncClient.aclose()` semantics: an async resource
cleanup hook that releases sockets and TLS sessions back to the OS.

Re-creating models after `aclose` works as expected: the next call
to `create_model` for a given config rebuilds the client.

If any `client.close()` fails, all remaining closes are still
attempted; the first error is re-raised after the pool is cleared.

```python
nemoguardrails.llm.frameworks.default.DefaultFramework.clear_providers() -> None
```

Drop all providers registered via `register_provider`.

Registry teardown only. Pooled HTTP clients are not affected; if
the registered provider classes constructed clients via the
framework, those clients survive in the pool until `aclose()`.

```python
nemoguardrails.llm.frameworks.default.DefaultFramework.create_model(
    model_name: str,
    provider_name: str,
    model_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None
) -> nemoguardrails.types.LLMModel
```

```python
nemoguardrails.llm.frameworks.default.DefaultFramework.get_provider_names() -> typing.List[str]
```

```python
nemoguardrails.llm.frameworks.default.DefaultFramework.register_provider(
    name: str,
    provider_cls: typing.Any
) -> None
```

```python
nemoguardrails.llm.frameworks.default.DefaultFramework.reset() -> None
```

async

Test-only convenience: tear down both pools and providers.

Equivalent to `await fw.aclose(); fw.clear_providers()`. In
production code, prefer the granular methods so connection refresh
doesn't accidentally drop registered providers.

```python
nemoguardrails.llm.frameworks.default._resolve_api_key(
    provider_name: str
) -> typing.Optional[str]
```

```python
nemoguardrails.llm.frameworks.default._resolve_base_url(
    provider_name: str
) -> str
```

```python
nemoguardrails.llm.frameworks.default._API_KEY_ENV_VARS: Dict[str, str] = {'openai': 'OPENAI_API_KEY', 'nim': 'NVIDIA_API_KEY', 'nvidia_ai_endpoints': 'NV...
```

```python
nemoguardrails.llm.frameworks.default._DEFAULT_BASE_URLS: Dict[str, str] = {'openai': 'https://api.openai.com/v1', 'nim': 'https://integrate.api.nvidia.com...
```

```python
nemoguardrails.llm.frameworks.default._UNSET: Any = object()
```

```python
nemoguardrails.llm.frameworks.default.log = logging.getLogger(__name__)
```