From 3c2c5869ad719d41d87f6aca8a71e683ebcadc76 Mon Sep 17 00:00:00 2001 From: Cody Yu Date: Fri, 23 Feb 2024 23:06:17 -0800 Subject: [PATCH] Support outlines > 0.0.31 (#219) --- python/pyproject.toml | 2 +- python/sglang/srt/constrained/__init__.py | 24 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index d220d6f99..ea55f93c0 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -20,7 +20,7 @@ dependencies = [ [project.optional-dependencies] srt = ["aiohttp", "fastapi", "psutil", "rpyc", "torch", "uvloop", "uvicorn", "zmq", "vllm>=0.2.5", "interegular", "lark", "numba", - "pydantic", "referencing", "diskcache", "cloudpickle", "pillow", "outlines>=0.0.27,<=0.0.30"] + "pydantic", "referencing", "diskcache", "cloudpickle", "pillow", "outlines>=0.0.27"] openai = ["openai>=1.0", "numpy"] anthropic = ["anthropic", "numpy"] all = ["sglang[srt]", "sglang[openai]", "sglang[anthropic]"] diff --git a/python/sglang/srt/constrained/__init__.py b/python/sglang/srt/constrained/__init__.py index ddfcff31a..463d71c22 100644 --- a/python/sglang/srt/constrained/__init__.py +++ b/python/sglang/srt/constrained/__init__.py @@ -1,9 +1,31 @@ +import json +from typing import Dict, Optional, Union + from outlines.caching import cache as disk_cache from outlines.caching import disable_cache from outlines.fsm.fsm import RegexFSM -from outlines.fsm.json_schema import build_regex_from_object from outlines.fsm.regex import FSMInfo, make_deterministic_fsm from outlines.models.transformers import TransformerTokenizer +from pydantic import BaseModel + +try: + from outlines.fsm.json_schema import build_regex_from_object +except ImportError: + # Since outlines 0.0.32, build_regex_from_object is replaced by build_regex_from_schema, + # which only accepts string schema as input. + from outlines.fsm.json_schema import build_regex_from_schema + + def build_regex_from_object( + object: Union[str, BaseModel, Dict], whitespace_pattern: Optional[str] = None + ): + if isinstance(object, type(BaseModel)): + schema = json.dumps(object.model_json_schema()) + elif isinstance(object, Dict): + schema = json.dumps(object) + else: + schema = object + return build_regex_from_schema(schema, whitespace_pattern) + __all__ = [ "RegexFSM",