""" GLM 4.7 tool call parser. Same as GLM 4.5 but with slightly different regex patterns. The tool_call tags may wrap differently and arg parsing handles newlines between key/value pairs. Based on VLLM's Glm47MoeModelToolParser (extends Glm4MoeModelToolParser). """ import re from environments.tool_call_parsers import ParseResult, register_parser from environments.tool_call_parsers.glm45_parser import Glm45ToolCallParser @register_parser("glm47") class Glm47ToolCallParser(Glm45ToolCallParser): """ Parser for GLM 4.7 tool calls. Extends GLM 4.5 with updated regex patterns. """ def __init__(self): super().__init__() # GLM 4.7 uses a slightly different detail regex that includes # the wrapper and optional arg_key content self.FUNC_DETAIL_REGEX = re.compile( r"(.*?)(.*?)?", re.DOTALL ) # GLM 4.7 handles newlines between arg_key and arg_value tags self.FUNC_ARG_REGEX = re.compile( r"(.*?)(?:\\n|\s)*(.*?)", re.DOTALL, )