From a0cca7350a76578458757fbc109876cb22b5a037 Mon Sep 17 00:00:00 2001 From: Chang Su Date: Tue, 31 Mar 2026 16:58:40 -0700 Subject: [PATCH 1/6] ci: pin sglang to v0.5.10rc0 for smg_grpc_servicer migration The old sglang built-in grpc_server.py references EmbedError/EmbedComplete proto types that were removed in our proto cleanup. v0.5.10rc0 includes sgl-project/sglang#20478 which migrates to smg_grpc_servicer. TODO: revert to "sglang[all]" once a stable >= 0.5.10 is released. Signed-off-by: Chang Su --- scripts/ci_install_sglang.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/ci_install_sglang.sh b/scripts/ci_install_sglang.sh index 185ee46cf7..961b0948b4 100755 --- a/scripts/ci_install_sglang.sh +++ b/scripts/ci_install_sglang.sh @@ -40,8 +40,13 @@ else fi # Install SGLang with all dependencies +# TODO(changsu): Revert to `uv pip install "sglang[all]"` once sglang releases +# a stable version (>= 0.5.10) that includes the smg_grpc_servicer migration +# (sgl-project/sglang#20478). The rc0 is needed because the old built-in +# grpc_server.py references proto types (EmbedError, EmbedComplete) that were +# removed from our proto definitions. echo "Installing SGLang..." -uv pip install "sglang[all]" +uv pip install "sglang[all]==0.5.10rc0" # Install flashinfer-jit-cache: sglang bundles flashinfer_python but only for attention ops. # Multi-GPU models need trtllm_comm kernels (fused allreduce + layernorm) which FlashInfer From 9838a7b11d390588d010271ef757c9f4fcaac7ec Mon Sep 17 00:00:00 2001 From: Chang Su Date: Tue, 31 Mar 2026 17:02:03 -0700 Subject: [PATCH 2/6] fix(ci): add --prerelease=allow for sglang rc0 install sglang 0.5.10rc0 depends on flash-attn-4>=4.0.0b4 which is a pre-release. uv requires --prerelease=allow to resolve pre-release dependencies. Signed-off-by: Chang Su --- scripts/ci_install_sglang.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci_install_sglang.sh b/scripts/ci_install_sglang.sh index 961b0948b4..e407dccbc5 100755 --- a/scripts/ci_install_sglang.sh +++ b/scripts/ci_install_sglang.sh @@ -46,7 +46,7 @@ fi # grpc_server.py references proto types (EmbedError, EmbedComplete) that were # removed from our proto definitions. echo "Installing SGLang..." -uv pip install "sglang[all]==0.5.10rc0" +uv pip install --prerelease=allow "sglang[all]==0.5.10rc0" # Install flashinfer-jit-cache: sglang bundles flashinfer_python but only for attention ops. # Multi-GPU models need trtllm_comm kernels (fused allreduce + layernorm) which FlashInfer From cc65340e32983ed9bbec6df736911c78153729da Mon Sep 17 00:00:00 2001 From: Chang Su Date: Tue, 31 Mar 2026 17:35:20 -0700 Subject: [PATCH 3/6] fix(servicer): use timezone.utc for Python 3.10 compat, update ruff config datetime.UTC was added in Python 3.11 but grpc_servicer declares requires-python >= 3.10. Replace with timezone.utc and add ruff per-file-ignore for UP017 on grpc_servicer/ to prevent pyupgrade from reverting to 3.11+ syntax. Signed-off-by: Chang Su --- grpc_servicer/smg_grpc_servicer/sglang/servicer.py | 4 ++-- ruff.toml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/grpc_servicer/smg_grpc_servicer/sglang/servicer.py b/grpc_servicer/smg_grpc_servicer/sglang/servicer.py index 628014ce39..49ad0e1e06 100644 --- a/grpc_servicer/smg_grpc_servicer/sglang/servicer.py +++ b/grpc_servicer/smg_grpc_servicer/sglang/servicer.py @@ -11,7 +11,7 @@ import os import time from collections.abc import AsyncIterator -from datetime import UTC, datetime +from datetime import datetime, timezone import grpc import msgspec @@ -537,7 +537,7 @@ async def GetLoads( loads = [_convert_loads_to_protobuf(r) for r in results] return sglang_scheduler_pb2.GetLoadsResponse( - timestamp=datetime.now(UTC).isoformat(), + timestamp=datetime.now(timezone.utc).isoformat(), version=sglang.__version__, dp_rank_count=len(loads), loads=loads, diff --git a/ruff.toml b/ruff.toml index 3b26804607..50687ff96e 100644 --- a/ruff.toml +++ b/ruff.toml @@ -11,6 +11,8 @@ max-line-length = 120 [lint.per-file-ignores] "e2e_test/**" = ["F841", "E402"] "bindings/python/tests/**" = ["F841", "E402"] +# grpc_servicer supports Python 3.10+ — don't upgrade to 3.11+ syntax (e.g. datetime.UTC) +"grpc_servicer/**" = ["UP017"] [format] # Black-compatible defaults From 05e2a6a3707541506575db15d81d0ee28203f935 Mon Sep 17 00:00:00 2001 From: Chang Su Date: Tue, 31 Mar 2026 17:37:16 -0700 Subject: [PATCH 4/6] fix(servicer): update get_zmq_socket import path for sglang v0.5.10rc0 get_zmq_socket was moved from sglang.srt.utils to sglang.srt.utils.network in newer sglang versions. Signed-off-by: Chang Su --- grpc_servicer/smg_grpc_servicer/sglang/request_manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/grpc_servicer/smg_grpc_servicer/sglang/request_manager.py b/grpc_servicer/smg_grpc_servicer/sglang/request_manager.py index 2183fa383d..8814f7f702 100644 --- a/grpc_servicer/smg_grpc_servicer/sglang/request_manager.py +++ b/grpc_servicer/smg_grpc_servicer/sglang/request_manager.py @@ -35,7 +35,8 @@ real_time, ) from sglang.srt.server_args import PortArgs, ServerArgs -from sglang.srt.utils import get_or_create_event_loop, get_zmq_socket, kill_process_tree +from sglang.srt.utils import get_or_create_event_loop, kill_process_tree +from sglang.srt.utils.network import get_zmq_socket from sglang.utils import get_exception_traceback logger = logging.getLogger(__name__) From 39361e6c677508c66c057ad55824eefad3bce896 Mon Sep 17 00:00:00 2001 From: Chang Su Date: Tue, 31 Mar 2026 17:43:47 -0700 Subject: [PATCH 5/6] fix(servicer): bump sglang dep to >=0.5.10rc0 get_zmq_socket moved to sglang.srt.utils.network in 0.5.10rc0. The old sglang>=0.5.9 constraint allowed versions that lack this path. Signed-off-by: Chang Su --- grpc_servicer/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grpc_servicer/pyproject.toml b/grpc_servicer/pyproject.toml index a2eb634949..28b0c31205 100644 --- a/grpc_servicer/pyproject.toml +++ b/grpc_servicer/pyproject.toml @@ -31,7 +31,7 @@ classifiers = [ [project.optional-dependencies] vllm = ["vllm>=0.17.0"] -sglang = ["sglang>=0.5.9"] +sglang = ["sglang>=0.5.10rc0"] [project.urls] Homepage = "https://github.com/lightseekorg/smg" From 40c439dfea6eea35f91aa7fac76f403e959a461f Mon Sep 17 00:00:00 2001 From: Chang Su Date: Tue, 31 Mar 2026 18:18:54 -0700 Subject: [PATCH 6/6] fix(test): remove stale sglang stop sequence trim override MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sglang v0.5.10rc0 no longer trims stop sequences in streaming for Harmony models — behavior now matches the class default (STOP_SEQUENCE_TRIMMED = False). Remove the sglang-specific override. Signed-off-by: Chang Su --- e2e_test/chat_completions/test_openai_server.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/e2e_test/chat_completions/test_openai_server.py b/e2e_test/chat_completions/test_openai_server.py index 49631c720d..517cdbb4aa 100644 --- a/e2e_test/chat_completions/test_openai_server.py +++ b/e2e_test/chat_completions/test_openai_server.py @@ -11,7 +11,6 @@ import logging import pytest -from infra import is_sglang logger = logging.getLogger(__name__) @@ -392,8 +391,6 @@ def test_chat_completion_stream(self, model, api_client, logprobs, parallel_samp super().test_chat_completion_stream(model, api_client, logprobs, parallel_sample_num) def test_stop_sequences_stream(self, model, api_client): - if is_sglang(): - self.STOP_SEQUENCE_TRIMMED = True super().test_stop_sequences_stream(model, api_client) @pytest.mark.skip(reason="gpt-oss models don't support regex constraints")