Skip to main content

llama_cpp_bindings/model/
grammar_trigger.rs

1use crate::token::LlamaToken;
2
3/// Grammar trigger kinds used for lazy grammar sampling.
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum GrammarTriggerType {
6    /// Trigger on a specific token.
7    Token = 0,
8    /// Trigger on a literal word.
9    Word = 1,
10    /// Trigger on a regex pattern.
11    Pattern = 2,
12    /// Trigger on a fully anchored regex pattern.
13    PatternFull = 3,
14}
15
16/// Lazy grammar trigger from chat template generation.
17#[derive(Debug, Clone, PartialEq, Eq)]
18pub struct GrammarTrigger {
19    /// Trigger kind.
20    pub trigger_type: GrammarTriggerType,
21    /// Trigger text or pattern.
22    pub value: String,
23    /// Token id for token triggers.
24    pub token: Option<LlamaToken>,
25}
26
27#[cfg(test)]
28mod tests {
29    use super::GrammarTrigger;
30    use super::GrammarTriggerType;
31    use crate::token::LlamaToken;
32
33    #[test]
34    fn token_type_has_token() {
35        let trigger = GrammarTrigger {
36            trigger_type: GrammarTriggerType::Token,
37            value: String::from("test_token"),
38            token: Some(LlamaToken(42)),
39        };
40
41        assert!(trigger.token.is_some());
42    }
43
44    #[test]
45    fn non_token_type_has_no_token() {
46        let trigger = GrammarTrigger {
47            trigger_type: GrammarTriggerType::Word,
48            value: String::from("test_word"),
49            token: None,
50        };
51
52        assert!(trigger.token.is_none());
53    }
54}