Skip to content

Commit 90dd84b

Browse files
committed
Simplify common structure, remove old sglang file
1 parent 59f0bcf commit 90dd84b

File tree

5 files changed

+76
-107
lines changed

5 files changed

+76
-107
lines changed

components/backends/sglang/src/dynamo/sglang/args.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from sglang.srt.server_args import ServerArgs
1616

1717
from dynamo._core import get_reasoning_parser_names, get_tool_parser_names
18+
from dynamo.common.config_dump import register_encoder
1819
from dynamo.runtime.logging import configure_dynamo_logging
1920
from dynamo.sglang import __version__
2021

@@ -77,7 +78,7 @@ class DynamoArgs:
7778

7879
# preprocessing options
7980
use_sglang_tokenizer: bool = False
80-
dump_config_to: Optional[str] = False
81+
dump_config_to: Optional[str] = None
8182

8283

8384
class DisaggregationMode(Enum):
@@ -101,6 +102,20 @@ def _set_serving_strategy(self):
101102
return DisaggregationMode.DECODE
102103

103104

105+
# Register SGLang-specific encoders with the shared system
106+
@register_encoder(Config)
107+
def _preprocess_for_encode_config(
108+
config: Config,
109+
) -> Dict[str, Any]: # pyright: ignore[reportUnusedFunction]
110+
return {
111+
"server_args": config.server_args,
112+
"dynamo_args": config.dynamo_args,
113+
"serving_mode": config.serving_mode.value
114+
if config.serving_mode is not None
115+
else "None",
116+
}
117+
118+
104119
def _set_parser(
105120
sglang_str: Optional[str],
106121
dynamo_str: Optional[str],

components/backends/sglang/src/dynamo/sglang/main.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import uvloop
1212
from sglang.srt.utils import get_ip
1313

14-
import dynamo.sglang.utils.debug_handler # noqa: F401
1514
from dynamo.common.config_dump import dump_config
1615
from dynamo.llm import ZmqKvEventPublisher, ZmqKvEventPublisherConfig
1716
from dynamo.runtime import DistributedRuntime, dynamo_worker

components/backends/sglang/src/dynamo/sglang/utils/debug_handler.py

Lines changed: 0 additions & 39 deletions
This file was deleted.

components/common/src/dynamo/common/config_dump/config_dumper.py

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22
# SPDX-License-Identifier: Apache-2.0
33

44
import argparse
5+
import dataclasses
6+
import functools
7+
import json
58
import logging
69
import pathlib
10+
from enum import Enum
711
from typing import Any, Dict, Optional
812

9-
from dynamo.common.utils import canonical_json_encoder, get_dynamo_version
13+
from dynamo.common import __version__
1014

1115
from .environment import get_environment_vars
1216
from .system_info import get_runtime_info, get_system_info
@@ -86,7 +90,7 @@ def get_config_dump(config: Any, extra_info: Dict[str, str] = {}) -> str:
8690
"environment": get_environment_vars(),
8791
"config": config,
8892
"runtime_info": get_runtime_info(),
89-
"dynamo_version": get_dynamo_version(),
93+
"dynamo_version": __version__,
9094
}
9195

9296
# Add common versions
@@ -126,3 +130,57 @@ def add_config_dump_args(parser: argparse.ArgumentParser):
126130
default=None,
127131
help="Dump debug config to the specified file path. If not specified, the config will be dumped to stdout at INFO level.",
128132
)
133+
134+
135+
@functools.singledispatch
136+
def _preprocess_for_encode(obj: object) -> object:
137+
"""
138+
Single dispatch function for preprocessing objects before JSON encoding.
139+
140+
This function should be extended using @register_encoder decorator
141+
for backend-specific types.
142+
"""
143+
if dataclasses.is_dataclass(obj) and not isinstance(obj, type):
144+
return dataclasses.asdict(obj)
145+
logger.warning(f"Unknown type {type(obj)}, using __dict__ or str(obj)")
146+
if hasattr(obj, "__dict__"):
147+
return obj.__dict__
148+
return str(obj)
149+
150+
151+
def register_encoder(type_class):
152+
"""
153+
Decorator to register custom encoders for specific types.
154+
155+
Usage:
156+
@register_encoder(MyClass)
157+
def encode_my_class(obj: MyClass):
158+
return {"field": obj.field}
159+
"""
160+
logger.info(f"Registering encoder for {type_class}")
161+
return _preprocess_for_encode.register(type_class)
162+
163+
164+
@register_encoder(set)
165+
def _preprocess_for_encode_set(
166+
obj: set,
167+
) -> list: # pyright: ignore[reportUnusedFunction]
168+
return sorted(list(obj))
169+
170+
171+
@register_encoder(Enum)
172+
def _preprocess_for_encode_enum(
173+
obj: Enum,
174+
) -> str: # pyright: ignore[reportUnusedFunction]
175+
return str(obj)
176+
177+
178+
# Create a canonical JSON encoder with consistent formatting
179+
canonical_json_encoder = json.JSONEncoder(
180+
ensure_ascii=False,
181+
separators=(",", ":"),
182+
allow_nan=False,
183+
sort_keys=True,
184+
indent=None,
185+
default=_preprocess_for_encode,
186+
)

components/common/src/dynamo/common/utils.py

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)