[{"data":1,"prerenderedAt":2528},["ShallowReactive",2],{"navigation_docs":3,"-ai-sdk-agent-loop":208,"-ai-sdk-agent-loop-surround":2523},[4,33,60,82,109,151],{"title":5,"path":6,"stem":7,"children":8,"icon":32},"OpenSSL","/openssl","1.openssl/1.index",[9,12,17,22,27],{"title":10,"path":6,"stem":7,"icon":11},"Overview","i-lucide-info",{"title":13,"path":14,"stem":15,"icon":16},"Certificates","/openssl/certificates","1.openssl/2.certificates","i-lucide-file-badge",{"title":18,"path":19,"stem":20,"icon":21},"Keys","/openssl/keys","1.openssl/3.keys","i-lucide-key",{"title":23,"path":24,"stem":25,"icon":26},"Encryption","/openssl/encryption","1.openssl/4.encryption","i-lucide-shield",{"title":28,"path":29,"stem":30,"icon":31},"Verification","/openssl/verification","1.openssl/5.verification","i-lucide-check-circle","i-lucide-lock",{"title":34,"path":35,"stem":36,"children":37,"icon":59},"Voice AI","/voice-ai","2.voice-ai/1.index",[38,39,44,49,54],{"title":10,"path":35,"stem":36,"icon":11},{"title":40,"path":41,"stem":42,"icon":43},"Twilio Media Streams","/voice-ai/twilio","2.voice-ai/2.twilio","i-lucide-radio",{"title":45,"path":46,"stem":47,"icon":48},"WebSocket & Streaming","/voice-ai/websocket","2.voice-ai/3.websocket","i-lucide-cable",{"title":50,"path":51,"stem":52,"icon":53},"LLM Integration","/voice-ai/llm","2.voice-ai/4.llm","i-lucide-brain",{"title":55,"path":56,"stem":57,"icon":58},"Speech Services","/voice-ai/speech","2.voice-ai/5.speech","i-lucide-audio-lines","i-lucide-phone",{"title":61,"path":62,"stem":63,"children":64,"icon":81},"Agents","/agents","3.agents/1.index",[65,66,71,76],{"title":10,"path":62,"stem":63,"icon":11},{"title":67,"path":68,"stem":69,"icon":70},"RAG","/agents/rag","3.agents/2.rag","i-lucide-database",{"title":72,"path":73,"stem":74,"icon":75},"ReAct Agents","/agents/react-agents","3.agents/3.react-agents","i-lucide-activity",{"title":77,"path":78,"stem":79,"icon":80},"OpenAI Agent","/agents/openai-agent","3.agents/4.openai-agent","i-lucide-bot","i-lucide-users",{"title":83,"path":84,"stem":85,"children":86,"icon":88},"Context Engineering","/context-engineering","4.context-engineering/1.index",[87,89,94,99,104],{"title":83,"path":84,"stem":85,"icon":88},"i-lucide-brain-circuit",{"title":90,"path":91,"stem":92,"icon":93},"Managing The Context Window","/context-engineering/managing-context-window","4.context-engineering/2.managing-context-window","i-lucide-settings",{"title":95,"path":96,"stem":97,"icon":98},"Sliding Window Strategy","/context-engineering/sliding-window","4.context-engineering/3.sliding-window","i-lucide-arrow-left-right",{"title":100,"path":101,"stem":102,"icon":103},"Token-based Management","/context-engineering/token-based","4.context-engineering/4.token-based","i-lucide-hash",{"title":105,"path":106,"stem":107,"icon":108},"Summarization Techniques","/context-engineering/summarization","4.context-engineering/5.summarization","i-lucide-file-text",{"title":110,"path":111,"stem":112,"children":113,"icon":150},"AI SDK 6","/ai-sdk","5.ai-sdk/1.index",[114,115,120,125,130,135,140,145],{"title":10,"path":111,"stem":112,"icon":11},{"title":116,"path":117,"stem":118,"icon":119},"Installation & Setup","/ai-sdk/installation","5.ai-sdk/2.installation","i-lucide-package",{"title":121,"path":122,"stem":123,"icon":124},"Model Method","/ai-sdk/model","5.ai-sdk/3.model","i-lucide-box",{"title":126,"path":127,"stem":128,"icon":129},"generateText","/ai-sdk/generate-text","5.ai-sdk/4.generate-text","i-lucide-message-square",{"title":131,"path":132,"stem":133,"icon":134},"streamText","/ai-sdk/stream-text","5.ai-sdk/5.stream-text","i-lucide-zap",{"title":136,"path":137,"stem":138,"icon":139},"Structured Output","/ai-sdk/structured-output","5.ai-sdk/6.structured-output","i-lucide-layers",{"title":141,"path":142,"stem":143,"icon":144},"Text Embeddings","/ai-sdk/embeddings","5.ai-sdk/7.embeddings","i-lucide-git-branch",{"title":146,"path":147,"stem":148,"icon":149},"Agent Loop – ToolLoopAgent","/ai-sdk/agent-loop","5.ai-sdk/8.agent-loop","i-lucide-refresh-cw","i-lucide-cpu",{"title":152,"icon":153,"path":154,"stem":155,"children":156,"page":207},"Syntax Reference","i-lucide-book-open","/syntax-reference","999.syntax-reference",[157,162,167,172,177,182,187,192,197,202],{"title":158,"path":159,"stem":160,"icon":161},"Markdown Syntax","/syntax-reference/markdown-syntax","999.syntax-reference/1.markdown-syntax","i-lucide-heading-1",{"title":163,"path":164,"stem":165,"icon":166},"Code Blocks","/syntax-reference/code-blocks","999.syntax-reference/2.code-blocks","i-lucide-code-xml",{"title":168,"path":169,"stem":170,"icon":171},"Introduction","/syntax-reference/introduction","999.syntax-reference/2.introduction","i-lucide-house",{"title":173,"path":174,"stem":175,"icon":176},"Components","/syntax-reference/components","999.syntax-reference/3.components","i-lucide-component",{"title":178,"path":179,"stem":180,"icon":181},"Installation","/syntax-reference/installation","999.syntax-reference/3.installation","i-lucide-download",{"title":183,"path":184,"stem":185,"icon":186},"Images and Embeds","/syntax-reference/images-embeds","999.syntax-reference/4.images-embeds","i-lucide-image",{"title":188,"path":189,"stem":190,"icon":191},"Project Structure","/syntax-reference/project-structure","999.syntax-reference/4.project-structure","i-lucide-folder-tree",{"title":193,"path":194,"stem":195,"icon":196},"Studio module","/syntax-reference/studio","999.syntax-reference/5.studio","i-lucide-mouse-pointer-2",{"title":198,"path":199,"stem":200,"icon":201},"Migration","/syntax-reference/migration","999.syntax-reference/6.migration","i-lucide-replace",{"title":203,"path":204,"stem":205,"icon":206},"Troubleshooting","/syntax-reference/troubleshooting","999.syntax-reference/7.troubleshooting","i-lucide-wrench",false,{"id":209,"title":146,"body":210,"description":2516,"extension":2517,"links":2518,"meta":2519,"navigation":2520,"path":147,"seo":2521,"stem":148,"__hash__":2522},"docs/5.ai-sdk/8.agent-loop.md",{"type":211,"value":212,"toc":2500},"minimark",[213,222,238,243,253,256,260,271,565,567,571,580,811,813,817,823,905,907,914,920,1098,1103,1110,1116,1126,1128,1132,1223,1225,1229,1238,1484,1486,1490,1818,1820,1824,2346,2348,2352,2472,2474,2478,2496],[214,215,217,218],"h1",{"id":216},"agent-loop-toolloopagent","Agent Loop – ",[219,220,221],"code",{},"ToolLoopAgent",[223,224,225,226,230,231,233,234,237],"p",{},"An ",[227,228,229],"strong",{},"agent loop"," lets the model call tools (functions) repeatedly until it has enough information to produce a final answer. ",[219,232,221],{}," is the dedicated class for this in AI SDK 6 — import it directly from ",[219,235,236],{},"ai",".",[239,240,242],"h2",{"id":241},"how-it-works","How It Works",[244,245,250],"pre",{"className":246,"code":248,"language":249},[247],"language-text","User prompt\n    ↓\nModel decides to call a tool\n    ↓\nTool executes → result returned to model\n    ↓\nModel decides: call another tool? or give final answer?\n    ↓\nLoop ends → final response returned\n","text",[219,251,248],{"__ignoreMap":252},"",[254,255],"hr",{},[239,257,259],{"id":258},"defining-a-tool","Defining a Tool",[223,261,262,263,266,267,270],{},"Use ",[219,264,265],{},"tool()"," with ",[219,268,269],{},"inputSchema: zodSchema(...)"," (SDK 6 pattern):",[244,272,276],{"className":273,"code":274,"language":275,"meta":252,"style":252},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { tool, zodSchema } from \"ai\";\nimport { z } from \"zod\";\n\nconst getWeatherTool = tool({\n  description: \"Get the weather for a location\",\n  inputSchema: zodSchema(\n    z.object({\n      city: z.string().describe(\"The city to get the weather for\"),\n    })\n  ),\n  execute: async ({ city }) => {\n    // In real code: call a weather API\n    return `The weather in ${city} is 25°C and Sunny`;\n  },\n  strict: true,\n});\n","typescript",[219,277,278,319,342,349,371,391,404,419,456,465,473,500,507,536,542,556],{"__ignoreMap":252},[279,280,283,287,291,295,298,301,304,307,310,313,316],"span",{"class":281,"line":282},"line",1,[279,284,286],{"class":285},"s7zQu","import",[279,288,290],{"class":289},"sMK4o"," {",[279,292,294],{"class":293},"sTEyZ"," tool",[279,296,297],{"class":289},",",[279,299,300],{"class":293}," zodSchema",[279,302,303],{"class":289}," }",[279,305,306],{"class":285}," from",[279,308,309],{"class":289}," \"",[279,311,236],{"class":312},"sfazB",[279,314,315],{"class":289},"\"",[279,317,318],{"class":289},";\n",[279,320,322,324,326,329,331,333,335,338,340],{"class":281,"line":321},2,[279,323,286],{"class":285},[279,325,290],{"class":289},[279,327,328],{"class":293}," z",[279,330,303],{"class":289},[279,332,306],{"class":285},[279,334,309],{"class":289},[279,336,337],{"class":312},"zod",[279,339,315],{"class":289},[279,341,318],{"class":289},[279,343,345],{"class":281,"line":344},3,[279,346,348],{"emptyLinePlaceholder":347},true,"\n",[279,350,352,356,359,362,365,368],{"class":281,"line":351},4,[279,353,355],{"class":354},"spNyl","const",[279,357,358],{"class":293}," getWeatherTool ",[279,360,361],{"class":289},"=",[279,363,294],{"class":364},"s2Zo4",[279,366,367],{"class":293},"(",[279,369,370],{"class":289},"{\n",[279,372,374,378,381,383,386,388],{"class":281,"line":373},5,[279,375,377],{"class":376},"swJcz","  description",[279,379,380],{"class":289},":",[279,382,309],{"class":289},[279,384,385],{"class":312},"Get the weather for a location",[279,387,315],{"class":289},[279,389,390],{"class":289},",\n",[279,392,394,397,399,401],{"class":281,"line":393},6,[279,395,396],{"class":376},"  inputSchema",[279,398,380],{"class":289},[279,400,300],{"class":364},[279,402,403],{"class":293},"(\n",[279,405,407,410,412,415,417],{"class":281,"line":406},7,[279,408,409],{"class":293},"    z",[279,411,237],{"class":289},[279,413,414],{"class":364},"object",[279,416,367],{"class":293},[279,418,370],{"class":289},[279,420,422,425,427,429,431,434,437,439,442,444,446,449,451,454],{"class":281,"line":421},8,[279,423,424],{"class":376},"      city",[279,426,380],{"class":289},[279,428,328],{"class":293},[279,430,237],{"class":289},[279,432,433],{"class":364},"string",[279,435,436],{"class":293},"()",[279,438,237],{"class":289},[279,440,441],{"class":364},"describe",[279,443,367],{"class":293},[279,445,315],{"class":289},[279,447,448],{"class":312},"The city to get the weather for",[279,450,315],{"class":289},[279,452,453],{"class":293},")",[279,455,390],{"class":289},[279,457,459,462],{"class":281,"line":458},9,[279,460,461],{"class":289},"    }",[279,463,464],{"class":293},")\n",[279,466,468,471],{"class":281,"line":467},10,[279,469,470],{"class":293},"  )",[279,472,390],{"class":289},[279,474,476,479,481,484,487,491,494,497],{"class":281,"line":475},11,[279,477,478],{"class":364},"  execute",[279,480,380],{"class":289},[279,482,483],{"class":354}," async",[279,485,486],{"class":289}," ({",[279,488,490],{"class":489},"sHdIc"," city",[279,492,493],{"class":289}," })",[279,495,496],{"class":354}," =>",[279,498,499],{"class":289}," {\n",[279,501,503],{"class":281,"line":502},12,[279,504,506],{"class":505},"sHwdD","    // In real code: call a weather API\n",[279,508,510,513,516,519,522,525,528,531,534],{"class":281,"line":509},13,[279,511,512],{"class":285},"    return",[279,514,515],{"class":289}," `",[279,517,518],{"class":312},"The weather in ",[279,520,521],{"class":289},"${",[279,523,524],{"class":293},"city",[279,526,527],{"class":289},"}",[279,529,530],{"class":312}," is 25°C and Sunny",[279,532,533],{"class":289},"`",[279,535,318],{"class":289},[279,537,539],{"class":281,"line":538},14,[279,540,541],{"class":289},"  },\n",[279,543,545,548,550,554],{"class":281,"line":544},15,[279,546,547],{"class":376},"  strict",[279,549,380],{"class":289},[279,551,553],{"class":552},"sfNiH"," true",[279,555,390],{"class":289},[279,557,559,561,563],{"class":281,"line":558},16,[279,560,527],{"class":289},[279,562,453],{"class":293},[279,564,318],{"class":289},[254,566],{},[239,568,570],{"id":569},"running-the-agent-streaming","Running the Agent (Streaming)",[223,572,262,573,576,577,380],{},[219,574,575],{},"agent.stream()"," and iterate over ",[219,578,579],{},"textStream",[244,581,583],{"className":273,"code":582,"language":275,"meta":252,"style":252},"import { ToolLoopAgent } from \"ai\";\nimport { openai } from \"@ai-sdk/openai\";\n\nconst agent = new ToolLoopAgent({\n  model: openai(\"gpt-4.1-nano-2025-04-14\"),\n  tools: { getWeather: getWeatherTool },\n});\n\nconst { textStream } = await agent.stream({\n  prompt: \"What is the weather in New York?\",\n});\n\nfor await (const text of textStream) {\n  process.stdout.write(text);\n}\n",[219,584,585,606,628,632,650,672,691,699,703,732,748,756,760,783,806],{"__ignoreMap":252},[279,586,587,589,591,594,596,598,600,602,604],{"class":281,"line":282},[279,588,286],{"class":285},[279,590,290],{"class":289},[279,592,593],{"class":293}," ToolLoopAgent",[279,595,303],{"class":289},[279,597,306],{"class":285},[279,599,309],{"class":289},[279,601,236],{"class":312},[279,603,315],{"class":289},[279,605,318],{"class":289},[279,607,608,610,612,615,617,619,621,624,626],{"class":281,"line":321},[279,609,286],{"class":285},[279,611,290],{"class":289},[279,613,614],{"class":293}," openai",[279,616,303],{"class":289},[279,618,306],{"class":285},[279,620,309],{"class":289},[279,622,623],{"class":312},"@ai-sdk/openai",[279,625,315],{"class":289},[279,627,318],{"class":289},[279,629,630],{"class":281,"line":344},[279,631,348],{"emptyLinePlaceholder":347},[279,633,634,636,639,641,644,646,648],{"class":281,"line":351},[279,635,355],{"class":354},[279,637,638],{"class":293}," agent ",[279,640,361],{"class":289},[279,642,643],{"class":289}," new",[279,645,593],{"class":364},[279,647,367],{"class":293},[279,649,370],{"class":289},[279,651,652,655,657,659,661,663,666,668,670],{"class":281,"line":373},[279,653,654],{"class":376},"  model",[279,656,380],{"class":289},[279,658,614],{"class":364},[279,660,367],{"class":293},[279,662,315],{"class":289},[279,664,665],{"class":312},"gpt-4.1-nano-2025-04-14",[279,667,315],{"class":289},[279,669,453],{"class":293},[279,671,390],{"class":289},[279,673,674,677,679,681,684,686,688],{"class":281,"line":393},[279,675,676],{"class":376},"  tools",[279,678,380],{"class":289},[279,680,290],{"class":289},[279,682,683],{"class":376}," getWeather",[279,685,380],{"class":289},[279,687,358],{"class":293},[279,689,690],{"class":289},"},\n",[279,692,693,695,697],{"class":281,"line":406},[279,694,527],{"class":289},[279,696,453],{"class":293},[279,698,318],{"class":289},[279,700,701],{"class":281,"line":421},[279,702,348],{"emptyLinePlaceholder":347},[279,704,705,707,709,712,714,717,720,723,725,728,730],{"class":281,"line":458},[279,706,355],{"class":354},[279,708,290],{"class":289},[279,710,711],{"class":293}," textStream ",[279,713,527],{"class":289},[279,715,716],{"class":289}," =",[279,718,719],{"class":285}," await",[279,721,722],{"class":293}," agent",[279,724,237],{"class":289},[279,726,727],{"class":364},"stream",[279,729,367],{"class":293},[279,731,370],{"class":289},[279,733,734,737,739,741,744,746],{"class":281,"line":467},[279,735,736],{"class":376},"  prompt",[279,738,380],{"class":289},[279,740,309],{"class":289},[279,742,743],{"class":312},"What is the weather in New York?",[279,745,315],{"class":289},[279,747,390],{"class":289},[279,749,750,752,754],{"class":281,"line":475},[279,751,527],{"class":289},[279,753,453],{"class":293},[279,755,318],{"class":289},[279,757,758],{"class":281,"line":502},[279,759,348],{"emptyLinePlaceholder":347},[279,761,762,765,767,770,772,775,778,781],{"class":281,"line":509},[279,763,764],{"class":285},"for",[279,766,719],{"class":285},[279,768,769],{"class":293}," (",[279,771,355],{"class":354},[279,773,774],{"class":293}," text ",[279,776,777],{"class":289},"of",[279,779,780],{"class":293}," textStream) ",[279,782,370],{"class":289},[279,784,785,788,790,793,795,798,800,802,804],{"class":281,"line":538},[279,786,787],{"class":293},"  process",[279,789,237],{"class":289},[279,791,792],{"class":293},"stdout",[279,794,237],{"class":289},[279,796,797],{"class":364},"write",[279,799,367],{"class":376},[279,801,249],{"class":293},[279,803,453],{"class":376},[279,805,318],{"class":289},[279,807,808],{"class":281,"line":544},[279,809,810],{"class":289},"}\n",[254,812],{},[239,814,816],{"id":815},"running-the-agent-non-streaming","Running the Agent (Non-streaming)",[223,818,262,819,822],{},[219,820,821],{},"agent.generate()"," when you need the full response at once:",[244,824,826],{"className":273,"code":825,"language":275,"meta":252,"style":252},"const { text, steps } = await agent.generate({\n  prompt: \"What is the weather in Paris?\",\n});\n\nconsole.log(text); // → \"The weather in Paris is 25°C and Sunny.\"\n",[219,827,828,859,874,882,886],{"__ignoreMap":252},[279,829,830,832,834,837,839,842,844,846,848,850,852,855,857],{"class":281,"line":282},[279,831,355],{"class":354},[279,833,290],{"class":289},[279,835,836],{"class":293}," text",[279,838,297],{"class":289},[279,840,841],{"class":293}," steps ",[279,843,527],{"class":289},[279,845,716],{"class":289},[279,847,719],{"class":285},[279,849,722],{"class":293},[279,851,237],{"class":289},[279,853,854],{"class":364},"generate",[279,856,367],{"class":293},[279,858,370],{"class":289},[279,860,861,863,865,867,870,872],{"class":281,"line":321},[279,862,736],{"class":376},[279,864,380],{"class":289},[279,866,309],{"class":289},[279,868,869],{"class":312},"What is the weather in Paris?",[279,871,315],{"class":289},[279,873,390],{"class":289},[279,875,876,878,880],{"class":281,"line":344},[279,877,527],{"class":289},[279,879,453],{"class":293},[279,881,318],{"class":289},[279,883,884],{"class":281,"line":351},[279,885,348],{"emptyLinePlaceholder":347},[279,887,888,891,893,896,899,902],{"class":281,"line":373},[279,889,890],{"class":293},"console",[279,892,237],{"class":289},[279,894,895],{"class":364},"log",[279,897,898],{"class":293},"(text)",[279,900,901],{"class":289},";",[279,903,904],{"class":505}," // → \"The weather in Paris is 25°C and Sunny.\"\n",[254,906],{},[239,908,910,911],{"id":909},"limiting-iterations-with-maxsteps","Limiting Iterations with ",[219,912,913],{},"maxSteps",[223,915,916,917,919],{},"By default, the loop runs until the model stops calling tools. Use ",[219,918,913],{}," to cap iterations and prevent runaway loops:",[244,921,923],{"className":273,"code":922,"language":275,"meta":252,"style":252},"const agent = new ToolLoopAgent({\n  model: openai(\"gpt-4.1-nano-2025-04-14\"),\n  tools: { getWeather: getWeatherTool },\n  maxSteps: 5,  // model can call tools at most 5 times before being forced to answer\n});\n\nconst { textStream } = await agent.stream({\n  prompt: \"What is the weather in Tokyo, London, and Sydney?\",\n});\n\nfor await (const text of textStream) {\n  process.stdout.write(text);\n}\n",[219,924,925,941,961,977,993,1001,1005,1029,1044,1052,1056,1074,1094],{"__ignoreMap":252},[279,926,927,929,931,933,935,937,939],{"class":281,"line":282},[279,928,355],{"class":354},[279,930,638],{"class":293},[279,932,361],{"class":289},[279,934,643],{"class":289},[279,936,593],{"class":364},[279,938,367],{"class":293},[279,940,370],{"class":289},[279,942,943,945,947,949,951,953,955,957,959],{"class":281,"line":321},[279,944,654],{"class":376},[279,946,380],{"class":289},[279,948,614],{"class":364},[279,950,367],{"class":293},[279,952,315],{"class":289},[279,954,665],{"class":312},[279,956,315],{"class":289},[279,958,453],{"class":293},[279,960,390],{"class":289},[279,962,963,965,967,969,971,973,975],{"class":281,"line":344},[279,964,676],{"class":376},[279,966,380],{"class":289},[279,968,290],{"class":289},[279,970,683],{"class":376},[279,972,380],{"class":289},[279,974,358],{"class":293},[279,976,690],{"class":289},[279,978,979,982,984,988,990],{"class":281,"line":351},[279,980,981],{"class":376},"  maxSteps",[279,983,380],{"class":289},[279,985,987],{"class":986},"sbssI"," 5",[279,989,297],{"class":289},[279,991,992],{"class":505},"  // model can call tools at most 5 times before being forced to answer\n",[279,994,995,997,999],{"class":281,"line":373},[279,996,527],{"class":289},[279,998,453],{"class":293},[279,1000,318],{"class":289},[279,1002,1003],{"class":281,"line":393},[279,1004,348],{"emptyLinePlaceholder":347},[279,1006,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027],{"class":281,"line":406},[279,1008,355],{"class":354},[279,1010,290],{"class":289},[279,1012,711],{"class":293},[279,1014,527],{"class":289},[279,1016,716],{"class":289},[279,1018,719],{"class":285},[279,1020,722],{"class":293},[279,1022,237],{"class":289},[279,1024,727],{"class":364},[279,1026,367],{"class":293},[279,1028,370],{"class":289},[279,1030,1031,1033,1035,1037,1040,1042],{"class":281,"line":421},[279,1032,736],{"class":376},[279,1034,380],{"class":289},[279,1036,309],{"class":289},[279,1038,1039],{"class":312},"What is the weather in Tokyo, London, and Sydney?",[279,1041,315],{"class":289},[279,1043,390],{"class":289},[279,1045,1046,1048,1050],{"class":281,"line":458},[279,1047,527],{"class":289},[279,1049,453],{"class":293},[279,1051,318],{"class":289},[279,1053,1054],{"class":281,"line":467},[279,1055,348],{"emptyLinePlaceholder":347},[279,1057,1058,1060,1062,1064,1066,1068,1070,1072],{"class":281,"line":475},[279,1059,764],{"class":285},[279,1061,719],{"class":285},[279,1063,769],{"class":293},[279,1065,355],{"class":354},[279,1067,774],{"class":293},[279,1069,777],{"class":289},[279,1071,780],{"class":293},[279,1073,370],{"class":289},[279,1075,1076,1078,1080,1082,1084,1086,1088,1090,1092],{"class":281,"line":502},[279,1077,787],{"class":293},[279,1079,237],{"class":289},[279,1081,792],{"class":293},[279,1083,237],{"class":289},[279,1085,797],{"class":364},[279,1087,367],{"class":376},[279,1089,249],{"class":293},[279,1091,453],{"class":376},[279,1093,318],{"class":289},[279,1095,1096],{"class":281,"line":509},[279,1097,810],{"class":289},[1099,1100,1102],"h3",{"id":1101},"what-counts-as-a-step","What counts as a step?",[223,1104,1105,1106,1109],{},"Each ",[227,1107,1108],{},"model call"," (whether it calls a tool or produces a final answer) counts as one step.\nFor a 3-city query, the loop might look like:",[244,1111,1114],{"className":1112,"code":1113,"language":249},[247],"Step 1 → call getWeather(Tokyo)\nStep 2 → call getWeather(London)\nStep 3 → call getWeather(Sydney)\nStep 4 → produce final answer\n",[219,1115,1113],{"__ignoreMap":252},[223,1117,1118,1119,1121,1122,1125],{},"Set ",[219,1120,913],{}," to ",[227,1123,1124],{},"expected number of tool calls + 1"," to be safe.",[254,1127],{},[239,1129,1131],{"id":1130},"adding-a-system-prompt","Adding a System Prompt",[244,1133,1135],{"className":273,"code":1134,"language":275,"meta":252,"style":252},"const agent = new ToolLoopAgent({\n  model: openai(\"gpt-4.1-nano-2025-04-14\"),\n  system: \"You are a helpful weather assistant. Always give temperatures in Celsius.\",\n  tools: { getWeather: getWeatherTool },\n  maxSteps: 5,\n});\n",[219,1136,1137,1153,1173,1189,1205,1215],{"__ignoreMap":252},[279,1138,1139,1141,1143,1145,1147,1149,1151],{"class":281,"line":282},[279,1140,355],{"class":354},[279,1142,638],{"class":293},[279,1144,361],{"class":289},[279,1146,643],{"class":289},[279,1148,593],{"class":364},[279,1150,367],{"class":293},[279,1152,370],{"class":289},[279,1154,1155,1157,1159,1161,1163,1165,1167,1169,1171],{"class":281,"line":321},[279,1156,654],{"class":376},[279,1158,380],{"class":289},[279,1160,614],{"class":364},[279,1162,367],{"class":293},[279,1164,315],{"class":289},[279,1166,665],{"class":312},[279,1168,315],{"class":289},[279,1170,453],{"class":293},[279,1172,390],{"class":289},[279,1174,1175,1178,1180,1182,1185,1187],{"class":281,"line":344},[279,1176,1177],{"class":376},"  system",[279,1179,380],{"class":289},[279,1181,309],{"class":289},[279,1183,1184],{"class":312},"You are a helpful weather assistant. Always give temperatures in Celsius.",[279,1186,315],{"class":289},[279,1188,390],{"class":289},[279,1190,1191,1193,1195,1197,1199,1201,1203],{"class":281,"line":351},[279,1192,676],{"class":376},[279,1194,380],{"class":289},[279,1196,290],{"class":289},[279,1198,683],{"class":376},[279,1200,380],{"class":289},[279,1202,358],{"class":293},[279,1204,690],{"class":289},[279,1206,1207,1209,1211,1213],{"class":281,"line":373},[279,1208,981],{"class":376},[279,1210,380],{"class":289},[279,1212,987],{"class":986},[279,1214,390],{"class":289},[279,1216,1217,1219,1221],{"class":281,"line":393},[279,1218,527],{"class":289},[279,1220,453],{"class":293},[279,1222,318],{"class":289},[254,1224],{},[239,1226,1228],{"id":1227},"inspecting-steps","Inspecting Steps",[223,1230,1231,1233,1234,1237],{},[219,1232,821],{}," returns ",[219,1235,1236],{},"steps"," — useful for debugging what the model did at each iteration:",[244,1239,1241],{"className":273,"code":1240,"language":275,"meta":252,"style":252},"const { text, steps } = await agent.generate({\n  prompt: \"What is the weather in Berlin and Madrid?\",\n});\n\nfor (const step of steps) {\n  console.log(\"--- Step\", step.stepType, \"---\");\n  console.log(\"Text:\", step.text);\n  console.log(\"Tool calls:\", step.toolCalls);    // what the model requested\n  console.log(\"Tool results:\", step.toolResults); // what was returned\n}\n\nconsole.log(\"Final answer:\", text);\n",[219,1242,1243,1271,1286,1294,1298,1316,1357,1386,1419,1452,1456,1460],{"__ignoreMap":252},[279,1244,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269],{"class":281,"line":282},[279,1246,355],{"class":354},[279,1248,290],{"class":289},[279,1250,836],{"class":293},[279,1252,297],{"class":289},[279,1254,841],{"class":293},[279,1256,527],{"class":289},[279,1258,716],{"class":289},[279,1260,719],{"class":285},[279,1262,722],{"class":293},[279,1264,237],{"class":289},[279,1266,854],{"class":364},[279,1268,367],{"class":293},[279,1270,370],{"class":289},[279,1272,1273,1275,1277,1279,1282,1284],{"class":281,"line":321},[279,1274,736],{"class":376},[279,1276,380],{"class":289},[279,1278,309],{"class":289},[279,1280,1281],{"class":312},"What is the weather in Berlin and Madrid?",[279,1283,315],{"class":289},[279,1285,390],{"class":289},[279,1287,1288,1290,1292],{"class":281,"line":344},[279,1289,527],{"class":289},[279,1291,453],{"class":293},[279,1293,318],{"class":289},[279,1295,1296],{"class":281,"line":351},[279,1297,348],{"emptyLinePlaceholder":347},[279,1299,1300,1302,1304,1306,1309,1311,1314],{"class":281,"line":373},[279,1301,764],{"class":285},[279,1303,769],{"class":293},[279,1305,355],{"class":354},[279,1307,1308],{"class":293}," step ",[279,1310,777],{"class":289},[279,1312,1313],{"class":293}," steps) ",[279,1315,370],{"class":289},[279,1317,1318,1321,1323,1325,1327,1329,1332,1334,1336,1339,1341,1344,1346,1348,1351,1353,1355],{"class":281,"line":393},[279,1319,1320],{"class":293},"  console",[279,1322,237],{"class":289},[279,1324,895],{"class":364},[279,1326,367],{"class":376},[279,1328,315],{"class":289},[279,1330,1331],{"class":312},"--- Step",[279,1333,315],{"class":289},[279,1335,297],{"class":289},[279,1337,1338],{"class":293}," step",[279,1340,237],{"class":289},[279,1342,1343],{"class":293},"stepType",[279,1345,297],{"class":289},[279,1347,309],{"class":289},[279,1349,1350],{"class":312},"---",[279,1352,315],{"class":289},[279,1354,453],{"class":376},[279,1356,318],{"class":289},[279,1358,1359,1361,1363,1365,1367,1369,1372,1374,1376,1378,1380,1382,1384],{"class":281,"line":406},[279,1360,1320],{"class":293},[279,1362,237],{"class":289},[279,1364,895],{"class":364},[279,1366,367],{"class":376},[279,1368,315],{"class":289},[279,1370,1371],{"class":312},"Text:",[279,1373,315],{"class":289},[279,1375,297],{"class":289},[279,1377,1338],{"class":293},[279,1379,237],{"class":289},[279,1381,249],{"class":293},[279,1383,453],{"class":376},[279,1385,318],{"class":289},[279,1387,1388,1390,1392,1394,1396,1398,1401,1403,1405,1407,1409,1412,1414,1416],{"class":281,"line":421},[279,1389,1320],{"class":293},[279,1391,237],{"class":289},[279,1393,895],{"class":364},[279,1395,367],{"class":376},[279,1397,315],{"class":289},[279,1399,1400],{"class":312},"Tool calls:",[279,1402,315],{"class":289},[279,1404,297],{"class":289},[279,1406,1338],{"class":293},[279,1408,237],{"class":289},[279,1410,1411],{"class":293},"toolCalls",[279,1413,453],{"class":376},[279,1415,901],{"class":289},[279,1417,1418],{"class":505},"    // what the model requested\n",[279,1420,1421,1423,1425,1427,1429,1431,1434,1436,1438,1440,1442,1445,1447,1449],{"class":281,"line":458},[279,1422,1320],{"class":293},[279,1424,237],{"class":289},[279,1426,895],{"class":364},[279,1428,367],{"class":376},[279,1430,315],{"class":289},[279,1432,1433],{"class":312},"Tool results:",[279,1435,315],{"class":289},[279,1437,297],{"class":289},[279,1439,1338],{"class":293},[279,1441,237],{"class":289},[279,1443,1444],{"class":293},"toolResults",[279,1446,453],{"class":376},[279,1448,901],{"class":289},[279,1450,1451],{"class":505}," // what was returned\n",[279,1453,1454],{"class":281,"line":467},[279,1455,810],{"class":289},[279,1457,1458],{"class":281,"line":475},[279,1459,348],{"emptyLinePlaceholder":347},[279,1461,1462,1464,1466,1468,1470,1472,1475,1477,1479,1482],{"class":281,"line":502},[279,1463,890],{"class":293},[279,1465,237],{"class":289},[279,1467,895],{"class":364},[279,1469,367],{"class":293},[279,1471,315],{"class":289},[279,1473,1474],{"class":312},"Final answer:",[279,1476,315],{"class":289},[279,1478,297],{"class":289},[279,1480,1481],{"class":293}," text)",[279,1483,318],{"class":289},[254,1485],{},[239,1487,1489],{"id":1488},"multiple-tools","Multiple Tools",[244,1491,1493],{"className":273,"code":1492,"language":275,"meta":252,"style":252},"const searchWebTool = tool({\n  description: \"Search the web for information\",\n  inputSchema: zodSchema(z.object({ query: z.string() })),\n  execute: async ({ query }) => `Results for \"${query}\": ...`,\n  strict: true,\n});\n\nconst agent = new ToolLoopAgent({\n  model: openai(\"gpt-4.1-nano-2025-04-14\"),\n  tools: {\n    getWeather: getWeatherTool,\n    searchWeb:  searchWebTool,\n  },\n  maxSteps: 10,\n});\n\nconst { textStream } = await agent.stream({\n  prompt: \"What's the weather in London and summarise today's AI news?\",\n});\n\nfor await (const text of textStream) {\n  process.stdout.write(text);\n}\n",[219,1494,1495,1510,1525,1566,1601,1611,1619,1623,1639,1659,1667,1679,1691,1695,1706,1714,1718,1743,1759,1768,1773,1792,1813],{"__ignoreMap":252},[279,1496,1497,1499,1502,1504,1506,1508],{"class":281,"line":282},[279,1498,355],{"class":354},[279,1500,1501],{"class":293}," searchWebTool ",[279,1503,361],{"class":289},[279,1505,294],{"class":364},[279,1507,367],{"class":293},[279,1509,370],{"class":289},[279,1511,1512,1514,1516,1518,1521,1523],{"class":281,"line":321},[279,1513,377],{"class":376},[279,1515,380],{"class":289},[279,1517,309],{"class":289},[279,1519,1520],{"class":312},"Search the web for information",[279,1522,315],{"class":289},[279,1524,390],{"class":289},[279,1526,1527,1529,1531,1533,1536,1538,1540,1542,1545,1548,1550,1552,1554,1556,1559,1561,1564],{"class":281,"line":344},[279,1528,396],{"class":376},[279,1530,380],{"class":289},[279,1532,300],{"class":364},[279,1534,1535],{"class":293},"(z",[279,1537,237],{"class":289},[279,1539,414],{"class":364},[279,1541,367],{"class":293},[279,1543,1544],{"class":289},"{",[279,1546,1547],{"class":376}," query",[279,1549,380],{"class":289},[279,1551,328],{"class":293},[279,1553,237],{"class":289},[279,1555,433],{"class":364},[279,1557,1558],{"class":293},"() ",[279,1560,527],{"class":289},[279,1562,1563],{"class":293},"))",[279,1565,390],{"class":289},[279,1567,1568,1570,1572,1574,1576,1578,1580,1582,1584,1587,1589,1592,1594,1597,1599],{"class":281,"line":351},[279,1569,478],{"class":364},[279,1571,380],{"class":289},[279,1573,483],{"class":354},[279,1575,486],{"class":289},[279,1577,1547],{"class":489},[279,1579,493],{"class":289},[279,1581,496],{"class":354},[279,1583,515],{"class":289},[279,1585,1586],{"class":312},"Results for \"",[279,1588,521],{"class":289},[279,1590,1591],{"class":293},"query",[279,1593,527],{"class":289},[279,1595,1596],{"class":312},"\": ...",[279,1598,533],{"class":289},[279,1600,390],{"class":289},[279,1602,1603,1605,1607,1609],{"class":281,"line":373},[279,1604,547],{"class":376},[279,1606,380],{"class":289},[279,1608,553],{"class":552},[279,1610,390],{"class":289},[279,1612,1613,1615,1617],{"class":281,"line":393},[279,1614,527],{"class":289},[279,1616,453],{"class":293},[279,1618,318],{"class":289},[279,1620,1621],{"class":281,"line":406},[279,1622,348],{"emptyLinePlaceholder":347},[279,1624,1625,1627,1629,1631,1633,1635,1637],{"class":281,"line":421},[279,1626,355],{"class":354},[279,1628,638],{"class":293},[279,1630,361],{"class":289},[279,1632,643],{"class":289},[279,1634,593],{"class":364},[279,1636,367],{"class":293},[279,1638,370],{"class":289},[279,1640,1641,1643,1645,1647,1649,1651,1653,1655,1657],{"class":281,"line":458},[279,1642,654],{"class":376},[279,1644,380],{"class":289},[279,1646,614],{"class":364},[279,1648,367],{"class":293},[279,1650,315],{"class":289},[279,1652,665],{"class":312},[279,1654,315],{"class":289},[279,1656,453],{"class":293},[279,1658,390],{"class":289},[279,1660,1661,1663,1665],{"class":281,"line":467},[279,1662,676],{"class":376},[279,1664,380],{"class":289},[279,1666,499],{"class":289},[279,1668,1669,1672,1674,1677],{"class":281,"line":475},[279,1670,1671],{"class":376},"    getWeather",[279,1673,380],{"class":289},[279,1675,1676],{"class":293}," getWeatherTool",[279,1678,390],{"class":289},[279,1680,1681,1684,1686,1689],{"class":281,"line":502},[279,1682,1683],{"class":376},"    searchWeb",[279,1685,380],{"class":289},[279,1687,1688],{"class":293},"  searchWebTool",[279,1690,390],{"class":289},[279,1692,1693],{"class":281,"line":509},[279,1694,541],{"class":289},[279,1696,1697,1699,1701,1704],{"class":281,"line":538},[279,1698,981],{"class":376},[279,1700,380],{"class":289},[279,1702,1703],{"class":986}," 10",[279,1705,390],{"class":289},[279,1707,1708,1710,1712],{"class":281,"line":544},[279,1709,527],{"class":289},[279,1711,453],{"class":293},[279,1713,318],{"class":289},[279,1715,1716],{"class":281,"line":558},[279,1717,348],{"emptyLinePlaceholder":347},[279,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741],{"class":281,"line":1720},17,[279,1722,355],{"class":354},[279,1724,290],{"class":289},[279,1726,711],{"class":293},[279,1728,527],{"class":289},[279,1730,716],{"class":289},[279,1732,719],{"class":285},[279,1734,722],{"class":293},[279,1736,237],{"class":289},[279,1738,727],{"class":364},[279,1740,367],{"class":293},[279,1742,370],{"class":289},[279,1744,1746,1748,1750,1752,1755,1757],{"class":281,"line":1745},18,[279,1747,736],{"class":376},[279,1749,380],{"class":289},[279,1751,309],{"class":289},[279,1753,1754],{"class":312},"What's the weather in London and summarise today's AI news?",[279,1756,315],{"class":289},[279,1758,390],{"class":289},[279,1760,1762,1764,1766],{"class":281,"line":1761},19,[279,1763,527],{"class":289},[279,1765,453],{"class":293},[279,1767,318],{"class":289},[279,1769,1771],{"class":281,"line":1770},20,[279,1772,348],{"emptyLinePlaceholder":347},[279,1774,1776,1778,1780,1782,1784,1786,1788,1790],{"class":281,"line":1775},21,[279,1777,764],{"class":285},[279,1779,719],{"class":285},[279,1781,769],{"class":293},[279,1783,355],{"class":354},[279,1785,774],{"class":293},[279,1787,777],{"class":289},[279,1789,780],{"class":293},[279,1791,370],{"class":289},[279,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811],{"class":281,"line":1794},22,[279,1796,787],{"class":293},[279,1798,237],{"class":289},[279,1800,792],{"class":293},[279,1802,237],{"class":289},[279,1804,797],{"class":364},[279,1806,367],{"class":376},[279,1808,249],{"class":293},[279,1810,453],{"class":376},[279,1812,318],{"class":289},[279,1814,1816],{"class":281,"line":1815},23,[279,1817,810],{"class":289},[254,1819],{},[239,1821,1823],{"id":1822},"full-working-example","Full Working Example",[244,1825,1827],{"className":273,"code":1826,"language":275,"meta":252,"style":252},"import { config } from \"dotenv\";\nconfig({ path: \".env.local\" });\n\nimport { tool, zodSchema, ToolLoopAgent } from \"ai\";\nimport { openai } from \"@ai-sdk/openai\";\nimport { z } from \"zod\";\n\nconst getWeatherTool = tool({\n  description: \"Get the weather for a location\",\n  inputSchema: zodSchema(\n    z.object({\n      city: z.string().describe(\"The city to get the weather for\"),\n    })\n  ),\n  execute: async ({ city }) => {\n    return `The weather in ${city} is 25°C and Sunny`;\n  },\n  strict: true,\n});\n\nconst askQuestion = async (prompt: string) => {\n  const agent = new ToolLoopAgent({\n    model: openai(\"gpt-4.1-nano-2025-04-14\"),\n    tools: { getWeather: getWeatherTool },\n    maxSteps: 5,\n  });\n\n  const { textStream } = await agent.stream({ prompt });\n\n  for await (const text of textStream) {\n    process.stdout.write(text);\n  }\n};\n\nawait askQuestion(\"What is the weather in New York?\");\n",[219,1828,1829,1851,1878,1882,1910,1930,1950,1954,1968,1982,1992,2004,2034,2040,2046,2064,2084,2088,2098,2106,2110,2138,2155,2176,2195,2207,2217,2222,2257,2262,2286,2308,2314,2320,2325],{"__ignoreMap":252},[279,1830,1831,1833,1835,1838,1840,1842,1844,1847,1849],{"class":281,"line":282},[279,1832,286],{"class":285},[279,1834,290],{"class":289},[279,1836,1837],{"class":293}," config",[279,1839,303],{"class":289},[279,1841,306],{"class":285},[279,1843,309],{"class":289},[279,1845,1846],{"class":312},"dotenv",[279,1848,315],{"class":289},[279,1850,318],{"class":289},[279,1852,1853,1856,1858,1860,1863,1865,1867,1870,1872,1874,1876],{"class":281,"line":321},[279,1854,1855],{"class":364},"config",[279,1857,367],{"class":293},[279,1859,1544],{"class":289},[279,1861,1862],{"class":376}," path",[279,1864,380],{"class":289},[279,1866,309],{"class":289},[279,1868,1869],{"class":312},".env.local",[279,1871,315],{"class":289},[279,1873,303],{"class":289},[279,1875,453],{"class":293},[279,1877,318],{"class":289},[279,1879,1880],{"class":281,"line":344},[279,1881,348],{"emptyLinePlaceholder":347},[279,1883,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908],{"class":281,"line":351},[279,1885,286],{"class":285},[279,1887,290],{"class":289},[279,1889,294],{"class":293},[279,1891,297],{"class":289},[279,1893,300],{"class":293},[279,1895,297],{"class":289},[279,1897,593],{"class":293},[279,1899,303],{"class":289},[279,1901,306],{"class":285},[279,1903,309],{"class":289},[279,1905,236],{"class":312},[279,1907,315],{"class":289},[279,1909,318],{"class":289},[279,1911,1912,1914,1916,1918,1920,1922,1924,1926,1928],{"class":281,"line":373},[279,1913,286],{"class":285},[279,1915,290],{"class":289},[279,1917,614],{"class":293},[279,1919,303],{"class":289},[279,1921,306],{"class":285},[279,1923,309],{"class":289},[279,1925,623],{"class":312},[279,1927,315],{"class":289},[279,1929,318],{"class":289},[279,1931,1932,1934,1936,1938,1940,1942,1944,1946,1948],{"class":281,"line":393},[279,1933,286],{"class":285},[279,1935,290],{"class":289},[279,1937,328],{"class":293},[279,1939,303],{"class":289},[279,1941,306],{"class":285},[279,1943,309],{"class":289},[279,1945,337],{"class":312},[279,1947,315],{"class":289},[279,1949,318],{"class":289},[279,1951,1952],{"class":281,"line":406},[279,1953,348],{"emptyLinePlaceholder":347},[279,1955,1956,1958,1960,1962,1964,1966],{"class":281,"line":421},[279,1957,355],{"class":354},[279,1959,358],{"class":293},[279,1961,361],{"class":289},[279,1963,294],{"class":364},[279,1965,367],{"class":293},[279,1967,370],{"class":289},[279,1969,1970,1972,1974,1976,1978,1980],{"class":281,"line":458},[279,1971,377],{"class":376},[279,1973,380],{"class":289},[279,1975,309],{"class":289},[279,1977,385],{"class":312},[279,1979,315],{"class":289},[279,1981,390],{"class":289},[279,1983,1984,1986,1988,1990],{"class":281,"line":467},[279,1985,396],{"class":376},[279,1987,380],{"class":289},[279,1989,300],{"class":364},[279,1991,403],{"class":293},[279,1993,1994,1996,1998,2000,2002],{"class":281,"line":475},[279,1995,409],{"class":293},[279,1997,237],{"class":289},[279,1999,414],{"class":364},[279,2001,367],{"class":293},[279,2003,370],{"class":289},[279,2005,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032],{"class":281,"line":502},[279,2007,424],{"class":376},[279,2009,380],{"class":289},[279,2011,328],{"class":293},[279,2013,237],{"class":289},[279,2015,433],{"class":364},[279,2017,436],{"class":293},[279,2019,237],{"class":289},[279,2021,441],{"class":364},[279,2023,367],{"class":293},[279,2025,315],{"class":289},[279,2027,448],{"class":312},[279,2029,315],{"class":289},[279,2031,453],{"class":293},[279,2033,390],{"class":289},[279,2035,2036,2038],{"class":281,"line":509},[279,2037,461],{"class":289},[279,2039,464],{"class":293},[279,2041,2042,2044],{"class":281,"line":538},[279,2043,470],{"class":293},[279,2045,390],{"class":289},[279,2047,2048,2050,2052,2054,2056,2058,2060,2062],{"class":281,"line":544},[279,2049,478],{"class":364},[279,2051,380],{"class":289},[279,2053,483],{"class":354},[279,2055,486],{"class":289},[279,2057,490],{"class":489},[279,2059,493],{"class":289},[279,2061,496],{"class":354},[279,2063,499],{"class":289},[279,2065,2066,2068,2070,2072,2074,2076,2078,2080,2082],{"class":281,"line":558},[279,2067,512],{"class":285},[279,2069,515],{"class":289},[279,2071,518],{"class":312},[279,2073,521],{"class":289},[279,2075,524],{"class":293},[279,2077,527],{"class":289},[279,2079,530],{"class":312},[279,2081,533],{"class":289},[279,2083,318],{"class":289},[279,2085,2086],{"class":281,"line":1720},[279,2087,541],{"class":289},[279,2089,2090,2092,2094,2096],{"class":281,"line":1745},[279,2091,547],{"class":376},[279,2093,380],{"class":289},[279,2095,553],{"class":552},[279,2097,390],{"class":289},[279,2099,2100,2102,2104],{"class":281,"line":1761},[279,2101,527],{"class":289},[279,2103,453],{"class":293},[279,2105,318],{"class":289},[279,2107,2108],{"class":281,"line":1770},[279,2109,348],{"emptyLinePlaceholder":347},[279,2111,2112,2114,2117,2119,2121,2123,2126,2128,2132,2134,2136],{"class":281,"line":1775},[279,2113,355],{"class":354},[279,2115,2116],{"class":293}," askQuestion ",[279,2118,361],{"class":289},[279,2120,483],{"class":354},[279,2122,769],{"class":289},[279,2124,2125],{"class":489},"prompt",[279,2127,380],{"class":289},[279,2129,2131],{"class":2130},"sBMFI"," string",[279,2133,453],{"class":289},[279,2135,496],{"class":354},[279,2137,499],{"class":289},[279,2139,2140,2143,2145,2147,2149,2151,2153],{"class":281,"line":1794},[279,2141,2142],{"class":354},"  const",[279,2144,722],{"class":293},[279,2146,716],{"class":289},[279,2148,643],{"class":289},[279,2150,593],{"class":364},[279,2152,367],{"class":376},[279,2154,370],{"class":289},[279,2156,2157,2160,2162,2164,2166,2168,2170,2172,2174],{"class":281,"line":1815},[279,2158,2159],{"class":376},"    model",[279,2161,380],{"class":289},[279,2163,614],{"class":364},[279,2165,367],{"class":376},[279,2167,315],{"class":289},[279,2169,665],{"class":312},[279,2171,315],{"class":289},[279,2173,453],{"class":376},[279,2175,390],{"class":289},[279,2177,2179,2182,2184,2186,2188,2190,2192],{"class":281,"line":2178},24,[279,2180,2181],{"class":376},"    tools",[279,2183,380],{"class":289},[279,2185,290],{"class":289},[279,2187,683],{"class":376},[279,2189,380],{"class":289},[279,2191,1676],{"class":293},[279,2193,2194],{"class":289}," },\n",[279,2196,2198,2201,2203,2205],{"class":281,"line":2197},25,[279,2199,2200],{"class":376},"    maxSteps",[279,2202,380],{"class":289},[279,2204,987],{"class":986},[279,2206,390],{"class":289},[279,2208,2210,2213,2215],{"class":281,"line":2209},26,[279,2211,2212],{"class":289},"  }",[279,2214,453],{"class":376},[279,2216,318],{"class":289},[279,2218,2220],{"class":281,"line":2219},27,[279,2221,348],{"emptyLinePlaceholder":347},[279,2223,2225,2227,2229,2232,2234,2236,2238,2240,2242,2244,2246,2248,2251,2253,2255],{"class":281,"line":2224},28,[279,2226,2142],{"class":354},[279,2228,290],{"class":289},[279,2230,2231],{"class":293}," textStream",[279,2233,303],{"class":289},[279,2235,716],{"class":289},[279,2237,719],{"class":285},[279,2239,722],{"class":293},[279,2241,237],{"class":289},[279,2243,727],{"class":364},[279,2245,367],{"class":376},[279,2247,1544],{"class":289},[279,2249,2250],{"class":293}," prompt",[279,2252,303],{"class":289},[279,2254,453],{"class":376},[279,2256,318],{"class":289},[279,2258,2260],{"class":281,"line":2259},29,[279,2261,348],{"emptyLinePlaceholder":347},[279,2263,2265,2268,2270,2272,2274,2276,2279,2281,2284],{"class":281,"line":2264},30,[279,2266,2267],{"class":285},"  for",[279,2269,719],{"class":285},[279,2271,769],{"class":376},[279,2273,355],{"class":354},[279,2275,836],{"class":293},[279,2277,2278],{"class":289}," of",[279,2280,2231],{"class":293},[279,2282,2283],{"class":376},") ",[279,2285,370],{"class":289},[279,2287,2289,2292,2294,2296,2298,2300,2302,2304,2306],{"class":281,"line":2288},31,[279,2290,2291],{"class":293},"    process",[279,2293,237],{"class":289},[279,2295,792],{"class":293},[279,2297,237],{"class":289},[279,2299,797],{"class":364},[279,2301,367],{"class":376},[279,2303,249],{"class":293},[279,2305,453],{"class":376},[279,2307,318],{"class":289},[279,2309,2311],{"class":281,"line":2310},32,[279,2312,2313],{"class":289},"  }\n",[279,2315,2317],{"class":281,"line":2316},33,[279,2318,2319],{"class":289},"};\n",[279,2321,2323],{"class":281,"line":2322},34,[279,2324,348],{"emptyLinePlaceholder":347},[279,2326,2328,2331,2334,2336,2338,2340,2342,2344],{"class":281,"line":2327},35,[279,2329,2330],{"class":285},"await",[279,2332,2333],{"class":364}," askQuestion",[279,2335,367],{"class":293},[279,2337,315],{"class":289},[279,2339,743],{"class":312},[279,2341,315],{"class":289},[279,2343,453],{"class":293},[279,2345,318],{"class":289},[254,2347],{},[239,2349,2351],{"id":2350},"key-concepts","Key Concepts",[2353,2354,2355,2368],"table",{},[2356,2357,2358],"thead",{},[2359,2360,2361,2365],"tr",{},[2362,2363,2364],"th",{},"Concept",[2362,2366,2367],{},"Notes",[2369,2370,2371,2384,2394,2405,2420,2429,2442,2454],"tbody",{},[2359,2372,2373,2378],{},[2374,2375,2376],"td",{},[219,2377,269],{},[2374,2379,2380,2381,453],{},"SDK 6 way to define tool inputs (replaces ",[219,2382,2383],{},"parameters",[2359,2385,2386,2391],{},[2374,2387,2388],{},[219,2389,2390],{},"strict: true",[2374,2392,2393],{},"Enforces the schema strictly — recommended",[2359,2395,2396,2402],{},[2374,2397,2398,2401],{},[219,2399,2400],{},"tools"," object",[2374,2403,2404],{},"Keys are the tool names the model will reference",[2359,2406,2407,2412],{},[2374,2408,2409],{},[219,2410,2411],{},"tool.description",[2374,2413,2414,2415,2419],{},"What the model reads to decide ",[2416,2417,2418],"em",{},"when"," to call the tool — be specific",[2359,2421,2422,2426],{},[2374,2423,2424],{},[219,2425,913],{},[2374,2427,2428],{},"Max loop iterations; set to expected tool calls + 1 to be safe",[2359,2430,2431,2435],{},[2374,2432,2433],{},[219,2434,575],{},[2374,2436,2437,2438,2441],{},"Returns ",[219,2439,2440],{},"{ textStream }"," — stream the final answer token by token",[2359,2443,2444,2448],{},[2374,2445,2446],{},[219,2447,821],{},[2374,2449,2437,2450,2453],{},[219,2451,2452],{},"{ text, steps }"," — full response + step-by-step inspection",[2359,2455,2456,2460],{},[2374,2457,2458],{},[219,2459,1236],{},[2374,2461,2462,2463,2465,2466,2465,2468,2465,2470],{},"Array of each iteration: ",[219,2464,1343],{},", ",[219,2467,249],{},[219,2469,1411],{},[219,2471,1444],{},[254,2473],{},[239,2475,2477],{"id":2476},"when-to-use","When to Use",[2479,2480,2481,2485,2488,2491],"ul",{},[2482,2483,2484],"li",{},"Multi-step research (search → summarise → answer)",[2482,2486,2487],{},"Tasks that depend on external data at runtime (weather, stock prices, databases)",[2482,2489,2490],{},"Pipelines where the number of steps isn't known in advance",[2482,2492,262,2493,2495],{},[219,2494,913],{}," any time you want a safety cap on how many tool calls the model can make",[2497,2498,2499],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":252,"searchDepth":321,"depth":321,"links":2501},[2502,2503,2504,2505,2506,2510,2511,2512,2513,2514,2515],{"id":241,"depth":321,"text":242},{"id":258,"depth":321,"text":259},{"id":569,"depth":321,"text":570},{"id":815,"depth":321,"text":816},{"id":909,"depth":321,"text":2507,"children":2508},"Limiting Iterations with maxSteps",[2509],{"id":1101,"depth":344,"text":1102},{"id":1130,"depth":321,"text":1131},{"id":1227,"depth":321,"text":1228},{"id":1488,"depth":321,"text":1489},{"id":1822,"depth":321,"text":1823},{"id":2350,"depth":321,"text":2351},{"id":2476,"depth":321,"text":2477},"Build agentic loops with tools using ToolLoopAgent in AI SDK 6.","md",null,{},{"icon":149},{"title":146,"description":2516},"A96_nF70IXlqAL35zopbVd9bGsZvAuatHk4h2oBVHmc",[2524,2526],{"title":141,"path":142,"stem":143,"description":2525,"icon":144,"children":-1},"Generate vector embeddings for text using AI SDK 6.",{"title":158,"path":159,"stem":160,"description":2527,"icon":161,"children":-1},"Text, title, and styling in standard markdown.",1772944812213]