Commit c467df23 authored by Your Name's avatar Your Name

Add tool_call parser format in QwenParser

Support for:
<tool_call>
<tool>
<action>search</action>
<parameters>
  <query>...</query>
</parameters>
</tool>
</tool_call>
parent 2d625c33
...@@ -246,6 +246,25 @@ class QwenParser(BaseParser): ...@@ -246,6 +246,25 @@ class QwenParser(BaseParser):
args = {k.strip(): self._relaxed_val(v) for k, v in params} args = {k.strip(): self._relaxed_val(v) for k, v in params}
found.append(self._to_oa(name.strip(), args)) found.append(self._to_oa(name.strip(), args))
if found: break # Circuit breaker if found: break # Circuit breaker
# NEW: Support <tool_call><tool><action>name</action><parameters>...</parameters></tool></tool_call>
if not found:
custom_pattern = r'<tool_call>\s*<tool>\s*<action>(.*?)</action>\s*<parameters>(.*?)</parameters>\s*</tool>\s*</tool_call>'
for match in re.findall(custom_pattern, text, re.DOTALL | re.IGNORECASE):
action, params_xml = match
# Try to parse params as JSON
try:
params = json.loads(params_xml.strip())
except:
# Fallback: extract key-value pairs
params = {}
for prop_match in re.findall(r'<(\w+)>(.*?)</\1>', params_xml, re.DOTALL):
k, v = prop_match
params[k] = v.strip()
if action.strip():
found.append(self._to_oa(action.strip(), params))
if found: break # Circuit breaker
return found return found
def _relaxed_val(self, val): def _relaxed_val(self, val):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment