mistralrs_core/pipeline/
llg.rs1use std::sync::Arc;
2
3use anyhow::Result;
4use llguidance::{api::TopLevelGrammar, ParserFactory};
5use tokenizers::Tokenizer;
6
7use crate::Constraint;
8
9pub fn build_llg_factory(tokenizer: Tokenizer) -> Result<Arc<ParserFactory>> {
10 let env =
11 toktrie_hf_tokenizers::ByteTokenizer::from_tokenizer(tokenizer)?.into_tok_env(None)?;
12 let factory = ParserFactory::new_simple(&env)?;
13 Ok(Arc::new(factory))
14}
15
16pub fn llg_grammar_from_constraint(constraint: &Constraint) -> Result<Option<TopLevelGrammar>> {
17 let grm = match constraint {
18 Constraint::Regex(regex) => TopLevelGrammar::from_regex(regex),
19 Constraint::Lark(lark) => TopLevelGrammar::from_lark(lark.clone()),
20 Constraint::JsonSchema(value) => TopLevelGrammar::from_json_schema(value.clone()),
21 Constraint::Llguidance(value) => value.clone(),
22 Constraint::None => return Ok(None),
23 };
24 Ok(Some(grm))
25}
26
27pub fn constraint_from_llg_grammar(
28 factory: &ParserFactory,
29 grm: TopLevelGrammar,
30) -> Result<llguidance::Matcher> {
31 let parser = factory.create_parser(grm)?;
32 Ok(llguidance::Matcher::new(Ok(parser)))
33}