Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sgl-router/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ tokio-stream = { version = "0.1", features = ["sync"] }
anyhow = "1.0"
tokenizers = { version = "0.22.0" }
tiktoken-rs = { version = "0.7.0" }
minijinja = { version = "2.0", features = ["unstable_machinery"] }
minijinja = { version = "2.0", features = ["unstable_machinery", "json", "builtins"] }
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
hf-hub = { version = "0.4.3", features = ["tokio"] }
rmcp = { version = "0.6.3", features = ["client", "server",
Expand Down
9 changes: 2 additions & 7 deletions sgl-router/src/tool_parser/parsers/json_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -174,11 +174,6 @@ impl JsonParser {

Ok(tools)
}

/// Check if text contains tool calls
fn has_tool_call(&self, text: &str) -> bool {
text.contains('[') || text.contains('{')
}
}

impl Default for JsonParser {
Expand Down Expand Up @@ -216,7 +211,7 @@ impl ToolParser for JsonParser {
let current_text = &self.buffer.clone();

// Check if current_text has tool_call
let has_tool_start = self.has_tool_call(current_text)
let has_tool_start = self.has_tool_markers(current_text)
|| (self.current_tool_id >= 0 && current_text.starts_with(self.tool_call_separator));

if !has_tool_start {
Expand Down Expand Up @@ -263,7 +258,7 @@ impl ToolParser for JsonParser {

fn has_tool_markers(&self, text: &str) -> bool {
let trimmed = text.trim();
(trimmed.starts_with('[') || trimmed.starts_with('{')) && trimmed.contains(r#""name""#)
trimmed.starts_with('[') || trimmed.starts_with('{')
}

fn get_unstreamed_tool_args(&self) -> Option<Vec<ToolCallItem>> {
Expand Down
10 changes: 2 additions & 8 deletions sgl-router/src/tool_parser/parsers/llama_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,6 @@ impl LlamaParser {

Ok(all_tools)
}

/// Check if text has tool call
fn has_tool_call(&self, text: &str) -> bool {
text.contains("<|python_tag|>") || text.contains('{')
}
}

impl Default for LlamaParser {
Expand Down Expand Up @@ -184,7 +179,7 @@ impl ToolParser for LlamaParser {
let current_text = &self.buffer.clone();

// Check if current_text has tool_call
let has_tool_start = self.has_tool_call(current_text)
let has_tool_start = self.has_tool_markers(current_text)
|| (self.current_tool_id >= 0 && current_text.starts_with(self.tool_call_separator));

if !has_tool_start {
Expand Down Expand Up @@ -230,8 +225,7 @@ impl ToolParser for LlamaParser {

fn has_tool_markers(&self, text: &str) -> bool {
// Llama format if contains python_tag or starts with JSON object
text.contains("<|python_tag|>")
|| (text.trim_start().starts_with('{') && text.contains(r#""name""#))
text.contains("<|python_tag|>") || text.trim_start().starts_with('{')
}

fn get_unstreamed_tool_args(&self) -> Option<Vec<crate::tool_parser::types::ToolCallItem>> {
Expand Down
1 change: 0 additions & 1 deletion sgl-router/tests/tool_parser_llama.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ async fn test_llama_format_detection() {
assert!(parser.has_tool_markers(r#"<|python_tag|>{"name": "test"}"#));
assert!(parser.has_tool_markers(r#"{"name": "test", "parameters": {}}"#));
assert!(!parser.has_tool_markers("plain text"));
assert!(!parser.has_tool_markers(r#"{"key": "value"}"#)); // No name field
}

#[tokio::test]
Expand Down
Loading