use super::{
NemoFlowEventSubscriberCb, NemoFlowFreeFn, NemoFlowJsonCb, NemoFlowLlmConditionalCb,
NemoFlowLlmExecInterceptCb, NemoFlowLlmRequestCb, NemoFlowLlmRequestInterceptCb,
NemoFlowStatus, c_char, c_str_to_string, clear_last_error, core_registry_api,
core_subscriber_api, status_from_error, wrap_event_subscriber, wrap_llm_conditional_fn,
wrap_llm_exec_intercept_fn, wrap_llm_request_intercept_fn, wrap_llm_response_fn,
wrap_llm_sanitize_request_fn, wrap_llm_stream_exec_intercept_fn,
};
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_register_llm_sanitize_request_guardrail(
name: *const c_char,
priority: i32,
cb: NemoFlowLlmRequestCb,
user_data: *mut libc::c_void,
free_fn: NemoFlowFreeFn,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
let wrapped = wrap_llm_sanitize_request_fn(cb, user_data, free_fn);
match core_registry_api::register_llm_sanitize_request_guardrail(&name, priority, wrapped) {
Ok(()) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_deregister_llm_sanitize_request_guardrail(
name: *const c_char,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
match core_registry_api::deregister_llm_sanitize_request_guardrail(&name) {
Ok(_) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_register_llm_sanitize_response_guardrail(
name: *const c_char,
priority: i32,
cb: NemoFlowJsonCb,
user_data: *mut libc::c_void,
free_fn: NemoFlowFreeFn,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
let wrapped = wrap_llm_response_fn(cb, user_data, free_fn);
match core_registry_api::register_llm_sanitize_response_guardrail(&name, priority, wrapped) {
Ok(()) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_deregister_llm_sanitize_response_guardrail(
name: *const c_char,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
match core_registry_api::deregister_llm_sanitize_response_guardrail(&name) {
Ok(_) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_register_llm_conditional_execution_guardrail(
name: *const c_char,
priority: i32,
cb: NemoFlowLlmConditionalCb,
user_data: *mut libc::c_void,
free_fn: NemoFlowFreeFn,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
let wrapped = wrap_llm_conditional_fn(cb, user_data, free_fn);
match core_registry_api::register_llm_conditional_execution_guardrail(&name, priority, wrapped)
{
Ok(()) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_deregister_llm_conditional_execution_guardrail(
name: *const c_char,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
match core_registry_api::deregister_llm_conditional_execution_guardrail(&name) {
Ok(_) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_register_llm_request_intercept(
name: *const c_char,
priority: i32,
break_chain: bool,
cb: NemoFlowLlmRequestInterceptCb,
user_data: *mut libc::c_void,
free_fn: NemoFlowFreeFn,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
let wrapped = wrap_llm_request_intercept_fn(cb, user_data, free_fn);
match core_registry_api::register_llm_request_intercept(&name, priority, break_chain, wrapped) {
Ok(()) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_deregister_llm_request_intercept(
name: *const c_char,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
match core_registry_api::deregister_llm_request_intercept(&name) {
Ok(_) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_register_llm_execution_intercept(
name: *const c_char,
priority: i32,
exec_cb: NemoFlowLlmExecInterceptCb,
exec_user_data: *mut libc::c_void,
exec_free: NemoFlowFreeFn,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
let exec = wrap_llm_exec_intercept_fn(exec_cb, exec_user_data, exec_free);
match core_registry_api::register_llm_execution_intercept(&name, priority, exec) {
Ok(()) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_deregister_llm_execution_intercept(
name: *const c_char,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
match core_registry_api::deregister_llm_execution_intercept(&name) {
Ok(_) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_register_llm_stream_execution_intercept(
name: *const c_char,
priority: i32,
exec_cb: NemoFlowLlmExecInterceptCb,
exec_user_data: *mut libc::c_void,
exec_free: NemoFlowFreeFn,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
let exec = wrap_llm_stream_exec_intercept_fn(exec_cb, exec_user_data, exec_free);
match core_registry_api::register_llm_stream_execution_intercept(&name, priority, exec) {
Ok(()) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_deregister_llm_stream_execution_intercept(
name: *const c_char,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
match core_registry_api::deregister_llm_stream_execution_intercept(&name) {
Ok(_) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_register_subscriber(
name: *const c_char,
cb: NemoFlowEventSubscriberCb,
user_data: *mut libc::c_void,
free_fn: NemoFlowFreeFn,
) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
let wrapped = wrap_event_subscriber(cb, user_data, free_fn);
match core_subscriber_api::register_subscriber(&name, wrapped) {
Ok(()) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn nemo_flow_deregister_subscriber(name: *const c_char) -> NemoFlowStatus {
clear_last_error();
let name = match c_str_to_string(name) {
Ok(s) => s,
Err(status) => return status,
};
match core_subscriber_api::deregister_subscriber(&name) {
Ok(_) => NemoFlowStatus::Ok,
Err(e) => status_from_error(&e),
}
}