@@ -212,31 +212,18 @@ def _preprocess_for_encode_config(
212212 }
213213
214214
215- def _set_parser (
216- sglang_str : Optional [str ],
217- dynamo_str : Optional [str ],
218- arg_name : str = "tool-call-parser" ,
219- ) -> Optional [str ]:
220- """Resolve parser name from SGLang and Dynamo arguments.
221-
222- Args:
223- sglang_str: Parser value from SGLang argument.
224- dynamo_str: Parser value from Dynamo argument.
225- arg_name: Name of the parser argument for logging.
226-
227- Returns:
228- Resolved parser name, preferring Dynamo's value if both set.
229- """
230- if sglang_str is not None and dynamo_str is not None :
231- logging .warning (
232- f"--dyn-{ arg_name } and --{ arg_name } are both set. Giving preference to --dyn-{ arg_name } "
215+ def _validate_parser (
216+ sglang_val : Optional [str ], dynamo_val : Optional [str ], name : str , valid : list
217+ ) -> None :
218+ """Validate --{name} (SGLang) and --dyn-{name} (Dynamo) parser flags."""
219+ if sglang_val and dynamo_val :
220+ logging .error (f"Cannot use both --{ name } and --dyn-{ name } ." )
221+ sys .exit (1 )
222+ if dynamo_val and dynamo_val not in valid :
223+ logging .error (
224+ f"--dyn-{ name } '{ dynamo_val } ' is not supported. Valid choices: { valid } "
233225 )
234- return dynamo_str
235- elif sglang_str is not None :
236- logging .warning (f"--dyn-{ arg_name } is not set. Using --{ arg_name } ." )
237- return sglang_str
238- else :
239- return dynamo_str
226+ sys .exit (1 )
240227
241228
242229def _extract_config_section (
@@ -453,33 +440,23 @@ async def parse_args(args: list[str]) -> Config:
453440
454441 parsed_namespace , parsed_component_name , parsed_endpoint_name = endpoint_parts
455442
456- tool_call_parser = _set_parser (
443+ # Validate parser flags: error if both --{name} and --dyn-{name} are set,
444+ # and validate --dyn-{name} against Dynamo's supported parsers.
445+ # SGLang's --{name} is validated by SGLang's own argparse choices.
446+ _validate_parser (
457447 parsed_args .tool_call_parser ,
458448 parsed_args .dyn_tool_call_parser ,
459449 "tool-call-parser" ,
450+ get_tool_parser_names (),
460451 )
461- reasoning_parser = _set_parser (
452+ _validate_parser (
462453 parsed_args .reasoning_parser ,
463454 parsed_args .dyn_reasoning_parser ,
464455 "reasoning-parser" ,
456+ get_reasoning_parser_names (),
465457 )
466-
467- # Validate parser names when using Dynamo's tokenizer (not SGLang's)
468- if not parsed_args .use_sglang_tokenizer :
469- if tool_call_parser and tool_call_parser not in get_tool_parser_names ():
470- logging .error (
471- f"Tool call parser '{ tool_call_parser } ' is not valid when using Dynamo's tokenizer. "
472- f"Valid parsers are: { get_tool_parser_names ()} . "
473- f"Use --use-sglang-tokenizer to delegate tool parsing to SGLang."
474- )
475- sys .exit (1 )
476- if reasoning_parser and reasoning_parser not in get_reasoning_parser_names ():
477- logging .error (
478- f"Reasoning parser '{ reasoning_parser } ' is not valid when using Dynamo's tokenizer. "
479- f"Valid parsers are: { get_reasoning_parser_names ()} . "
480- f"Use --use-sglang-tokenizer to delegate reasoning parsing to SGLang."
481- )
482- sys .exit (1 )
458+ tool_call_parser = parsed_args .dyn_tool_call_parser
459+ reasoning_parser = parsed_args .dyn_reasoning_parser
483460
484461 if parsed_args .custom_jinja_template and parsed_args .use_sglang_tokenizer :
485462 logging .error (
0 commit comments