Right now there’s no way to say “the model must call tool X, but can also call other tools in the same turn.” You can force a specific function, but then that’s the only call it makes. You can set tool_choice: "required" to get parallel calls, but there’s no guarantee a particular tool is in the mix.
My situation
I have an agent that needs to call update_plan on the first turn for task tracking. I also want the model to start doing real work in that same response - reading files, searching, exploring - in parallel. Today I can’t get both.
What exists today
- Forced function (
tool_choice: {"type": "function", "name": "update_plan"}): Guarantees the call, but it’s the only one. No parallel work happens. "required": Parallel calls work, but nothing guaranteesupdate_planis one of them.allowed_toolswithmode: Restricts the tool set, still doesn’t guarantee a specific tool gets called.
What I’d like
Something that means: “you must call update_plan at least once, and you can call whatever else you want too.” Required inclusion, not exclusive forcing.
Could look something like:
{
"tool_choice": "required",
"required_tools": [
{ "type": "function", "name": "update_plan" }
],
"parallel_tool_calls": true
}
Or as an extension to tool_choice:
{
"tool_choice": {
"type": "required_tools",
"must_include": [
{ "type": "function", "name": "update_plan" }
],
"allow_additional": true
},
"parallel_tool_calls": true
}
Not married to either shape - just need the capability.
Why it matters
Without this, the workaround is to set tool_choice: "required", hope the model includes update_plan, and if it doesn’t, send a follow-up call that forces it. That works but it’s an extra round-trip and more orchestration code for something that should be expressible upfront.
If there’s already a way to do this that I’m missing, I’d love to know.

