Checklist
Describe the bug
function call 有一个严重的bug,非流式解析tool 参数,会把参数值:"102020_499494994", 解析成 "102020499494994", 下划线是python 的特性,数字之间可以用_分割。tool 解析参数的代码:
def parse_arguments(
json_value: str, arg_type: Optional[str] = None
) -> Tuple[Any, bool]:
"""Parse argument value with multiple fallback strategies.
Args:
json_value: Raw string value to parse
arg_type: Expected type hint ('string', 'number', 'object', etc.)
Returns:
Tuple of (parsed_value, is_valid_json)
"""
# Strategy 1: Direct JSON parsing
try:
parsed_value = json.loads(json_value)
# Type coercion for number type
if arg_type == "number" and isinstance(parsed_value, str):
parsed_value = _convert_to_number(parsed_value)
return parsed_value, True
except (json.JSONDecodeError, ValueError):
pass
# Strategy 2: Unescape and parse
try:
wrapped = json.loads('{"tmp": "' + json_value + '"}')
parsed_value = json.loads(wrapped["tmp"])
if arg_type == "number" and isinstance(parsed_value, str):
parsed_value = _convert_to_number(parsed_value)
return parsed_value, True
except (json.JSONDecodeError, ValueError, KeyError):
pass
# Strategy 3: ast.literal_eval
try:
parsed_value = ast.literal_eval(json_value) # 会把字符串"28383_99494", 的下划线去掉
return parsed_value, True
except (ValueError, SyntaxError):
pass
# Strategy 4: Treat as string
try:
quoted_value = json.dumps(str(json_value))
return json.loads(quoted_value), True
except (json.JSONDecodeError, ValueError):
return json_value, False
Reproduction
glm4_moe_detector.py
Environment
Any Environment
Example:python3 -m sglang
Checklist
Describe the bug
function call 有一个严重的bug,非流式解析tool 参数,会把参数值:"102020_499494994", 解析成 "102020499494994", 下划线是python 的特性,数字之间可以用_分割。tool 解析参数的代码:
Reproduction
glm4_moe_detector.py
Environment
Any Environment
Example:python3 -m sglang