This PR aims to implement function call logic while sending function header to ChatGPT.
Preciously, Web browsing and Vectorstor query function is done before sending message to LLM, but in this commit, ChatGPT will invoke calling function while streaming text.
The function call will be handled when ChatFunctionCallException is raised. Function name and proper arguments will be included in the exception itself.