use super::{JsonToolCallConfig, JsonToolCallParser, JsonToolCallWhitespace};
use crate::vllm_tool_parser::{Result, Tool, ToolParser, ToolParserOutput};
const QWEN_XML_CONFIG: JsonToolCallConfig = JsonToolCallConfig {
parser_name: "Qwen XML",
start_marker: "<tool_call>",
end_marker: "</tool_call>",
marker_whitespace: JsonToolCallWhitespace::Exact("\n"),
delimiter: None,
name_key: "name",
arguments_key: &["arguments"],
};
pub struct Qwen3XmlToolParser {
inner: JsonToolCallParser,
}
impl Qwen3XmlToolParser {
fn new(_tools: &[Tool]) -> Self {
Self {
inner: JsonToolCallParser::new(QWEN_XML_CONFIG),
}
}
}
impl ToolParser for Qwen3XmlToolParser {
fn create(tools: &[Tool]) -> Result<Box<dyn ToolParser>>
where
Self: Sized + 'static,
{
Ok(Box::new(Self::new(tools)))
}
fn parse_into(&mut self, chunk: &str, output: &mut ToolParserOutput) -> Result<()> {
self.inner.parse_into(chunk, output)
}
fn finish(&mut self) -> Result<ToolParserOutput> {
self.inner.finish()
}
fn reset(&mut self) -> String {
self.inner.reset()
}
}