https://developers.openai.com/api/docs/guides/tools-programmatic-tool-calling