| 757 | llama_cpp.llama_sampler_chain_add(self.sampler, sampler) |
| 758 | |
| 759 | def add_grammar_lazy_patterns( |
| 760 | self, |
| 761 | model: LlamaModel, |
| 762 | grammar: LlamaGrammar, |
| 763 | trigger_patterns: List[str], |
| 764 | trigger_tokens: List[int], |
| 765 | ): |
| 766 | # Convert patterns to C array |
| 767 | pattern_ptrs = (ctypes.c_char_p * len(trigger_patterns))() |
| 768 | for i, pattern in enumerate(trigger_patterns): |
| 769 | pattern_ptrs[i] = pattern.encode("utf-8") |
| 770 | |
| 771 | # Convert tokens to C array |
| 772 | token_array = (llama_cpp.llama_token * len(trigger_tokens))(*trigger_tokens) |
| 773 | |
| 774 | sampler = llama_cpp.llama_sampler_init_grammar_lazy_patterns( |
| 775 | model.vocab, |
| 776 | grammar._grammar.encode("utf-8"), |
| 777 | grammar._root.encode("utf-8"), |
| 778 | pattern_ptrs, |
| 779 | len(trigger_patterns), |
| 780 | token_array, |
| 781 | len(trigger_tokens), |
| 782 | ) |
| 783 | llama_cpp.llama_sampler_chain_add(self.sampler, sampler) |
| 784 | |
| 785 | def add_penalties( |
| 786 | self, |