> This page is for NeMo Relay, version v0.7.3.
> For other versions, use one of these documentation indexes:
> - Latest (v0.10.4) (default): https://docs.nvidia.com/nemo/relay/latest/llms.txt
> - dev: https://docs.nvidia.com/nemo/relay/dev/llms.txt
> - v0.11.0: https://docs.nvidia.com/nemo/relay/v0.11.0/llms.txt
> - v0.10.4: https://docs.nvidia.com/nemo/relay/v0.10.4/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

> 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.

# Function tool_call_end

> Finish a manual tool lifecycle span.

Generated from `cargo doc --no-deps -p nemo-relay -p nemo-relay-adaptive -p nemo-relay-pii-redaction -p nemo-relay-ffi -p nemo-relay-types -p nemo-relay-plugin -p nemo-relay-worker-proto -p nemo-relay-worker`.

<pre />

Finish a manual tool lifecycle span.

This submits a tool-end event for queued sanitization and publication for a handle previously returned by [`tool_call`](/reference/api/rust-library-reference/nemo-relay/api/tool/fn-tool-call).

## Parameters

* `handle`: Tool handle to close.
* `result`: Raw tool result associated with the end event.
* `data`: Optional application payload retained for compatibility. The emitted end event data is the sanitized `result` unless it sanitizes to JSON null, in which case this payload is used.
* `metadata`: Optional JSON metadata recorded on the end event.
* `timestamp`: Optional timestamp recorded on the emitted end event. When `None`, the runtime uses the current UTC time, or one microsecond after the handle start time if the current time is not later.

## Returns

A [`Result`](/reference/api/rust-library-reference/nemo-relay/error/type-result) that is `Ok(())` when the end-event snapshot has been submitted for queued publication.

## Errors

Returns an error when the runtime owner check fails or when internal state cannot be read safely. Dispatcher submission failures are logged because observability publication is best effort.

## Notes

Sanitize-response guardrails affect only the emitted end-event payload, not the caller-owned `result` value. If a sanitizer errors or panics, Relay omits that observability payload and does not run remaining sanitizers.