Skip to content

Commit d34cfdd

Browse files
ayushag-nvtedzhouhk
authored andcommitted
chore: add preference logic for using tool-call and reasoning parsers for sglang (#2922)
Signed-off-by: ayushag <ayushag@nvidia.com> Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
1 parent 8b1b24c commit d34cfdd

File tree

1 file changed

+46
-2
lines changed
  • components/backends/sglang/src/dynamo/sglang

1 file changed

+46
-2
lines changed

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

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
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.runtime.logging import configure_dynamo_logging
1819
from dynamo.sglang import __version__
1920

21+
configure_dynamo_logging()
22+
2023
DEFAULT_ENDPOINT = "dyn://dynamo.backend.generate"
2124
DYNAMO_ARGS: Dict[str, Dict[str, Any]] = {
2225
"endpoint": {
@@ -80,6 +83,36 @@ def _set_serving_strategy(self):
8083
return DisaggregationMode.DECODE
8184

8285

86+
def _set_parser(
87+
sglang_str: Optional[str],
88+
dynamo_str: Optional[str],
89+
arg_name: str = "tool-call-parser",
90+
) -> Optional[str]:
91+
# If both are present, give preference to dynamo_str
92+
if sglang_str is not None and dynamo_str is not None:
93+
logging.warning(
94+
f"--dyn-{arg_name} and --{arg_name} are both set. Giving preference to --dyn-{arg_name}"
95+
)
96+
return dynamo_str
97+
# If dynamo_str is not set, use try to use sglang_str if it matches with the allowed parsers
98+
elif sglang_str is not None:
99+
logging.warning(f"--dyn-{arg_name} is not set. Using --{arg_name}.")
100+
if arg_name == "tool-call-parser" and sglang_str not in get_tool_parser_names():
101+
raise ValueError(
102+
f"--{arg_name} is not a valid tool call parser. Valid parsers are: {get_tool_parser_names()}"
103+
)
104+
elif (
105+
arg_name == "reasoning-parser"
106+
and sglang_str not in get_reasoning_parser_names()
107+
):
108+
raise ValueError(
109+
f"--{arg_name} is not a valid reasoning parser. Valid parsers are: {get_reasoning_parser_names()}"
110+
)
111+
return sglang_str
112+
else:
113+
return dynamo_str
114+
115+
83116
def parse_args(args: list[str]) -> Config:
84117
"""
85118
Parse all arguments and return Config with server_args and dynamo_args
@@ -138,13 +171,24 @@ def parse_args(args: list[str]) -> Config:
138171

139172
parsed_namespace, parsed_component_name, parsed_endpoint_name = endpoint_parts
140173

174+
tool_call_parser = _set_parser(
175+
parsed_args.tool_call_parser,
176+
parsed_args.dyn_tool_call_parser,
177+
"tool-call-parser",
178+
)
179+
reasoning_parser = _set_parser(
180+
parsed_args.reasoning_parser,
181+
parsed_args.dyn_reasoning_parser,
182+
"reasoning-parser",
183+
)
184+
141185
dynamo_args = DynamoArgs(
142186
namespace=parsed_namespace,
143187
component=parsed_component_name,
144188
endpoint=parsed_endpoint_name,
145189
migration_limit=parsed_args.migration_limit,
146-
tool_call_parser=parsed_args.dyn_tool_call_parser,
147-
reasoning_parser=parsed_args.dyn_reasoning_parser,
190+
tool_call_parser=tool_call_parser,
191+
reasoning_parser=reasoning_parser,
148192
)
149193
logging.debug(f"Dynamo args: {dynamo_args}")
150194

0 commit comments

Comments
 (0)