llama_cpp_2/token/data_array.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
//! an rusty equivalent of `llama_token_data`.
use crate::token::data::LlamaTokenData;
/// a safe wrapper around `llama_token_data_array`.
#[derive(Debug, Clone, PartialEq)]
#[allow(clippy::module_name_repetitions)]
pub struct LlamaTokenDataArray {
/// the underlying data
pub data: Vec<LlamaTokenData>,
/// is the data sorted?
pub sorted: bool,
}
impl LlamaTokenDataArray {
/// Create a new `LlamaTokenDataArray` from a vector and weather or not the data is sorted.
///
/// ```
/// # use llama_cpp_2::token::data::LlamaTokenData;
/// # use llama_cpp_2::token::data_array::LlamaTokenDataArray;
/// # use llama_cpp_2::token::LlamaToken;
/// let array = LlamaTokenDataArray::new(vec![
/// LlamaTokenData::new(LlamaToken(0), 0.0, 0.0),
/// LlamaTokenData::new(LlamaToken(1), 0.1, 0.1)
/// ], false);
/// assert_eq!(array.data.len(), 2);
/// assert_eq!(array.sorted, false);
/// ```
#[must_use]
pub fn new(data: Vec<LlamaTokenData>, sorted: bool) -> Self {
Self { data, sorted }
}
/// Create a new `LlamaTokenDataArray` from an iterator and weather or not the data is sorted.
/// ```
/// # use llama_cpp_2::token::data::LlamaTokenData;
/// # use llama_cpp_2::token::data_array::LlamaTokenDataArray;
/// # use llama_cpp_2::token::LlamaToken;
/// let array = LlamaTokenDataArray::from_iter([
/// LlamaTokenData::new(LlamaToken(0), 0.0, 0.0),
/// LlamaTokenData::new(LlamaToken(1), 0.1, 0.1)
/// ], false);
/// assert_eq!(array.data.len(), 2);
/// assert_eq!(array.sorted, false);
pub fn from_iter<T>(data: T, sorted: bool) -> LlamaTokenDataArray
where
T: IntoIterator<Item = LlamaTokenData>,
{
Self::new(data.into_iter().collect(), sorted)
}
}