Disk FSM cache and adjust code. (#63)

This commit is contained in:
Liangsheng Yin
2024-01-21 13:26:11 +08:00
committed by GitHub
parent 0b2efc2adc
commit ca13f3b8c5
8 changed files with 207 additions and 299 deletions

View File

@@ -1,41 +1,17 @@
import threading
from sglang.srt.constrained.fsm import RegexFSM
from sglang.srt.constrained.tokenizer import TransformerTokenizer
def get_fsm(regex, tokenizer, fsm_cache_entry):
outlines_tokenizer = TransformerTokenizer(tokenizer)
fsm = RegexFSM(regex, outlines_tokenizer)
fsm_cache_entry.fsm = fsm
fsm_cache_entry.event.set()
class FSMCacheEntry:
def __init__(self):
self.fsm = None
self.event = threading.Event()
class FSMCache:
def __init__(self, tokenizer):
def __init__(self, tokenizer_path, tokenizer_args_dict):
self.cache = {}
self.tokenizer = tokenizer
self.outlines_tokenizer = TransformerTokenizer(
tokenizer_path, **tokenizer_args_dict
)
def init_fsm_in_background(self, regex):
def init_fsm(self, regex):
if regex not in self.cache:
self.cache[regex] = FSMCacheEntry()
threading.Thread(
target=get_fsm,
args=(
regex,
self.tokenizer,
self.cache[regex],
),
).start()
fsm = RegexFSM(regex, self.outlines_tokenizer)
self.cache[regex] = fsm
def get_fsm(self, regex):
self.init_fsm_in_background(regex)
entry = self.cache[regex]
entry.event.wait()
return entry.fsm
return self.cache[regex]