We use our own implementation of function calling orchestrated by chain-of-thought. The CoT allows us more granular control over the function calls, rather than zero-shotting and hoping the LLM selects the right functions.
do you prompt chain-of-thought, use a model trained on chain-of-thought, or use o1?
I ask because I am interested in trying out function-calling (without the problem you mentioned of zero-shot sometimes getting it wrong, and then having to validate it and re-send it with a correction prompt if it's invalid)