For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
  • About NVIDIA NeMo Relay
    • Overview
    • Architecture
    • Ecosystem
    • Concepts
    • Release Notes
  • Getting Started
    • Agent Runtime Primer
    • Prerequisites
    • Installation
    • Configuration / Setup
    • Quick Start
  • NVIDIA NeMo Relay CLI
    • About
    • Basic Usage
    • Claude Code
    • Codex
    • Cursor
    • Hermes Agent
  • Supported Integrations
    • About
    • OpenClaw Plugin Guide
    • LangChain Integration Guide
    • LangGraph Integration Guide
    • Deep Agents Integration Guide
  • Instrument Applications
    • About
    • Adding Scopes and Marks
    • Instrument a Tool Call
    • Instrument an LLM Call
    • Add Middleware
    • Code Examples
  • Observability Plugin
    • About
    • Configuration
    • Agent Trajectory Interchange Format (ATIF)
    • Agent Trajectory Observability Format (ATOF)
    • OpenTelemetry
    • OpenInference
  • Adaptive Plugin
    • About
    • Configuration
    • Adaptive Cache Governor (ACG)
    • Adaptive Hints
  • NeMo Guardrails Plugin
    • About
    • Configuration
  • Integrate into Frameworks
    • About
    • Adding Scopes
    • Wrap Tool Calls
    • Wrap LLM Calls
    • Handle Non-Serializable Data
    • Using Codecs
    • Provider Codecs
    • Provider Response Codecs
    • Code Examples
  • Build Plugins
    • About
    • Define a Plugin
    • Validate Plugin Configuration
    • Plugin Configuration Files
    • Register Plugin Behavior
    • Design Plugin Configuration
    • NeMo Guardrails Example Plugin
    • Code Examples
  • Contribute
    • About
    • Development Setup
    • Workflow and Reviews
    • Testing and Documentation
  • Reference
    • APIs
      • Python Library Reference
      • Node.js Library Reference
      • Rust Library Reference
        • nemo-relay
        • nemo-relay-adaptive
        • nemo-relay-ffi
          • api
          • callable
            • wrap_codec_fn
            • wrap_collector_fn
            • wrap_event_subscriber
            • wrap_finalizer_fn
            • wrap_json_fn
            • wrap_llm_conditional_fn
            • wrap_llm_exec_fn
            • wrap_llm_exec_intercept_fn
            • wrap_llm_request_intercept_fn
            • wrap_llm_response_fn
            • wrap_llm_sanitize_request_fn
            • wrap_llm_stream_exec_fn
            • wrap_llm_stream_exec_intercept_fn
            • wrap_tool_conditional_fn
            • wrap_tool_exec_fn
            • wrap_tool_exec_intercept_fn
            • wrap_tool_request_intercept_fn
            • wrap_tool_sanitize_fn
            • NemoRelayCodecDecodeCb
            • NemoRelayCodecDecodeFn
            • NemoRelayCodecEncodeCb
            • NemoRelayCodecEncodeFn
            • NemoRelayCollectorCb
            • NemoRelayEventSubscriberCb
            • NemoRelayFinalizerCb
            • NemoRelayFreeFn
            • NemoRelayJsonCb
            • NemoRelayLlmConditionalCb
            • NemoRelayLlmExecCb
            • NemoRelayLlmExecInterceptCb
            • NemoRelayLlmExecNextFn
            • NemoRelayLlmRequestCb
            • NemoRelayLlmRequestInterceptCb
            • NemoRelayPluginRegisterCb
            • NemoRelayPluginValidateCb
            • NemoRelayToolConditionalCb
            • NemoRelayToolExecCb
            • NemoRelayToolExecInterceptCb
            • NemoRelayToolExecNextFn
            • NemoRelayToolSanitizeCb
          • convert
          • error
          • types
    • Performance
  • Resources
    • Support and FAQs
    • Glossary
    • Troubleshooting Guide
    • Community
    • Legal
NVIDIANVIDIA
Developer-friendly docs for your API
Privacy Policy | Your Privacy Choices | Terms of Service | Accessibility | Corporate Policies | Product Security | Contact

Copyright © 2026, NVIDIA Corporation.

LogoLogo
On this page
  • Functions
  • Type Aliases
ReferenceAPIsRust Library Referencenemo-relay-ffi

Module callable

||View as Markdown|
Previous

Function nemo_relay_validate_plugin_config

Next

Function wrap_codec_fn

Generated from cargo doc --no-deps -p nemo-relay -p nemo-relay-adaptive -p nemo-relay-ffi.

C function pointer typedefs and wrapper functions for FFI callbacks.

This module defines the callback signatures used by the C API for tool and LLM guardrails, intercepts, execution functions, and event subscribers. Each pub type alias corresponds to a C function pointer that appears in the generated nemo_relay.h header.

The wrap_* functions convert C callbacks (with opaque user_data pointers) into Rust closures that the core runtime can invoke. Registry-stored callbacks return Arc-backed closures, while one-shot or mutable callback shapes remain boxed. Each wrapper captures the user data and its optional free function in an Arc<UserData> so the closure is Send + Sync and the free function is called exactly once when all references are dropped.

Functions

  • wrap_codec_fn: Wrap a pair of C codec callbacks into an Arc<dyn LlmCodec>.
  • wrap_collector_fn: Wrap a C collector callback into a Box<dyn FnMut(Json) -> Result<()> + Send> for use by the core runtime. Each intercepted chunk Json is serialized to a JSON string and passed to the callback.
  • wrap_event_subscriber: Wrap a C event subscriber callback into a Rust closure.
  • wrap_finalizer_fn: Wrap a C finalizer callback into a Box<dyn FnOnce() -> Json + Send> for use by the core runtime. The callback is invoked exactly once when the stream is exhausted. The returned C string is parsed as JSON and then freed.
  • wrap_json_fn: Wrap a generic C JSON callback into a Rust closure.
  • wrap_llm_conditional_fn: Wrap a C LLM conditional callback into a Rust closure.
  • wrap_llm_exec_fn: Wrap a C LLM execution callback into an async Rust closure. The C callback receives an LlmRequest serialized as a JSON string.
  • wrap_llm_exec_intercept_fn: Wrap a C LLM execution intercept callback into an Arc<dyn Fn(LlmRequest, LlmExecutionNextFn) -> ...>.
  • wrap_llm_request_intercept_fn: Wrap a C LLM request intercept callback (annotated-aware) into a Rust LlmRequestInterceptFn closure. The callback receives the intercept name, the opaque FfiLLMRequest, and the annotated JSON (or null). It writes the transformed request and annotated JSON to output pointers.
  • wrap_llm_response_fn: Wrap a C JSON callback into a Fn(Json) -> Json closure for LLM response sanitization. The callback receives the response as a JSON string and returns the (possibly modified) JSON string.
  • wrap_llm_sanitize_request_fn: Wrap a C LLM request sanitize callback into a Rust closure.
  • wrap_llm_stream_exec_fn: Wrap a C LLM execution callback into an async Rust closure that returns a stream. The C callback returns the full response as a single JSON string, which is emitted as a single-item stream of Json values.
  • wrap_llm_stream_exec_intercept_fn: Wrap a C LLM stream execution intercept callback. Since the C callback returns a single string (not a real stream), this wraps it as a single-item stream, same as wrap_llm_stream_exec_fn.
  • wrap_tool_conditional_fn: Wrap a C tool conditional callback into a Rust closure for use by the core runtime.
  • wrap_tool_exec_fn: Wrap a C tool execution callback into an async Rust closure.
  • wrap_tool_exec_intercept_fn: Wrap a C tool execution intercept callback into an Arc<dyn Fn(Json, ToolExecutionNextFn) -> ...>.
  • wrap_tool_request_intercept_fn: Wrap a C tool request intercept callback into a Rust closure for use by the core runtime.
  • wrap_tool_sanitize_fn: Wrap a C tool sanitize callback into a Rust closure for use by the core runtime.

Type Aliases

  • NemoRelayCodecDecodeCb: Callback for Codec decode: translates an opaque FfiLLMRequest into an AnnotatedLLMRequest JSON string. Returns a heap-allocated C string on success, or null on error (after setting the last error message).
  • NemoRelayCodecDecodeFn: Nullable version of NemoRelayCodecDecodeCb for use as an optional parameter in FFI execute functions. Pass null to indicate no codec.
  • NemoRelayCodecEncodeCb: Callback for Codec encode: merges structured changes back into opaque request content. Receives the annotated request as a JSON C string and the original FfiLLMRequest. Returns a heap-allocated JSON C string representing the new LlmRequest content on success, or null on error.
  • NemoRelayCodecEncodeFn: Nullable version of NemoRelayCodecEncodeCb for use as an optional parameter in FFI execute functions. Pass null to indicate no codec.
  • NemoRelayCollectorCb: Callback for collecting intercepted stream chunks. Invoked with each chunk (after stream execution intercepts have been applied) as a null-terminated C string. The string is only valid for the duration of the call.
  • NemoRelayEventSubscriberCb: Callback for event subscribers. Invoked on each lifecycle event emitted by the runtime. The FfiEvent pointer is only valid for the duration of the call.
  • NemoRelayFinalizerCb: Callback for finalizing a collected stream. Invoked once when the stream is exhausted. Must return a JSON C string representing the aggregated response. The returned string must be allocated with malloc or equivalent; the runtime will free it.
  • NemoRelayFreeFn: Optional destructor for user data passed to callbacks. Called when the runtime no longer needs the associated callback.
  • NemoRelayJsonCb: Generic JSON-to-JSON callback, used for LLM response sanitization and intercepts. The returned string must be allocated with malloc or equivalent.
  • NemoRelayLlmConditionalCb: Callback for LLM conditional execution guardrails. Returns NULL to allow execution, or an error message string to reject.
  • NemoRelayLlmExecCb: Callback for LLM execution (default callable). Receives a native JSON C string, returns the response as a JSON C string.
  • NemoRelayLlmExecInterceptCb: Callback for LLM execution intercepts with middleware chain support. Receives native JSON C string plus a next callback and its context.
  • NemoRelayLlmExecNextFn: Runtime-provided “next” callback for LLM execution middleware chain. Takes a native JSON C string, returns a response JSON C string.
  • NemoRelayLlmRequestCb: Callback for LLM request sanitization. Receives an FfiLLMRequest and returns a new (possibly modified) FfiLLMRequest. Return null to use defaults.
  • NemoRelayLlmRequestInterceptCb: C callback type for LLM request intercepts with unified annotated-aware signature. Receives the intercept name, the opaque FfiLLMRequest, and optionally the annotated request as a JSON C string (null if no Codec resolved). Writes transformed outputs to out_request and out_annotated_json. Returns NemoRelayStatus.
  • NemoRelayPluginRegisterCb: Callback for plugin registration. Receives plugin config JSON and a plugin context pointer that is only valid for the duration of the call.
  • NemoRelayPluginValidateCb: Callback for plugin validation. Receives plugin config JSON and returns a JSON array of diagnostics.
  • NemoRelayToolConditionalCb: Callback for tool conditional execution guardrails. Receives tool name and arguments as JSON. Returns NULL to allow execution, or an error message string to reject.
  • NemoRelayToolExecCb: Callback for tool execution (default callable). Receives arguments as JSON, returns result as JSON. The returned string must be allocated with malloc or equivalent.
  • NemoRelayToolExecInterceptCb: Callback for tool execution intercepts. Receives arguments as JSON plus a next callback and its context. Call next_fn(args, next_ctx) to invoke the next layer in the middleware chain, or return directly to short-circuit.
  • NemoRelayToolExecNextFn: Runtime-provided “next” callback for tool execution middleware chain. Call this from an intercept to invoke the next layer (or original function). next_ctx is an opaque pointer managed by the runtime.
  • NemoRelayToolSanitizeCb: Callback for tool request/response sanitization guardrails and intercepts. Receives tool name and arguments as JSON, returns sanitized arguments as JSON. The returned string must be allocated with malloc or equivalent.