Expand description
C FFI layer for NeMo Flow.
This crate exposes the NeMo Flow core runtime as a C-compatible shared library.
It is consumed by the Go bindings via CGo and regenerates the committed
nemo_flow.h header through cbindgen during Cargo builds. All exported
symbols use the nemo_flow_ prefix.
§Middleware Pipeline
When a tool or LLM call is executed end-to-end via the _execute functions,
the runtime applies the following middleware pipeline in order:
- Request intercepts – transform the request before guardrails.
- Sanitize-request guardrails – validate/sanitize the request.
- Conditional-execution guardrails – gate whether the call proceeds.
- Execution intercepts – optionally replace the call implementation.
- Sanitize-response guardrails – validate/sanitize the response.
§Error Handling
Every extern "C" function returns an error::NemoFlowStatus code. On
failure, call error::nemo_flow_last_error on the same thread to retrieve
a human-readable error description. The error is stored in thread-local
storage and is valid until the next FFI call on that thread.
§Memory Ownership
All opaque handles (FfiScopeHandle, FfiToolHandle, FfiLLMHandle, etc.)
are heap-allocated and must be freed through their corresponding
nemo_flow_*_free functions. C strings returned by accessor functions must
be freed with nemo_flow_string_free.
§Modules
api– Top-level FFI entry points (scope, tool, LLM, guardrail, intercept, subscriber, ATIF exporter). Tool calls accept an optionaltool_call_idand LLM calls accept an optionalmodel_namefor ATIF trajectory correlation. ATIF exporter functions (nemo_flow_atif_exporter_*) create, register, export, and clear trajectory data.types– C-compatible struct and enum definitions, plus event accessor functions (nemo_flow_event_input,_output,_model_name,_tool_call_id,_parent_uuid,_scope_type) and theFfiAtifExporteropaque handle.error– Status codes and thread-local error storage.callable– C function pointer typedefs and wrapper functions.convert– JSON and C-string conversion utilities.