Skip to main content

llama_cpp_bindings/mtmd/
mtmd_context_params.rs

1use std::ffi::{CStr, CString};
2
3/// Configuration parameters for MTMD context
4///
5/// # Examples
6///
7/// ```
8/// use llama_cpp_bindings::mtmd::{MtmdContextParams, mtmd_default_marker};
9/// use std::ffi::CString;
10///
11/// let params = MtmdContextParams {
12///     use_gpu: false,
13///     print_timings: true,
14///     n_threads: 4,
15///     media_marker: CString::new(mtmd_default_marker()).unwrap(),
16/// };
17/// ```
18#[derive(Debug, Clone)]
19pub struct MtmdContextParams {
20    /// Whether to use GPU acceleration
21    pub use_gpu: bool,
22    /// Whether to print timing information
23    pub print_timings: bool,
24    /// Number of threads to use for processing
25    pub n_threads: i32,
26    /// Media marker string used to identify media positions in text
27    pub media_marker: CString,
28}
29
30impl Default for MtmdContextParams {
31    fn default() -> Self {
32        unsafe { llama_cpp_bindings_sys::mtmd_context_params_default() }.into()
33    }
34}
35
36impl From<&MtmdContextParams> for llama_cpp_bindings_sys::mtmd_context_params {
37    fn from(params: &MtmdContextParams) -> Self {
38        let mut context = unsafe { llama_cpp_bindings_sys::mtmd_context_params_default() };
39        let MtmdContextParams {
40            use_gpu,
41            print_timings,
42            n_threads,
43            media_marker,
44        } = params;
45
46        context.use_gpu = *use_gpu;
47        context.print_timings = *print_timings;
48        context.n_threads = *n_threads;
49        context.media_marker = media_marker.as_ptr();
50
51        context
52    }
53}
54
55impl From<llama_cpp_bindings_sys::mtmd_context_params> for MtmdContextParams {
56    fn from(params: llama_cpp_bindings_sys::mtmd_context_params) -> Self {
57        Self {
58            use_gpu: params.use_gpu,
59            print_timings: params.print_timings,
60            n_threads: params.n_threads,
61            media_marker: unsafe { CStr::from_ptr(params.media_marker) }.to_owned(),
62        }
63    }
64}