xgrammar/
lib.rs

1#![allow(unsafe_op_in_unsafe_fn)]
2// Suppress warnings from auto-generated FFI code
3#![allow(unused_imports)]
4
5use autocxx::prelude::*;
6
7include_cpp! {
8    #include "xgrammar/xgrammar.h"
9    #include "dlpack/dlpack.h"
10    #include "cxx_utils.hpp"
11    #include "cxx_utils/testing.hpp"
12    safety!(unsafe_ffi)
13    // xgrammar/compiler.h
14    generate!("xgrammar::CompiledGrammar")
15    generate!("xgrammar::GrammarCompiler")
16
17    // xgrammar/config.h
18    generate!("xgrammar::SetMaxRecursionDepth")
19    generate!("xgrammar::GetMaxRecursionDepth")
20    generate!("xgrammar::GetSerializationVersion")
21
22    // xgrammar/grammar.h
23    generate!("xgrammar::StructuralTagItem")
24    generate!("xgrammar::Grammar")
25
26    // xgrammar/matcher.h
27    generate!("xgrammar::GetBitmaskSize")
28    generate!("xgrammar::GetBitmaskDLType")
29    generate!("xgrammar::ApplyTokenBitmaskInplaceCPU")
30    generate!("xgrammar::GrammarMatcher")
31    generate!("xgrammar::BatchGrammarMatcher")
32
33    // xgrammar/tokenizer_info.h
34    generate!("xgrammar::VocabType")
35    generate!("xgrammar::TokenizerInfo")
36
37    // cxx_utils/string_vec.hpp
38    generate!("cxx_utils::new_string_vector")
39    generate!("cxx_utils::string_vec_reserve")
40    generate!("cxx_utils::string_vec_push_bytes")
41
42    // cxx_utils/tokenizer_info.hpp
43    generate!("cxx_utils::make_tokenizer_info")
44    generate!("cxx_utils::tokenizer_info_deserialize_json_or_error")
45
46    // cxx_utils/structural_tag.hpp
47    generate!("cxx_utils::new_structural_tag_vector")
48    generate!("cxx_utils::structural_tag_vec_reserve")
49    generate!("cxx_utils::structural_tag_vec_push")
50
51    // cxx_utils/grammar.hpp
52    generate!("cxx_utils::grammar_from_json_schema")
53    generate!("cxx_utils::grammar_from_structural_tag")
54    generate!("cxx_utils::new_grammar_vector")
55    generate!("cxx_utils::grammar_vec_reserve")
56    generate!("cxx_utils::grammar_vec_push")
57    generate!("cxx_utils::grammar_deserialize_json_or_error")
58
59    // cxx_utils/compiled_grammar.hpp
60    generate!("cxx_utils::compiled_grammar_deserialize_json_or_error")
61
62    // cxx_utils/grammar_compiler.hpp
63    generate!("cxx_utils::make_grammar_compiler")
64    generate!("cxx_utils::compiler_compile_json_schema")
65    generate!("cxx_utils::compiler_compile_builtin_json")
66    generate!("cxx_utils::compiler_compile_regex")
67    generate!("cxx_utils::compiler_compile_structural_tag")
68    generate!("cxx_utils::compiler_compile_grammar_or_error")
69
70    // cxx_utils/matcher.hpp
71    generate!("cxx_utils::make_grammar_matcher")
72    generate!("cxx_utils::make_batch_grammar_matcher")
73    generate!("cxx_utils::new_grammar_matcher_vector")
74    generate!("cxx_utils::grammar_matcher_vec_reserve")
75    generate!("cxx_utils::grammar_matcher_vec_push")
76    generate!("cxx_utils::batch_matcher_batch_fill_next_token_bitmask")
77    generate!("cxx_utils::batch_accept_token")
78    generate!("cxx_utils::batch_accept_string")
79
80    // cxx_utils/testing.hpp
81    generate!("cxx_utils::ebnf_to_grammar_no_normalization")
82    generate!("cxx_utils::json_schema_to_ebnf")
83    generate!("cxx_utils::qwen_xml_tool_calling_to_ebnf")
84    generate!("cxx_utils::get_masked_tokens_from_bitmask")
85    generate!("cxx_utils::SingleTokenResult")
86    generate!("cxx_utils::is_single_token_bitmask")
87
88    // DLPack core types
89    generate_pod!("DLTensor")
90    generate!("DLManagedTensor")  // Has function pointer, not POD
91    generate_pod!("DLDevice")
92    generate_pod!("DLDataType")
93    generate_pod!("DLDeviceType")
94    generate_pod!("DLDataTypeCode")
95
96}
97
98// Re-export DLPack types for public use
99pub use ffi::{
100    DLDataType, DLDataTypeCode, DLDevice, DLDeviceType, DLManagedTensor,
101    DLTensor,
102};
103#[allow(unused_imports)]
104use ffi::{
105    cxx_utils,
106    xgrammar::{
107        BatchGrammarMatcher as FFIBatchGrammarMatcher,
108        CompiledGrammar as FFICompiledGrammar,
109        GetBitmaskDLType as FFIGetBitmaskDLType,
110        GetBitmaskSize as FFIGetBitmaskSize,
111        GetMaxRecursionDepth as FFIGetMaxRecursionDepth,
112        GetSerializationVersion as FFIGetSerializationVersion,
113        Grammar as FFIGrammar, GrammarCompiler as FFIGrammarCompiler,
114        GrammarMatcher as FFIGrammarMatcher,
115        SetMaxRecursionDepth as FFISetMaxRecursionDepth,
116        StructuralTagItem as FFIStructuralTagItem,
117        TokenizerInfo as FFITokenizerInfo,
118    },
119};
120
121mod compiler;
122mod config;
123mod grammar;
124mod matcher;
125mod tokenizer_info;
126
127pub mod testing;
128
129pub use autocxx::{
130    c_int as cxx_int, c_longlong as cxx_longlong, c_ulong as cxx_ulong,
131    c_ulonglong as cxx_ulonglong,
132};
133pub use compiler::{CompiledGrammar, GrammarCompiler};
134pub use config::{
135    get_max_recursion_depth, get_serialization_version, set_max_recursion_depth,
136};
137pub use cxx::UniquePtr as CxxUniquePtr;
138pub use ffi::xgrammar::VocabType;
139pub use grammar::{Grammar, StructuralTagItem};
140pub use matcher::{
141    BatchGrammarMatcher, GrammarMatcher, allocate_token_bitmask,
142    get_bitmask_shape, reset_token_bitmask,
143};
144pub use tokenizer_info::TokenizerInfo;