{"id":1127,"date":"2025-08-22T10:29:26","date_gmt":"2025-08-22T17:29:26","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/foundry\/?p=1127"},"modified":"2025-08-22T10:29:26","modified_gmt":"2025-08-22T17:29:26","slug":"unlocking-gpt-5s-freeform-tool-calling-a-new-era-of-seamless-integration","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/foundry\/unlocking-gpt-5s-freeform-tool-calling-a-new-era-of-seamless-integration\/","title":{"rendered":"Unlocking GPT-5\u2019s Freeform Tool Calling: A New Era of Seamless Integration"},"content":{"rendered":"<p><span data-contrast=\"auto\">GPT-5 models are now available in Azure AI Foundry via Azure OpenAI. Designed for advanced reasoning and generation. One of the core capabilities of the model is <\/span><b><span data-contrast=\"auto\">tool calling<\/span><\/b><span data-contrast=\"auto\">, which enables it to interact with external systems by generating and sending raw text directly to tools.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span style=\"font-size: 18pt;\"><b>What Is Freeform Tool Calling in GPT-5?<\/b>\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Freeform tool calling is a powerful capability in GPT-5 that allows the model to send raw text payloads like Python scripts, SQL queries, or configuration files directly to external tools without needing to wrap them in structured JSON. This means the model can generate code or text in the exact format your tool expects, making integration smoother and more flexible.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">While traditional tool calling supports complex tasks such as code execution, configuration generation, and scripting, it typically requires strict formatting. Freeform tool calling, by contrast, allows GPT-5 to interact with tools using natural text output, which:<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Simplifies development workflows<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Enables richer and more intuitive interactions<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Maintains support for complex tasks in a more flexible and expressive way<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/08\/GPT-5_GIF-4.gif\" alt=\"video not found\" width=\"1920\" height=\"1080\" \/><\/p>\n<p><span data-contrast=\"auto\">To better understand how freeform tool calling works in practice, Lets walk through the demo demonstrated in the gif by Liam Cavanagh that chains two tools together- one for SQL and one for Python.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Step 1: Setup<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">We begin by loading environment variables from a .env file and initializing the Azure OpenAI client. The client supports both <\/span><b><span data-contrast=\"auto\">API key<\/span><\/b><span data-contrast=\"auto\"> and <\/span><b><span data-contrast=\"auto\">Entra ID<\/span><\/b><span data-contrast=\"auto\"> authentication:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/08\/Screenshot-2025-08-19-150404.png\" alt=\"Image not found\" width=\"1477\" height=\"542\" \/><\/p>\n<p><b><span data-contrast=\"auto\">Step 2: Define Custom Tools<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">We define two tools:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">sql_exec_sqlite: Executes SQL and returns CSV from the final SELECT.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">code_exec_python: Executes raw Python and returns stdout.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/08\/Screenshot-2025-08-19-150543.png\" alt=\"image not found\" width=\"699\" height=\"325\" \/><\/p>\n<p><b><span data-contrast=\"auto\">Step 3: Prompt GPT-5<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">We give GPT-5 a prompt to:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li><span data-contrast=\"auto\">Generate SQL to create a sales table and compute revenue.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Call sql_exec_sqlite to execute it.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">Call code_exec_python to format the result.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/08\/Screenshot-2025-08-19-150832.png\" alt=\"Image not found\" width=\"1825\" height=\"263\" \/><\/p>\n<p><b><span data-contrast=\"auto\">Step 4: Run the Conversation<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">We use a loop to detect tool calls, execute them, and feed the result back to GPT-5.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The run conversation() function drives the interaction:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">It sends the prompt to GPT-5.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Detects if the model wants to call a tool.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Executes the tool locally.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Sends the result back to the model as a function_call_output.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Prints the final assistant response.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">This loop ensures that the model can chain tool calls and maintain context across steps.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium\" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/08\/Screenshot-2025-08-19-151027.png\" alt=\"image not found\" width=\"1179\" height=\"453\" \/><\/p>\n<p><b><span data-contrast=\"auto\">Result<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The final output is a clean, formatted summary of product revenues, generated and executed entirely through GPT-5\u2019s freeform tool calling.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone \" src=\"https:\/\/devblogs.microsoft.com\/foundry\/wp-content\/uploads\/sites\/89\/2025\/08\/Screenshot-2025-08-19-162710-1.png\" alt=\"image not found\" width=\"454\" height=\"465\" \/><\/p>\n<p><b><span data-contrast=\"auto\">Key Takeaways<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">No JSON required<\/span><\/b><span data-contrast=\"auto\">: GPT-5 sends raw code directly to tools.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Natural output<\/span><\/b><span data-contrast=\"auto\">: Improves usability and readability.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Multi-tool orchestration<\/span><\/b><span data-contrast=\"auto\">: Handles complex workflows with precision.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li aria-setsize=\"-1\" data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Ideal for developers<\/span><\/b><span data-contrast=\"auto\">: Enables dynamic scripting, benchmarking, and automation.<\/span><\/li>\n<\/ul>\n<p><b>Next Steps<\/b><\/p>\n<ul>\n<li><span data-contrast=\"none\">Learn more with <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/ai-foundry\/openai\/overview\">What is Azure OpenAI in Azure AI Foundry Models? | Microsoft Learn<\/a><\/span><\/li>\n<li>Learn more about <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/gpt-5-in-azure-ai-foundry-the-future-of-ai-apps-and-agents-starts-here\/?msockid=0030611da9e260e628f5742ca8586188\">GPT-5 in Azure AI Foundry: The future of AI apps and agents starts here | Microsoft Azure Blog<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>GPT-5 models are now available in Azure AI Foundry via Azure OpenAI. Designed for advanced reasoning and generation. One of the core capabilities of the model is tool calling, which enables it to interact with external systems by generating and sending raw text directly to tools.\u00a0 What Is Freeform Tool Calling in GPT-5?\u00a0 Freeform tool [&hellip;]<\/p>\n","protected":false},"author":192932,"featured_media":1563,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1127","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-foundry"],"acf":[],"blog_post_summary":"<p>GPT-5 models are now available in Azure AI Foundry via Azure OpenAI. Designed for advanced reasoning and generation. One of the core capabilities of the model is tool calling, which enables it to interact with external systems by generating and sending raw text directly to tools.\u00a0 What Is Freeform Tool Calling in GPT-5?\u00a0 Freeform tool [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/1127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/users\/192932"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/comments?post=1127"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/posts\/1127\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media\/1563"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/media?parent=1127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/categories?post=1127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/foundry\/wp-json\/wp\/v2\/tags?post=1127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}