Fix /model_info serialization when a config value is a class (#39237)

Co-authored-by: Lianmin Zheng <lianminzheng@gmail.com>
This commit is contained in:
raghotham
2026-09-14 17:10:44 -07:00
committed by GitHub
co-authored by Lianmin Zheng
parent 276663a79d
commit c0b8725f5a
3 changed files with 47 additions and 1 deletions
@@ -40,6 +40,10 @@ from sglang.test.test_utils import CustomTestCase
register_cpu_ci(est_time=13, suite="base-a-test-cpu")
class _CustomModelLoader:
pass
def _stub_tokenizer_manager(
server_args: ServerArgs, get_internal_state=None
) -> TokenizerManager:
@@ -57,6 +61,45 @@ def _stub_tokenizer_manager(
return tokenizer_manager
class TestModelInfoSerialization(CustomTestCase):
def test_model_info_serializes_custom_loader_class(self):
server_args = ServerArgs(model_path="dummy")
values = {
"weight_version": None,
"load_format": _CustomModelLoader,
"reasoning_parser": None,
"tool_call_parser": None,
}
tokenizer_manager = SimpleNamespace(
model_config=SimpleNamespace(
is_image_understandable_model=False,
is_audio_understandable_model=False,
hf_config=SimpleNamespace(
model_type="test", architectures=["TestModel"]
),
embedding_model_spec=None,
),
model_path="dummy",
served_model_name="dummy",
server_args=server_args,
is_generation=True,
config_value=values.__getitem__,
)
prior_state = http_server.get_global_state()
http_server.set_global_state(
SimpleNamespace(tokenizer_manager=tokenizer_manager)
)
publish(server_args, role="tokenizer")
try:
payload = asyncio.run(http_server.model_info())
finally:
http_server._global_state = prior_state
reset_context()
self.assertEqual(payload["load_format"], f"{__name__}._CustomModelLoader")
json.dumps(payload)
def _call_server_info_with(
server_args: ServerArgs,
internal_states: list[dict] | None = None,