llama_cpp_2/
token_type.rs

1//! Utilities for working with `llama_token_type` values.
2use enumflags2::{bitflags, BitFlags};
3use std::ops::{Deref, DerefMut};
4
5/// A rust flavored equivalent of `llama_token_type`.
6#[derive(Eq, PartialEq, Debug, Clone, Copy)]
7#[bitflags]
8#[repr(u32)]
9#[allow(clippy::module_name_repetitions, missing_docs)]
10pub enum LlamaTokenAttr {
11    Unknown = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_UNKNOWN as _,
12    Unused = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_UNUSED as _,
13    Normal = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_NORMAL as _,
14    Control = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_CONTROL as _,
15    UserDefined = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_USER_DEFINED as _,
16    Byte = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_BYTE as _,
17    Normalized = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_NORMALIZED as _,
18    LStrip = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_LSTRIP as _,
19    RStrip = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_RSTRIP as _,
20    SingleWord = llama_cpp_sys_2::LLAMA_TOKEN_ATTR_SINGLE_WORD as _,
21}
22
23/// A set of `LlamaTokenAttrs`
24#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub struct LlamaTokenAttrs(pub BitFlags<LlamaTokenAttr>);
26
27impl Deref for LlamaTokenAttrs {
28    type Target = BitFlags<LlamaTokenAttr>;
29
30    fn deref(&self) -> &Self::Target {
31        &self.0
32    }
33}
34
35impl DerefMut for LlamaTokenAttrs {
36    fn deref_mut(&mut self) -> &mut Self::Target {
37        &mut self.0
38    }
39}
40
41impl TryFrom<llama_cpp_sys_2::llama_token_type> for LlamaTokenAttrs {
42    type Error = LlamaTokenTypeFromIntError;
43
44    fn try_from(value: llama_cpp_sys_2::llama_vocab_type) -> Result<Self, Self::Error> {
45        Ok(Self(BitFlags::from_bits(value as _).map_err(|e| {
46            LlamaTokenTypeFromIntError::UnknownValue(e.invalid_bits())
47        })?))
48    }
49}
50
51/// An error type for `LlamaTokenType::try_from`.
52#[derive(thiserror::Error, Debug, Eq, PartialEq)]
53pub enum LlamaTokenTypeFromIntError {
54    /// The value is not a valid `llama_token_type`.
55    #[error("Unknown Value {0}")]
56    UnknownValue(std::ffi::c_uint),
57}