fsm_cache.py 664 Bytes
Newer Older
Lianmin Zheng's avatar
Lianmin Zheng committed
1
2
3
from sglang.srt.constrained.fsm import RegexFSM
from sglang.srt.constrained.tokenizer import TransformerTokenizer

Liangsheng Yin's avatar
Liangsheng Yin committed
4
5
_enable_memory_cache = True

Lianmin Zheng's avatar
Lianmin Zheng committed
6
7

class FSMCache:
8
    def __init__(self, tokenizer_path, tokenizer_args_dict):
Lianmin Zheng's avatar
Lianmin Zheng committed
9
        self.cache = {}
10
11
12
        self.outlines_tokenizer = TransformerTokenizer(
            tokenizer_path, **tokenizer_args_dict
        )
Lianmin Zheng's avatar
Lianmin Zheng committed
13

14
    def init_fsm(self, regex):
Liangsheng Yin's avatar
Liangsheng Yin committed
15
16
17
18
19
        if _enable_memory_cache:
            if regex not in self.cache:
                fsm = RegexFSM(regex, self.outlines_tokenizer)
                self.cache[regex] = fsm
            return self.cache[regex]
Lianmin Zheng's avatar
Lianmin Zheng committed
20

Liangsheng Yin's avatar
Liangsheng Yin committed
21
        return RegexFSM(regex, self.outlines_tokenizer)