Unverified Commit f6ab4ca6 authored by mlmz's avatar mlmz Committed by GitHub
Browse files

fix: fix ipython running error for Engine due to outlines nest_asyncio (#4582)


Co-authored-by: default avatarshuaills <shishuaiuoe@gmail.com>
parent c7c7dbeb
......@@ -19,12 +19,7 @@
"- Streaming asynchronous generation\n",
"\n",
"Additionally, you can easily build a custom server on top of the SGLang offline engine. A detailed example working in a python script can be found in [custom_server](https://github.com/sgl-project/sglang/blob/main/examples/runtime/engine/custom_server.py).\n",
"\n",
"## SPECIAL WARNING!!!!\n",
"\n",
"**To launch the offline engine in your python scripts,** `__main__` **condition is necessary, since we use** `spawn` **mode to create subprocesses. Please refer to this simple example**:\n",
"\n",
"https://github.com/sgl-project/sglang/blob/main/examples/runtime/engine/launch_engine.py"
"\n"
]
},
{
......
import os
import weakref
import nest_asyncio
nest_asyncio.apply()
from sglang.utils import execute_shell_command, reserve_port
DEFAULT_MAX_RUNNING_REQUESTS = 200
......
......@@ -26,13 +26,6 @@ from fastapi import HTTPException, Request, UploadFile
from fastapi.responses import ORJSONResponse, StreamingResponse
from pydantic import ValidationError
try:
from outlines.fsm.json_schema import convert_json_schema_to_str
except ImportError:
# Before outlines 0.0.47, convert_json_schema_to_str is under
# outlines.integrations.utils
from outlines.integrations.utils import convert_json_schema_to_str
from sglang.srt.code_completion_parser import (
generate_completion_prompt_from_request,
is_completion_template_defined,
......@@ -79,7 +72,7 @@ from sglang.srt.openai_api.protocol import (
UsageInfo,
)
from sglang.srt.reasoning_parser import ReasoningParser
from sglang.utils import get_exception_traceback
from sglang.utils import convert_json_schema_to_str, get_exception_traceback
logger = logging.getLogger(__name__)
......
......@@ -22,6 +22,7 @@ from typing import Any, Callable, List, Optional, Tuple, Type, Union
import numpy as np
import requests
from IPython.display import HTML, display
from pydantic import BaseModel
from tqdm import tqdm
from sglang.srt.utils import kill_process_tree
......@@ -29,6 +30,36 @@ from sglang.srt.utils import kill_process_tree
logger = logging.getLogger(__name__)
def convert_json_schema_to_str(json_schema: Union[dict, str, Type[BaseModel]]) -> str:
"""Convert a JSON schema to a string.
Parameters
----------
json_schema
The JSON schema.
Returns
-------
str
The JSON schema converted to a string.
Raises
------
ValueError
If the schema is not a dictionary, a string or a Pydantic class.
"""
if isinstance(json_schema, dict):
schema_str = json.dumps(json_schema)
elif isinstance(json_schema, str):
schema_str = json_schema
elif issubclass(json_schema, BaseModel):
schema_str = json.dumps(json_schema.model_json_schema())
else:
raise ValueError(
f"Cannot parse schema {json_schema}. The schema must be either "
+ "a Pydantic class, a dictionary or a string that contains the JSON "
+ "schema specification"
)
return schema_str
def get_exception_traceback():
etype, value, tb = sys.exc_info()
err_str = "".join(traceback.format_exception(etype, value, tb))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment