You might put in a time log, and discover where the actual delay is coming from.
For example, are you using an external module that is getting invoked each time, resetting all its variables and instantiating the same functions again?
One could consider making your different API functions as class objects, making a function-holding object that stays in memory, and then just changing the state of the input and calling its method to retrieve data.
Also, if the function is doing something like recording data to a database, which doesn’t need a return value or AI success status, you can send that task off to its own thread and return a function role message immediately, implying success.
If you don’t want the AI to be calling functions all the time for things it can answer itself, it helps to inform it of what it is able to answer. The AI can’t be aware of its own knowledge, because it hasn’t generated the tokens (with probabilities informed by training) to see if it knows.