#![allow(dead_code)]
use std::ffi::c_char;
use std::path::PathBuf;
use blazen_llm::compute::{
BackgroundRemovalRequest as InnerBackgroundRemovalRequest, ImageRequest as InnerImageRequest,
MusicRequest as InnerMusicRequest, SpeechRequest as InnerSpeechRequest,
ThreeDRequest as InnerThreeDRequest, TranscriptionRequest as InnerTranscriptionRequest,
UpscaleRequest as InnerUpscaleRequest, VideoRequest as InnerVideoRequest,
VoiceCloneRequest as InnerVoiceCloneRequest,
};
use crate::string::{alloc_cstring, cstr_to_opt_string, cstr_to_str};
unsafe fn parse_json_value(ptr: *const c_char) -> serde_json::Value {
let Some(s) = (unsafe { cstr_to_str(ptr) }) else {
return serde_json::Value::Object(serde_json::Map::new());
};
serde_json::from_str(s).unwrap_or_else(|_| serde_json::Value::Object(serde_json::Map::new()))
}
fn alloc_json_cstring(value: &serde_json::Value) -> *mut c_char {
match serde_json::to_string(value) {
Ok(s) => alloc_cstring(&s),
Err(_) => std::ptr::null_mut(),
}
}
#[repr(C)]
pub struct BlazenImageRequest(pub(crate) InnerImageRequest);
impl BlazenImageRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenImageRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerImageRequest> for BlazenImageRequest {
fn from(inner: InnerImageRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_new(
prompt: *const c_char,
) -> *mut BlazenImageRequest {
let Some(prompt) = (unsafe { cstr_to_str(prompt) }) else {
return std::ptr::null_mut();
};
BlazenImageRequest(InnerImageRequest::new(prompt)).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_set_negative_prompt(
handle: *mut BlazenImageRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.negative_prompt = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_set_width(
handle: *mut BlazenImageRequest,
value: u32,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.width = Some(value);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_clear_width(handle: *mut BlazenImageRequest) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.width = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_set_height(
handle: *mut BlazenImageRequest,
value: u32,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.height = Some(value);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_clear_height(handle: *mut BlazenImageRequest) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.height = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_set_num_images(
handle: *mut BlazenImageRequest,
value: u32,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.num_images = Some(value);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_clear_num_images(handle: *mut BlazenImageRequest) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.num_images = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_set_model(
handle: *mut BlazenImageRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.model = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_set_parameters_json(
handle: *mut BlazenImageRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_prompt(
handle: *const BlazenImageRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.prompt)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_parameters_json(
handle: *const BlazenImageRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_request_free(handle: *mut BlazenImageRequest) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}
#[repr(C)]
pub struct BlazenUpscaleRequest(pub(crate) InnerUpscaleRequest);
impl BlazenUpscaleRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenUpscaleRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerUpscaleRequest> for BlazenUpscaleRequest {
fn from(inner: InnerUpscaleRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_upscale_request_new(
image_url: *const c_char,
scale: f32,
) -> *mut BlazenUpscaleRequest {
let Some(image_url) = (unsafe { cstr_to_str(image_url) }) else {
return std::ptr::null_mut();
};
BlazenUpscaleRequest(InnerUpscaleRequest::new(image_url, scale)).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_upscale_request_set_model(
handle: *mut BlazenUpscaleRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.model = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_upscale_request_set_parameters_json(
handle: *mut BlazenUpscaleRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_upscale_request_image_url(
handle: *const BlazenUpscaleRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.image_url)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_upscale_request_scale(handle: *const BlazenUpscaleRequest) -> f32 {
if handle.is_null() {
return 0.0;
}
let r = unsafe { &*handle };
r.0.scale
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_upscale_request_parameters_json(
handle: *const BlazenUpscaleRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_upscale_request_free(handle: *mut BlazenUpscaleRequest) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}
#[repr(C)]
pub struct BlazenVideoRequest(pub(crate) InnerVideoRequest);
impl BlazenVideoRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenVideoRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerVideoRequest> for BlazenVideoRequest {
fn from(inner: InnerVideoRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_new(
prompt: *const c_char,
) -> *mut BlazenVideoRequest {
let Some(prompt) = (unsafe { cstr_to_str(prompt) }) else {
return std::ptr::null_mut();
};
BlazenVideoRequest(InnerVideoRequest::new(prompt)).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_set_image_url(
handle: *mut BlazenVideoRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.image_url = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_set_duration_seconds(
handle: *mut BlazenVideoRequest,
value: f32,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.duration_seconds = Some(value);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_clear_duration_seconds(
handle: *mut BlazenVideoRequest,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.duration_seconds = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_set_negative_prompt(
handle: *mut BlazenVideoRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.negative_prompt = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_set_width(
handle: *mut BlazenVideoRequest,
value: u32,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.width = Some(value);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_clear_width(handle: *mut BlazenVideoRequest) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.width = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_set_height(
handle: *mut BlazenVideoRequest,
value: u32,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.height = Some(value);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_clear_height(handle: *mut BlazenVideoRequest) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.height = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_set_model(
handle: *mut BlazenVideoRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.model = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_set_parameters_json(
handle: *mut BlazenVideoRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_prompt(
handle: *const BlazenVideoRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.prompt)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_parameters_json(
handle: *const BlazenVideoRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_video_request_free(handle: *mut BlazenVideoRequest) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}
#[repr(C)]
pub struct BlazenSpeechRequest(pub(crate) InnerSpeechRequest);
impl BlazenSpeechRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenSpeechRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerSpeechRequest> for BlazenSpeechRequest {
fn from(inner: InnerSpeechRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_new(
text: *const c_char,
) -> *mut BlazenSpeechRequest {
let Some(text) = (unsafe { cstr_to_str(text) }) else {
return std::ptr::null_mut();
};
BlazenSpeechRequest(InnerSpeechRequest::new(text)).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_set_voice(
handle: *mut BlazenSpeechRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.voice = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_set_voice_url(
handle: *mut BlazenSpeechRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.voice_url = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_set_language(
handle: *mut BlazenSpeechRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.language = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_set_speed(
handle: *mut BlazenSpeechRequest,
value: f32,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.speed = Some(value);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_clear_speed(handle: *mut BlazenSpeechRequest) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.speed = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_set_model(
handle: *mut BlazenSpeechRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.model = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_set_parameters_json(
handle: *mut BlazenSpeechRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_text(
handle: *const BlazenSpeechRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.text)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_parameters_json(
handle: *const BlazenSpeechRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_speech_request_free(handle: *mut BlazenSpeechRequest) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}
#[repr(C)]
pub struct BlazenVoiceCloneRequest(pub(crate) InnerVoiceCloneRequest);
impl BlazenVoiceCloneRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenVoiceCloneRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerVoiceCloneRequest> for BlazenVoiceCloneRequest {
fn from(inner: InnerVoiceCloneRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_new(
name: *const c_char,
) -> *mut BlazenVoiceCloneRequest {
let Some(name) = (unsafe { cstr_to_str(name) }) else {
return std::ptr::null_mut();
};
BlazenVoiceCloneRequest(InnerVoiceCloneRequest::new(name, Vec::new())).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_reference_urls_push(
handle: *mut BlazenVoiceCloneRequest,
url: *const c_char,
) {
if handle.is_null() {
return;
}
let Some(url) = (unsafe { cstr_to_str(url) }) else {
return;
};
let url = url.to_owned();
let r = unsafe { &mut *handle };
r.0.reference_urls.push(url);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_reference_urls_count(
handle: *const BlazenVoiceCloneRequest,
) -> usize {
if handle.is_null() {
return 0;
}
let r = unsafe { &*handle };
r.0.reference_urls.len()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_reference_urls_get(
handle: *const BlazenVoiceCloneRequest,
idx: usize,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
match r.0.reference_urls.get(idx) {
Some(s) => alloc_cstring(s),
None => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_set_language(
handle: *mut BlazenVoiceCloneRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.language = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_set_description(
handle: *mut BlazenVoiceCloneRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.description = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_set_parameters_json(
handle: *mut BlazenVoiceCloneRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_name(
handle: *const BlazenVoiceCloneRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.name)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_parameters_json(
handle: *const BlazenVoiceCloneRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_voice_clone_request_free(handle: *mut BlazenVoiceCloneRequest) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}
#[repr(C)]
pub struct BlazenMusicRequest(pub(crate) InnerMusicRequest);
impl BlazenMusicRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenMusicRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerMusicRequest> for BlazenMusicRequest {
fn from(inner: InnerMusicRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_music_request_new(
prompt: *const c_char,
) -> *mut BlazenMusicRequest {
let Some(prompt) = (unsafe { cstr_to_str(prompt) }) else {
return std::ptr::null_mut();
};
BlazenMusicRequest(InnerMusicRequest::new(prompt)).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_music_request_set_duration_seconds(
handle: *mut BlazenMusicRequest,
value: f32,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.duration_seconds = Some(value);
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_music_request_clear_duration_seconds(
handle: *mut BlazenMusicRequest,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.duration_seconds = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_music_request_set_model(
handle: *mut BlazenMusicRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.model = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_music_request_set_parameters_json(
handle: *mut BlazenMusicRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_music_request_prompt(
handle: *const BlazenMusicRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.prompt)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_music_request_parameters_json(
handle: *const BlazenMusicRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_music_request_free(handle: *mut BlazenMusicRequest) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}
#[repr(C)]
pub struct BlazenTranscriptionRequest(pub(crate) InnerTranscriptionRequest);
impl BlazenTranscriptionRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenTranscriptionRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerTranscriptionRequest> for BlazenTranscriptionRequest {
fn from(inner: InnerTranscriptionRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_new(
audio_url: *const c_char,
) -> *mut BlazenTranscriptionRequest {
let Some(audio_url) = (unsafe { cstr_to_str(audio_url) }) else {
return std::ptr::null_mut();
};
BlazenTranscriptionRequest(InnerTranscriptionRequest::new(audio_url)).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_set_audio_source_url(
handle: *mut BlazenTranscriptionRequest,
url: *const c_char,
) {
if handle.is_null() {
return;
}
let Some(url) = (unsafe { cstr_to_str(url) }) else {
return;
};
let url = url.to_owned();
let r = unsafe { &mut *handle };
r.0.audio_source = Some(blazen_llm::MediaSource::Url { url });
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_set_audio_source_base64(
handle: *mut BlazenTranscriptionRequest,
data: *const c_char,
) {
if handle.is_null() {
return;
}
let Some(data) = (unsafe { cstr_to_str(data) }) else {
return;
};
let data = data.to_owned();
let r = unsafe { &mut *handle };
r.0.audio_source = Some(blazen_llm::MediaSource::Base64 { data });
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_set_audio_source_file(
handle: *mut BlazenTranscriptionRequest,
path: *const c_char,
) {
if handle.is_null() {
return;
}
let Some(path) = (unsafe { cstr_to_str(path) }) else {
return;
};
let path = PathBuf::from(path);
let r = unsafe { &mut *handle };
r.0.audio_source = Some(blazen_llm::MediaSource::File { path });
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_clear_audio_source(
handle: *mut BlazenTranscriptionRequest,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.audio_source = None;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_set_language(
handle: *mut BlazenTranscriptionRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.language = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_set_diarize(
handle: *mut BlazenTranscriptionRequest,
value: bool,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.diarize = value;
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_set_model(
handle: *mut BlazenTranscriptionRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.model = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_set_parameters_json(
handle: *mut BlazenTranscriptionRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_audio_url(
handle: *const BlazenTranscriptionRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.audio_url)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_diarize(
handle: *const BlazenTranscriptionRequest,
) -> bool {
if handle.is_null() {
return false;
}
let r = unsafe { &*handle };
r.0.diarize
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_parameters_json(
handle: *const BlazenTranscriptionRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_transcription_request_free(
handle: *mut BlazenTranscriptionRequest,
) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}
#[repr(C)]
pub struct BlazenThreeDRequest(pub(crate) InnerThreeDRequest);
impl BlazenThreeDRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenThreeDRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerThreeDRequest> for BlazenThreeDRequest {
fn from(inner: InnerThreeDRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_three_d_request_new(
prompt: *const c_char,
) -> *mut BlazenThreeDRequest {
let Some(prompt) = (unsafe { cstr_to_str(prompt) }) else {
return std::ptr::null_mut();
};
BlazenThreeDRequest(InnerThreeDRequest::new(prompt)).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_three_d_request_set_image_url(
handle: *mut BlazenThreeDRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.image_url = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_three_d_request_set_format(
handle: *mut BlazenThreeDRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.format = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_three_d_request_set_model(
handle: *mut BlazenThreeDRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.model = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_three_d_request_set_parameters_json(
handle: *mut BlazenThreeDRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_three_d_request_prompt(
handle: *const BlazenThreeDRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.prompt)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_three_d_request_parameters_json(
handle: *const BlazenThreeDRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_three_d_request_free(handle: *mut BlazenThreeDRequest) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}
#[repr(C)]
pub struct BlazenBackgroundRemovalRequest(pub(crate) InnerBackgroundRemovalRequest);
impl BlazenBackgroundRemovalRequest {
pub(crate) fn into_ptr(self) -> *mut BlazenBackgroundRemovalRequest {
Box::into_raw(Box::new(self))
}
}
impl From<InnerBackgroundRemovalRequest> for BlazenBackgroundRemovalRequest {
fn from(inner: InnerBackgroundRemovalRequest) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_background_removal_request_new(
image_url: *const c_char,
) -> *mut BlazenBackgroundRemovalRequest {
let Some(image_url) = (unsafe { cstr_to_str(image_url) }) else {
return std::ptr::null_mut();
};
BlazenBackgroundRemovalRequest(InnerBackgroundRemovalRequest {
image_url: image_url.to_owned(),
model: None,
parameters: serde_json::Value::Object(serde_json::Map::new()),
})
.into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_background_removal_request_set_model(
handle: *mut BlazenBackgroundRemovalRequest,
value: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.model = unsafe { cstr_to_opt_string(value) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_background_removal_request_set_parameters_json(
handle: *mut BlazenBackgroundRemovalRequest,
json: *const c_char,
) {
if handle.is_null() {
return;
}
let r = unsafe { &mut *handle };
r.0.parameters = unsafe { parse_json_value(json) };
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_background_removal_request_image_url(
handle: *const BlazenBackgroundRemovalRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_cstring(&r.0.image_url)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_background_removal_request_parameters_json(
handle: *const BlazenBackgroundRemovalRequest,
) -> *mut c_char {
if handle.is_null() {
return std::ptr::null_mut();
}
let r = unsafe { &*handle };
alloc_json_cstring(&r.0.parameters)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_background_removal_request_free(
handle: *mut BlazenBackgroundRemovalRequest,
) {
if handle.is_null() {
return;
}
drop(unsafe { Box::from_raw(handle) });
}