use llguidance::api::{GrammarWithLexer, TopLevelGrammar};
use serde_json::json;
use crate::Tool;
pub fn tool_call_grammar_for_tool(
tool_name: Option<&str>,
tools: Option<&[Tool]>,
) -> TopLevelGrammar {
let args_schema = tool_name
.and_then(|name| {
let tools = tools?;
let bare_name = name.strip_prefix("functions.").unwrap_or(name);
tools.iter().find(|t| t.function.name == bare_name)
})
.and_then(|t| t.function.strict_parameters_schema())
.unwrap_or_else(|| json!({"type": "object"}));
let json_body = GrammarWithLexer {
json_schema: Some(args_schema),
..Default::default()
};
TopLevelGrammar {
grammars: vec![json_body],
max_tokens: None,
}
}