|
15 | 15 | from sglang.srt.server_args import ServerArgs |
16 | 16 |
|
17 | 17 | from dynamo._core import get_reasoning_parser_names, get_tool_parser_names |
| 18 | +from dynamo.runtime.logging import configure_dynamo_logging |
18 | 19 | from dynamo.sglang import __version__ |
19 | 20 |
|
| 21 | +configure_dynamo_logging() |
| 22 | + |
20 | 23 | DEFAULT_ENDPOINT = "dyn://dynamo.backend.generate" |
21 | 24 | DYNAMO_ARGS: Dict[str, Dict[str, Any]] = { |
22 | 25 | "endpoint": { |
@@ -80,6 +83,36 @@ def _set_serving_strategy(self): |
80 | 83 | return DisaggregationMode.DECODE |
81 | 84 |
|
82 | 85 |
|
| 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 | + |
83 | 116 | def parse_args(args: list[str]) -> Config: |
84 | 117 | """ |
85 | 118 | Parse all arguments and return Config with server_args and dynamo_args |
@@ -138,13 +171,24 @@ def parse_args(args: list[str]) -> Config: |
138 | 171 |
|
139 | 172 | parsed_namespace, parsed_component_name, parsed_endpoint_name = endpoint_parts |
140 | 173 |
|
| 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 | + |
141 | 185 | dynamo_args = DynamoArgs( |
142 | 186 | namespace=parsed_namespace, |
143 | 187 | component=parsed_component_name, |
144 | 188 | endpoint=parsed_endpoint_name, |
145 | 189 | 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, |
148 | 192 | ) |
149 | 193 | logging.debug(f"Dynamo args: {dynamo_args}") |
150 | 194 |
|
|
0 commit comments