use std::sync::atomic::{AtomicBool, Ordering};
use crate::LlamaError;
static INITIALIZED: AtomicBool = AtomicBool::new(false);
#[derive(Debug)]
pub struct LlamaBackend {
_private: (),
}
impl LlamaBackend {
pub fn init() -> Result<Self, LlamaError> {
if INITIALIZED.swap(true, Ordering::SeqCst) {
return Err(LlamaError::BackendAlreadyInitialized);
}
unsafe { ik_llama_cpp_sys::llama_backend_init() };
Ok(Self { _private: () })
}
}
impl Drop for LlamaBackend {
fn drop(&mut self) {
unsafe { ik_llama_cpp_sys::llama_backend_free() };
INITIALIZED.store(false, Ordering::SeqCst);
}
}