> This page is for NeMo Relay, version v0.9.4.
> For other versions, use one of these documentation indexes:
> - Latest (v0.10.0) (default): https://docs.nvidia.com/nemo/relay/latest/llms.txt
> - dev: https://docs.nvidia.com/nemo/relay/dev/llms.txt
> - v0.10.0: https://docs.nvidia.com/nemo/relay/v0.10.0/llms.txt
> - v0.9.4: https://docs.nvidia.com/nemo/relay/v0.9.4/llms.txt
> - v0.8.4: https://docs.nvidia.com/nemo/relay/v0.8.4/llms.txt
> - v0.7.3: https://docs.nvidia.com/nemo/relay/v0.7.3/llms.txt
> - v0.6.0: https://docs.nvidia.com/nemo/relay/v0.6.0/llms.txt
> - v0.5.0: https://docs.nvidia.com/nemo/relay/v0.5.0/llms.txt

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

# nemo_relay.llm

> LLM lifecycle helpers for non-streaming and streaming calls.

Generated from `python/nemo_relay/llm.py`.

Module `nemo_relay.llm`.

LLM lifecycle helpers for non-streaming and streaming calls.

## Functions

### `call`

```python
def call(name: str, request: LLMRequest, *, handle: ScopeHandle | None = None, attributes: LLMAttributes | None = None, data: Json | None = None, metadata: Json | None = None, model_name: str | None = None, timestamp: datetime | None = None) -> LLMHandle
```

Start a manual LLM span and return its `LLMHandle`.

### `call_end`

```python
def call_end(handle: LLMHandle, response: Json, *, data: Json | None = None, metadata: Json | None = None, annotated_response: AnnotatedLLMResponse | Mapping[str, Json] | None = None, response_codec: LlmResponseCodec | None = None, timestamp: datetime | None = None) -> None
```

Finish a manual LLM span started by `call()`.

### `execute`

```python
def execute(name: str, request: LLMRequest, func: Callable[[LLMRequest], Json | Awaitable[Json]], *, handle: ScopeHandle | None = None, attributes: LLMAttributes | None = None, data: Json | None = None, metadata: Json | None = None, model_name: str | None = None, codec: LlmCodec | None = None, response_codec: LlmResponseCodec | None = None) -> Awaitable[Json]
```

Run an LLM call through the managed middleware pipeline.

### `stream_execute`

```python
def stream_execute(name: str, request: LLMRequest, func: Callable[[LLMRequest], AsyncIterator[Json]], collector: Callable[[Json], None], finalizer: Callable[[], Json], *, handle: ScopeHandle | None = None, attributes: LLMAttributes | None = None, data: Json | None = None, metadata: Json | None = None, model_name: str | None = None, codec: LlmCodec | None = None, response_codec: LlmResponseCodec | None = None) -> Awaitable[LlmStream]
```

Run a streaming LLM call through the managed middleware pipeline.

### `request_intercepts`

```python
def request_intercepts(name: str, request: LLMRequest) -> LLMRequestInterceptOutcome | Awaitable[LLMRequestInterceptOutcome]
```

Apply global LLM request intercepts to `request`.

### `conditional_execution`

```python
def conditional_execution(request: LLMRequest) -> Awaitable[None] | None
```

Run LLM conditional-execution guardrails for `request`.