[{"data":1,"prerenderedAt":4699},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-ai-sdk":263,"-core-concepts-ai-sdk-surround":4694},[4,30,115,174,233,249],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Frameworks","\u002Fframeworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Fframeworks\u002Foverview","2.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","\u002Fframeworks\u002Fnuxt","2.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","\u002Fframeworks\u002Fnextjs","2.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","\u002Fframeworks\u002Fsveltekit","2.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","\u002Fframeworks\u002Fnitro","2.frameworks\u002F04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","2.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","\u002Fframeworks\u002Fnestjs","2.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","\u002Fframeworks\u002Fexpress","2.frameworks\u002F07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","\u002Fframeworks\u002Fhono","2.frameworks\u002F08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","\u002Fframeworks\u002Ffastify","2.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","\u002Fframeworks\u002Felysia","2.frameworks\u002F10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"React Router","\u002Fframeworks\u002Freact-router","2.frameworks\u002F11.react-router","i-simple-icons-reactrouter",{"title":96,"path":97,"stem":98,"icon":99},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","2.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":101,"path":102,"stem":103,"icon":104},"Standalone","\u002Fframeworks\u002Fstandalone","2.frameworks\u002F13.standalone","i-simple-icons-typescript",{"title":106,"path":107,"stem":108,"icon":109},"Astro","\u002Fframeworks\u002Fastro","2.frameworks\u002F14.astro","i-simple-icons-astro",{"title":111,"path":112,"stem":113,"icon":114},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","2.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":116,"path":117,"stem":118,"children":119,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[120,125,130,135,140,145,150,154,159,164,169],{"title":121,"path":122,"stem":123,"icon":124},"Request Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":126,"path":127,"stem":128,"icon":129},"Wide Events","\u002Fcore-concepts\u002Fwide-events","3.core-concepts\u002F1.wide-events","i-lucide-layers",{"title":131,"path":132,"stem":133,"icon":134},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F10.vite-plugin","i-custom-vite",{"title":136,"path":137,"stem":138,"icon":139},"AI SDK Integration","\u002Fcore-concepts\u002Fai-sdk","3.core-concepts\u002F11.ai-sdk","i-simple-icons-vercel",{"title":141,"path":142,"stem":143,"icon":144},"Structured Errors","\u002Fcore-concepts\u002Fstructured-errors","3.core-concepts\u002F2.structured-errors","i-lucide-shield-alert",{"title":146,"path":147,"stem":148,"icon":149},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F3.best-practices","i-lucide-shield-check",{"title":151,"path":152,"stem":153,"icon":104},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F4.typed-fields",{"title":155,"path":156,"stem":157,"icon":158},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F5.sampling","i-lucide-filter",{"title":160,"path":161,"stem":162,"icon":163},"Client Logging","\u002Fcore-concepts\u002Fclient-logging","3.core-concepts\u002F6.client-logging","i-lucide-monitor",{"title":165,"path":166,"stem":167,"icon":168},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F7.configuration","i-lucide-settings",{"title":170,"path":171,"stem":172,"icon":173},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F8.performance","i-lucide-gauge",{"title":175,"path":176,"stem":177,"children":178,"page":29},"Adapters","\u002Fadapters","4.adapters",[179,183,188,193,198,203,208,213,218,223,228],{"title":36,"path":180,"stem":181,"icon":182},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":184,"path":185,"stem":186,"icon":187},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F10.pipeline","i-lucide-workflow",{"title":189,"path":190,"stem":191,"icon":192},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F11.browser","i-lucide-globe",{"title":194,"path":195,"stem":196,"icon":197},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":199,"path":200,"stem":201,"icon":202},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":204,"path":205,"stem":206,"icon":207},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":209,"path":210,"stem":211,"icon":212},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":214,"path":215,"stem":216,"icon":217},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":219,"path":220,"stem":221,"icon":222},"File System","\u002Fadapters\u002Ffs","4.adapters\u002F7.fs","i-lucide-hard-drive",{"title":224,"path":225,"stem":226,"icon":227},"HyperDX","\u002Fadapters\u002Fhyperdx","4.adapters\u002F8.hyperdx","i-custom-hyperdx",{"title":229,"path":230,"stem":231,"icon":232},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F9.custom","i-lucide-code",{"title":234,"path":235,"stem":236,"children":237,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[238,241,245],{"title":36,"path":239,"stem":240,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":242,"path":243,"stem":244,"icon":114},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":246,"path":247,"stem":248,"icon":232},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":250,"path":251,"stem":252,"children":253,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[254,258],{"title":36,"path":255,"stem":256,"icon":257},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":259,"path":260,"stem":261,"icon":262},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":264,"title":136,"body":265,"description":4682,"extension":4683,"links":4684,"meta":4690,"navigation":4691,"path":137,"seo":4692,"stem":138,"__hash__":4693},"docs\u002F3.core-concepts\u002F11.ai-sdk.md",{"type":266,"value":267,"toc":4663},"minimark",[268,276,363,368,371,423,426,429,720,723,1031,1035,1045,1119,1122,1127,1174,1181,1232,1457,1461,1464,1467,1760,1763,1766,1961,1965,1968,2238,2241,2840,2844,2851,3170,3174,3184,3493,3497,3503,3562,3566,3874,3878,3886,4014,4024,4137,4158,4162,4165,4281,4284,4288,4293,4659],[269,270,271,275],"p",{},[272,273,274],"code",{},"evlog\u002Fai"," gives you full AI observability by wrapping your model with middleware. Token usage, tool calls, streaming performance, cache hits, reasoning tokens, all captured into the wide event automatically.",[277,278,279],"code-collapse",{},[280,281,287],"pre",{"className":282,"code":283,"filename":284,"language":285,"meta":286,"style":286},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Add AI observability to my app with evlog.\n\n- Install the AI SDK: pnpm add ai\n- Import createAILogger from 'evlog\u002Fai'\n- Create an AI logger with createAILogger(log) where log is your request logger\n- Wrap your model with ai.wrap('anthropic\u002Fclaude-sonnet-4.6') and pass it to generateText, streamText, etc.\n- Token usage, tool calls, streaming metrics, and errors are captured automatically into the wide event\n- For embedding calls, use ai.captureEmbed({ usage }) after embed() or embedMany()\n- Works with all frameworks: Nuxt, Express, Hono, Fastify, NestJS, Elysia, standalone\n\nDocs: https:\u002F\u002Fwww.evlog.dev\u002Fcore-concepts\u002Fai-sdk\nAdapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n","Prompt","txt","",[272,288,289,297,304,310,316,322,328,334,340,346,351,357],{"__ignoreMap":286},[290,291,294],"span",{"class":292,"line":293},"line",1,[290,295,296],{},"Add AI observability to my app with evlog.\n",[290,298,300],{"class":292,"line":299},2,[290,301,303],{"emptyLinePlaceholder":302},true,"\n",[290,305,307],{"class":292,"line":306},3,[290,308,309],{},"- Install the AI SDK: pnpm add ai\n",[290,311,313],{"class":292,"line":312},4,[290,314,315],{},"- Import createAILogger from 'evlog\u002Fai'\n",[290,317,319],{"class":292,"line":318},5,[290,320,321],{},"- Create an AI logger with createAILogger(log) where log is your request logger\n",[290,323,325],{"class":292,"line":324},6,[290,326,327],{},"- Wrap your model with ai.wrap('anthropic\u002Fclaude-sonnet-4.6') and pass it to generateText, streamText, etc.\n",[290,329,331],{"class":292,"line":330},7,[290,332,333],{},"- Token usage, tool calls, streaming metrics, and errors are captured automatically into the wide event\n",[290,335,337],{"class":292,"line":336},8,[290,338,339],{},"- For embedding calls, use ai.captureEmbed({ usage }) after embed() or embedMany()\n",[290,341,343],{"class":292,"line":342},9,[290,344,345],{},"- Works with all frameworks: Nuxt, Express, Hono, Fastify, NestJS, Elysia, standalone\n",[290,347,349],{"class":292,"line":348},10,[290,350,303],{"emptyLinePlaceholder":302},[290,352,354],{"class":292,"line":353},11,[290,355,356],{},"Docs: https:\u002F\u002Fwww.evlog.dev\u002Fcore-concepts\u002Fai-sdk\n",[290,358,360],{"class":292,"line":359},12,[290,361,362],{},"Adapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n",[364,365,367],"h2",{"id":366},"install","Install",[269,369,370],{},"Add the AI SDK as a dependency:",[372,373,374,394,409],"code-group",{},[280,375,380],{"className":376,"code":377,"filename":378,"language":379,"meta":286,"style":286},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install ai\n","npm","bash",[272,381,382],{"__ignoreMap":286},[290,383,384,387,391],{"class":292,"line":293},[290,385,378],{"class":386},"sBMFI",[290,388,390],{"class":389},"sfazB"," install",[290,392,393],{"class":389}," ai\n",[280,395,398],{"className":376,"code":396,"filename":397,"language":379,"meta":286,"style":286},"bun add ai\n","bun",[272,399,400],{"__ignoreMap":286},[290,401,402,404,407],{"class":292,"line":293},[290,403,397],{"class":386},[290,405,406],{"class":389}," add",[290,408,393],{"class":389},[280,410,413],{"className":376,"code":411,"filename":412,"language":379,"meta":286,"style":286},"pnpm add ai\n","pnpm",[272,414,415],{"__ignoreMap":286},[290,416,417,419,421],{"class":292,"line":293},[290,418,412],{"class":386},[290,420,406],{"class":389},[290,422,393],{"class":389},[364,424,20],{"id":425},"quick-start",[269,427,428],{},"Two lines to add, one param to change:",[372,430,431,555],{},[280,432,437],{"className":433,"code":434,"filename":435,"language":436,"meta":286,"style":286},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineEventHandler(async (event) => {\n  const result = streamText({\n    model: 'anthropic\u002Fclaude-sonnet-4.6',\n    messages,\n  })\n  return result.toTextStreamResponse()\n})\n","Before","typescript",[272,438,439,477,497,517,524,532,548],{"__ignoreMap":286},[290,440,441,445,448,452,456,460,464,468,471,474],{"class":292,"line":293},[290,442,444],{"class":443},"s7zQu","export",[290,446,447],{"class":443}," default",[290,449,451],{"class":450},"s2Zo4"," defineEventHandler",[290,453,455],{"class":454},"sTEyZ","(",[290,457,459],{"class":458},"spNyl","async",[290,461,463],{"class":462},"sMK4o"," (",[290,465,467],{"class":466},"sHdIc","event",[290,469,470],{"class":462},")",[290,472,473],{"class":458}," =>",[290,475,476],{"class":462}," {\n",[290,478,479,482,485,488,491,494],{"class":292,"line":299},[290,480,481],{"class":458},"  const",[290,483,484],{"class":454}," result",[290,486,487],{"class":462}," =",[290,489,490],{"class":450}," streamText",[290,492,455],{"class":493},"swJcz",[290,495,496],{"class":462},"{\n",[290,498,499,502,505,508,511,514],{"class":292,"line":306},[290,500,501],{"class":493},"    model",[290,503,504],{"class":462},":",[290,506,507],{"class":462}," '",[290,509,510],{"class":389},"anthropic\u002Fclaude-sonnet-4.6",[290,512,513],{"class":462},"'",[290,515,516],{"class":462},",\n",[290,518,519,522],{"class":292,"line":312},[290,520,521],{"class":454},"    messages",[290,523,516],{"class":462},[290,525,526,529],{"class":292,"line":318},[290,527,528],{"class":462},"  }",[290,530,531],{"class":493},")\n",[290,533,534,537,539,542,545],{"class":292,"line":324},[290,535,536],{"class":443},"  return",[290,538,484],{"class":454},[290,540,541],{"class":462},".",[290,543,544],{"class":450},"toTextStreamResponse",[290,546,547],{"class":493},"()\n",[290,549,550,553],{"class":292,"line":330},[290,551,552],{"class":462},"}",[290,554,531],{"class":454},[280,556,559],{"className":433,"code":557,"filename":558,"language":436,"meta":286,"style":286},"import { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log)\n\n  const result = streamText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    messages,\n  })\n  return result.toTextStreamResponse()\n})\n","After",[272,560,561,585,589,611,629,647,651,665,690,696,702,714],{"__ignoreMap":286},[290,562,563,566,569,572,575,578,580,582],{"class":292,"line":293},[290,564,565],{"class":443},"import",[290,567,568],{"class":462}," {",[290,570,571],{"class":454}," createAILogger",[290,573,574],{"class":462}," }",[290,576,577],{"class":443}," from",[290,579,507],{"class":462},[290,581,274],{"class":389},[290,583,584],{"class":462},"'\n",[290,586,587],{"class":292,"line":299},[290,588,303],{"emptyLinePlaceholder":302},[290,590,591,593,595,597,599,601,603,605,607,609],{"class":292,"line":306},[290,592,444],{"class":443},[290,594,447],{"class":443},[290,596,451],{"class":450},[290,598,455],{"class":454},[290,600,459],{"class":458},[290,602,463],{"class":462},[290,604,467],{"class":466},[290,606,470],{"class":462},[290,608,473],{"class":458},[290,610,476],{"class":462},[290,612,613,615,618,620,623,625,627],{"class":292,"line":312},[290,614,481],{"class":458},[290,616,617],{"class":454}," log",[290,619,487],{"class":462},[290,621,622],{"class":450}," useLogger",[290,624,455],{"class":493},[290,626,467],{"class":454},[290,628,531],{"class":493},[290,630,631,633,636,638,640,642,645],{"class":292,"line":318},[290,632,481],{"class":458},[290,634,635],{"class":454}," ai",[290,637,487],{"class":462},[290,639,571],{"class":450},[290,641,455],{"class":493},[290,643,644],{"class":454},"log",[290,646,531],{"class":493},[290,648,649],{"class":292,"line":324},[290,650,303],{"emptyLinePlaceholder":302},[290,652,653,655,657,659,661,663],{"class":292,"line":330},[290,654,481],{"class":458},[290,656,484],{"class":454},[290,658,487],{"class":462},[290,660,490],{"class":450},[290,662,455],{"class":493},[290,664,496],{"class":462},[290,666,667,669,671,673,675,678,680,682,684,686,688],{"class":292,"line":336},[290,668,501],{"class":493},[290,670,504],{"class":462},[290,672,635],{"class":454},[290,674,541],{"class":462},[290,676,677],{"class":450},"wrap",[290,679,455],{"class":493},[290,681,513],{"class":462},[290,683,510],{"class":389},[290,685,513],{"class":462},[290,687,470],{"class":493},[290,689,516],{"class":462},[290,691,692,694],{"class":292,"line":342},[290,693,521],{"class":454},[290,695,516],{"class":462},[290,697,698,700],{"class":292,"line":348},[290,699,528],{"class":462},[290,701,531],{"class":493},[290,703,704,706,708,710,712],{"class":292,"line":353},[290,705,536],{"class":443},[290,707,484],{"class":454},[290,709,541],{"class":462},[290,711,544],{"class":450},[290,713,547],{"class":493},[290,715,716,718],{"class":292,"line":359},[290,717,552],{"class":462},[290,719,531],{"class":454},[269,721,722],{},"Your wide event now includes:",[280,724,728],{"className":725,"code":726,"language":727,"meta":286,"style":286},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fchat\",\n  \"status\": 200,\n  \"duration\": \"4.5s\",\n  \"ai\": {\n    \"calls\": 1,\n    \"model\": \"claude-sonnet-4.6\",\n    \"provider\": \"anthropic\",\n    \"inputTokens\": 3312,\n    \"outputTokens\": 814,\n    \"totalTokens\": 4126,\n    \"reasoningTokens\": 225,\n    \"finishReason\": \"stop\",\n    \"msToFirstChunk\": 234,\n    \"msToFinish\": 4500,\n    \"tokensPerSecond\": 180\n  }\n}\n","json",[272,729,730,734,757,777,794,814,827,844,864,884,900,916,932,949,970,987,1004,1019,1025],{"__ignoreMap":286},[290,731,732],{"class":292,"line":293},[290,733,496],{"class":462},[290,735,736,739,742,745,747,750,753,755],{"class":292,"line":299},[290,737,738],{"class":462},"  \"",[290,740,741],{"class":458},"method",[290,743,744],{"class":462},"\"",[290,746,504],{"class":462},[290,748,749],{"class":462}," \"",[290,751,752],{"class":389},"POST",[290,754,744],{"class":462},[290,756,516],{"class":462},[290,758,759,761,764,766,768,770,773,775],{"class":292,"line":306},[290,760,738],{"class":462},[290,762,763],{"class":458},"path",[290,765,744],{"class":462},[290,767,504],{"class":462},[290,769,749],{"class":462},[290,771,772],{"class":389},"\u002Fapi\u002Fchat",[290,774,744],{"class":462},[290,776,516],{"class":462},[290,778,779,781,784,786,788,792],{"class":292,"line":312},[290,780,738],{"class":462},[290,782,783],{"class":458},"status",[290,785,744],{"class":462},[290,787,504],{"class":462},[290,789,791],{"class":790},"sbssI"," 200",[290,793,516],{"class":462},[290,795,796,798,801,803,805,807,810,812],{"class":292,"line":318},[290,797,738],{"class":462},[290,799,800],{"class":458},"duration",[290,802,744],{"class":462},[290,804,504],{"class":462},[290,806,749],{"class":462},[290,808,809],{"class":389},"4.5s",[290,811,744],{"class":462},[290,813,516],{"class":462},[290,815,816,818,821,823,825],{"class":292,"line":324},[290,817,738],{"class":462},[290,819,820],{"class":458},"ai",[290,822,744],{"class":462},[290,824,504],{"class":462},[290,826,476],{"class":462},[290,828,829,832,835,837,839,842],{"class":292,"line":330},[290,830,831],{"class":462},"    \"",[290,833,834],{"class":386},"calls",[290,836,744],{"class":462},[290,838,504],{"class":462},[290,840,841],{"class":790}," 1",[290,843,516],{"class":462},[290,845,846,848,851,853,855,857,860,862],{"class":292,"line":336},[290,847,831],{"class":462},[290,849,850],{"class":386},"model",[290,852,744],{"class":462},[290,854,504],{"class":462},[290,856,749],{"class":462},[290,858,859],{"class":389},"claude-sonnet-4.6",[290,861,744],{"class":462},[290,863,516],{"class":462},[290,865,866,868,871,873,875,877,880,882],{"class":292,"line":342},[290,867,831],{"class":462},[290,869,870],{"class":386},"provider",[290,872,744],{"class":462},[290,874,504],{"class":462},[290,876,749],{"class":462},[290,878,879],{"class":389},"anthropic",[290,881,744],{"class":462},[290,883,516],{"class":462},[290,885,886,888,891,893,895,898],{"class":292,"line":348},[290,887,831],{"class":462},[290,889,890],{"class":386},"inputTokens",[290,892,744],{"class":462},[290,894,504],{"class":462},[290,896,897],{"class":790}," 3312",[290,899,516],{"class":462},[290,901,902,904,907,909,911,914],{"class":292,"line":353},[290,903,831],{"class":462},[290,905,906],{"class":386},"outputTokens",[290,908,744],{"class":462},[290,910,504],{"class":462},[290,912,913],{"class":790}," 814",[290,915,516],{"class":462},[290,917,918,920,923,925,927,930],{"class":292,"line":359},[290,919,831],{"class":462},[290,921,922],{"class":386},"totalTokens",[290,924,744],{"class":462},[290,926,504],{"class":462},[290,928,929],{"class":790}," 4126",[290,931,516],{"class":462},[290,933,935,937,940,942,944,947],{"class":292,"line":934},13,[290,936,831],{"class":462},[290,938,939],{"class":386},"reasoningTokens",[290,941,744],{"class":462},[290,943,504],{"class":462},[290,945,946],{"class":790}," 225",[290,948,516],{"class":462},[290,950,952,954,957,959,961,963,966,968],{"class":292,"line":951},14,[290,953,831],{"class":462},[290,955,956],{"class":386},"finishReason",[290,958,744],{"class":462},[290,960,504],{"class":462},[290,962,749],{"class":462},[290,964,965],{"class":389},"stop",[290,967,744],{"class":462},[290,969,516],{"class":462},[290,971,973,975,978,980,982,985],{"class":292,"line":972},15,[290,974,831],{"class":462},[290,976,977],{"class":386},"msToFirstChunk",[290,979,744],{"class":462},[290,981,504],{"class":462},[290,983,984],{"class":790}," 234",[290,986,516],{"class":462},[290,988,990,992,995,997,999,1002],{"class":292,"line":989},16,[290,991,831],{"class":462},[290,993,994],{"class":386},"msToFinish",[290,996,744],{"class":462},[290,998,504],{"class":462},[290,1000,1001],{"class":790}," 4500",[290,1003,516],{"class":462},[290,1005,1007,1009,1012,1014,1016],{"class":292,"line":1006},17,[290,1008,831],{"class":462},[290,1010,1011],{"class":386},"tokensPerSecond",[290,1013,744],{"class":462},[290,1015,504],{"class":462},[290,1017,1018],{"class":790}," 180\n",[290,1020,1022],{"class":292,"line":1021},18,[290,1023,1024],{"class":462},"  }\n",[290,1026,1028],{"class":292,"line":1027},19,[290,1029,1030],{"class":462},"}\n",[364,1032,1034],{"id":1033},"how-it-works","How It Works",[269,1036,1037,1040,1041,1044],{},[272,1038,1039],{},"createAILogger(log, options?)"," returns an ",[272,1042,1043],{},"AILogger"," with two methods:",[1046,1047,1048,1061],"table",{},[1049,1050,1051],"thead",{},[1052,1053,1054,1058],"tr",{},[1055,1056,1057],"th",{},"Method",[1055,1059,1060],{},"Description",[1062,1063,1064,1101],"tbody",{},[1052,1065,1066,1072],{},[1067,1068,1069],"td",{},[272,1070,1071],{},"wrap(model)",[1067,1073,1074,1075,1078,1079,1082,1083,1086,1087,1086,1090,1086,1093,1096,1097,1100],{},"Wraps a language model with middleware. Accepts a model string (e.g. ",[272,1076,1077],{},"'anthropic\u002Fclaude-sonnet-4.6'",") or a ",[272,1080,1081],{},"LanguageModelV3"," object. Works with ",[272,1084,1085],{},"generateText",", ",[272,1088,1089],{},"streamText",[272,1091,1092],{},"generateObject",[272,1094,1095],{},"streamObject",", and ",[272,1098,1099],{},"ToolLoopAgent",". Also works with pre-wrapped models (e.g. from supermemory).",[1052,1102,1103,1108],{},[1067,1104,1105],{},[272,1106,1107],{},"captureEmbed(result)",[1067,1109,1110,1111,1114,1115,1118],{},"Manually captures token usage from ",[272,1112,1113],{},"embed()"," or ",[272,1116,1117],{},"embedMany()"," results (embedding models use a different type).",[269,1120,1121],{},"The middleware intercepts calls at the provider level. It does not touch your callbacks, prompts, or responses. Captured data flows through the normal evlog pipeline (sampling, enrichers, drains) and ends up in Axiom, Better Stack, or wherever you drain to.",[1123,1124,1126],"h3",{"id":1125},"options","Options",[1046,1128,1129,1144],{},[1049,1130,1131],{},[1052,1132,1133,1136,1139,1142],{},[1055,1134,1135],{},"Option",[1055,1137,1138],{},"Type",[1055,1140,1141],{},"Default",[1055,1143,1060],{},[1062,1145,1146],{},[1052,1147,1148,1153,1158,1163],{},[1067,1149,1150],{},[272,1151,1152],{},"toolInputs",[1067,1154,1155],{},[272,1156,1157],{},"boolean | ToolInputsOptions",[1067,1159,1160],{},[272,1161,1162],{},"false",[1067,1164,1165,1166,1169,1170,1173],{},"When enabled, ",[272,1167,1168],{},"toolCalls"," contains ",[272,1171,1172],{},"{ name, input }"," objects instead of plain strings. Opt-in because inputs can be large and may contain sensitive data.",[269,1175,1176,1177,1180],{},"Pass ",[272,1178,1179],{},"true"," to capture all inputs as-is, or an options object for fine-grained control:",[1046,1182,1183,1194],{},[1049,1184,1185],{},[1052,1186,1187,1190,1192],{},[1055,1188,1189],{},"Sub-option",[1055,1191,1138],{},[1055,1193,1060],{},[1062,1195,1196,1214],{},[1052,1197,1198,1203,1208],{},[1067,1199,1200],{},[272,1201,1202],{},"maxLength",[1067,1204,1205],{},[272,1206,1207],{},"number",[1067,1209,1210,1211,470],{},"Truncate stringified inputs exceeding this character length (appends ",[272,1212,1213],{},"…",[1052,1215,1216,1221,1226],{},[1067,1217,1218],{},[272,1219,1220],{},"transform",[1067,1222,1223],{},[272,1224,1225],{},"(input, toolName) => unknown",[1067,1227,1228,1229,1231],{},"Custom transform applied before ",[272,1230,1202],{},". Use to redact fields or reshape data.",[280,1233,1235],{"className":433,"code":1234,"language":436,"meta":286,"style":286},"\u002F\u002F Capture everything\nconst ai = createAILogger(log, { toolInputs: true })\n\n\u002F\u002F Truncate long inputs (e.g. SQL queries)\nconst ai = createAILogger(log, { toolInputs: { maxLength: 200 } })\n\n\u002F\u002F Redact sensitive tool inputs\nconst ai = createAILogger(log, {\n  toolInputs: {\n    maxLength: 500,\n    transform: (input, toolName) => {\n      if (toolName === 'queryDB') return { sql: '***' }\n      return input\n    },\n  },\n})\n",[272,1236,1237,1243,1277,1281,1286,1321,1325,1330,1346,1355,1367,1390,1433,1441,1446,1451],{"__ignoreMap":286},[290,1238,1239],{"class":292,"line":293},[290,1240,1242],{"class":1241},"sHwdD","\u002F\u002F Capture everything\n",[290,1244,1245,1248,1251,1254,1256,1259,1262,1264,1267,1269,1273,1275],{"class":292,"line":299},[290,1246,1247],{"class":458},"const",[290,1249,1250],{"class":454}," ai ",[290,1252,1253],{"class":462},"=",[290,1255,571],{"class":450},[290,1257,1258],{"class":454},"(log",[290,1260,1261],{"class":462},",",[290,1263,568],{"class":462},[290,1265,1266],{"class":493}," toolInputs",[290,1268,504],{"class":462},[290,1270,1272],{"class":1271},"sfNiH"," true",[290,1274,574],{"class":462},[290,1276,531],{"class":454},[290,1278,1279],{"class":292,"line":306},[290,1280,303],{"emptyLinePlaceholder":302},[290,1282,1283],{"class":292,"line":312},[290,1284,1285],{"class":1241},"\u002F\u002F Truncate long inputs (e.g. SQL queries)\n",[290,1287,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1311,1313,1315,1317,1319],{"class":292,"line":318},[290,1289,1247],{"class":458},[290,1291,1250],{"class":454},[290,1293,1253],{"class":462},[290,1295,571],{"class":450},[290,1297,1258],{"class":454},[290,1299,1261],{"class":462},[290,1301,568],{"class":462},[290,1303,1266],{"class":493},[290,1305,504],{"class":462},[290,1307,568],{"class":462},[290,1309,1310],{"class":493}," maxLength",[290,1312,504],{"class":462},[290,1314,791],{"class":790},[290,1316,574],{"class":462},[290,1318,574],{"class":462},[290,1320,531],{"class":454},[290,1322,1323],{"class":292,"line":324},[290,1324,303],{"emptyLinePlaceholder":302},[290,1326,1327],{"class":292,"line":330},[290,1328,1329],{"class":1241},"\u002F\u002F Redact sensitive tool inputs\n",[290,1331,1332,1334,1336,1338,1340,1342,1344],{"class":292,"line":336},[290,1333,1247],{"class":458},[290,1335,1250],{"class":454},[290,1337,1253],{"class":462},[290,1339,571],{"class":450},[290,1341,1258],{"class":454},[290,1343,1261],{"class":462},[290,1345,476],{"class":462},[290,1347,1348,1351,1353],{"class":292,"line":342},[290,1349,1350],{"class":493},"  toolInputs",[290,1352,504],{"class":462},[290,1354,476],{"class":462},[290,1356,1357,1360,1362,1365],{"class":292,"line":348},[290,1358,1359],{"class":493},"    maxLength",[290,1361,504],{"class":462},[290,1363,1364],{"class":790}," 500",[290,1366,516],{"class":462},[290,1368,1369,1372,1374,1376,1379,1381,1384,1386,1388],{"class":292,"line":353},[290,1370,1371],{"class":450},"    transform",[290,1373,504],{"class":462},[290,1375,463],{"class":462},[290,1377,1378],{"class":466},"input",[290,1380,1261],{"class":462},[290,1382,1383],{"class":466}," toolName",[290,1385,470],{"class":462},[290,1387,473],{"class":458},[290,1389,476],{"class":462},[290,1391,1392,1395,1397,1400,1403,1405,1408,1410,1413,1416,1418,1421,1423,1425,1428,1430],{"class":292,"line":359},[290,1393,1394],{"class":443},"      if",[290,1396,463],{"class":493},[290,1398,1399],{"class":454},"toolName",[290,1401,1402],{"class":462}," ===",[290,1404,507],{"class":462},[290,1406,1407],{"class":389},"queryDB",[290,1409,513],{"class":462},[290,1411,1412],{"class":493},") ",[290,1414,1415],{"class":443},"return",[290,1417,568],{"class":462},[290,1419,1420],{"class":493}," sql",[290,1422,504],{"class":462},[290,1424,507],{"class":462},[290,1426,1427],{"class":389},"***",[290,1429,513],{"class":462},[290,1431,1432],{"class":462}," }\n",[290,1434,1435,1438],{"class":292,"line":934},[290,1436,1437],{"class":443},"      return",[290,1439,1440],{"class":454}," input\n",[290,1442,1443],{"class":292,"line":951},[290,1444,1445],{"class":462},"    },\n",[290,1447,1448],{"class":292,"line":972},[290,1449,1450],{"class":462},"  },\n",[290,1452,1453,1455],{"class":292,"line":989},[290,1454,552],{"class":462},[290,1456,531],{"class":454},[364,1458,1460],{"id":1459},"usage-patterns","Usage Patterns",[1123,1462,1089],{"id":1463},"streamtext",[269,1465,1466],{},"The most common pattern, streaming chat with full observability:",[280,1468,1471],{"className":433,"code":1469,"filename":1470,"language":436,"meta":286,"style":286},"import { streamText } from 'ai'\nimport { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log)\n  const { messages } = await readBody(event)\n\n  log.set({ action: 'chat', messagesCount: messages.length })\n\n  const result = streamText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    messages,\n    onFinish: ({ text }) => {\n      \u002F\u002F Your code, no conflict with evlog\n      saveConversation(text)\n    },\n  })\n\n  return result.toTextStreamResponse()\n})\n","server\u002Fapi\u002Fchat.post.ts",[272,1472,1473,1491,1509,1513,1535,1551,1567,1592,1596,1641,1645,1659,1683,1689,1709,1714,1726,1730,1736,1740,1753],{"__ignoreMap":286},[290,1474,1475,1477,1479,1481,1483,1485,1487,1489],{"class":292,"line":293},[290,1476,565],{"class":443},[290,1478,568],{"class":462},[290,1480,490],{"class":454},[290,1482,574],{"class":462},[290,1484,577],{"class":443},[290,1486,507],{"class":462},[290,1488,820],{"class":389},[290,1490,584],{"class":462},[290,1492,1493,1495,1497,1499,1501,1503,1505,1507],{"class":292,"line":299},[290,1494,565],{"class":443},[290,1496,568],{"class":462},[290,1498,571],{"class":454},[290,1500,574],{"class":462},[290,1502,577],{"class":443},[290,1504,507],{"class":462},[290,1506,274],{"class":389},[290,1508,584],{"class":462},[290,1510,1511],{"class":292,"line":306},[290,1512,303],{"emptyLinePlaceholder":302},[290,1514,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533],{"class":292,"line":312},[290,1516,444],{"class":443},[290,1518,447],{"class":443},[290,1520,451],{"class":450},[290,1522,455],{"class":454},[290,1524,459],{"class":458},[290,1526,463],{"class":462},[290,1528,467],{"class":466},[290,1530,470],{"class":462},[290,1532,473],{"class":458},[290,1534,476],{"class":462},[290,1536,1537,1539,1541,1543,1545,1547,1549],{"class":292,"line":318},[290,1538,481],{"class":458},[290,1540,617],{"class":454},[290,1542,487],{"class":462},[290,1544,622],{"class":450},[290,1546,455],{"class":493},[290,1548,467],{"class":454},[290,1550,531],{"class":493},[290,1552,1553,1555,1557,1559,1561,1563,1565],{"class":292,"line":324},[290,1554,481],{"class":458},[290,1556,635],{"class":454},[290,1558,487],{"class":462},[290,1560,571],{"class":450},[290,1562,455],{"class":493},[290,1564,644],{"class":454},[290,1566,531],{"class":493},[290,1568,1569,1571,1573,1576,1578,1580,1583,1586,1588,1590],{"class":292,"line":330},[290,1570,481],{"class":458},[290,1572,568],{"class":462},[290,1574,1575],{"class":454}," messages",[290,1577,574],{"class":462},[290,1579,487],{"class":462},[290,1581,1582],{"class":443}," await",[290,1584,1585],{"class":450}," readBody",[290,1587,455],{"class":493},[290,1589,467],{"class":454},[290,1591,531],{"class":493},[290,1593,1594],{"class":292,"line":336},[290,1595,303],{"emptyLinePlaceholder":302},[290,1597,1598,1601,1603,1606,1608,1611,1614,1616,1618,1621,1623,1625,1628,1630,1632,1634,1637,1639],{"class":292,"line":342},[290,1599,1600],{"class":454},"  log",[290,1602,541],{"class":462},[290,1604,1605],{"class":450},"set",[290,1607,455],{"class":493},[290,1609,1610],{"class":462},"{",[290,1612,1613],{"class":493}," action",[290,1615,504],{"class":462},[290,1617,507],{"class":462},[290,1619,1620],{"class":389},"chat",[290,1622,513],{"class":462},[290,1624,1261],{"class":462},[290,1626,1627],{"class":493}," messagesCount",[290,1629,504],{"class":462},[290,1631,1575],{"class":454},[290,1633,541],{"class":462},[290,1635,1636],{"class":454},"length",[290,1638,574],{"class":462},[290,1640,531],{"class":493},[290,1642,1643],{"class":292,"line":348},[290,1644,303],{"emptyLinePlaceholder":302},[290,1646,1647,1649,1651,1653,1655,1657],{"class":292,"line":353},[290,1648,481],{"class":458},[290,1650,484],{"class":454},[290,1652,487],{"class":462},[290,1654,490],{"class":450},[290,1656,455],{"class":493},[290,1658,496],{"class":462},[290,1660,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681],{"class":292,"line":359},[290,1662,501],{"class":493},[290,1664,504],{"class":462},[290,1666,635],{"class":454},[290,1668,541],{"class":462},[290,1670,677],{"class":450},[290,1672,455],{"class":493},[290,1674,513],{"class":462},[290,1676,510],{"class":389},[290,1678,513],{"class":462},[290,1680,470],{"class":493},[290,1682,516],{"class":462},[290,1684,1685,1687],{"class":292,"line":934},[290,1686,521],{"class":454},[290,1688,516],{"class":462},[290,1690,1691,1694,1696,1699,1702,1705,1707],{"class":292,"line":951},[290,1692,1693],{"class":450},"    onFinish",[290,1695,504],{"class":462},[290,1697,1698],{"class":462}," ({",[290,1700,1701],{"class":466}," text",[290,1703,1704],{"class":462}," })",[290,1706,473],{"class":458},[290,1708,476],{"class":462},[290,1710,1711],{"class":292,"line":972},[290,1712,1713],{"class":1241},"      \u002F\u002F Your code, no conflict with evlog\n",[290,1715,1716,1719,1721,1724],{"class":292,"line":989},[290,1717,1718],{"class":450},"      saveConversation",[290,1720,455],{"class":493},[290,1722,1723],{"class":454},"text",[290,1725,531],{"class":493},[290,1727,1728],{"class":292,"line":1006},[290,1729,1445],{"class":462},[290,1731,1732,1734],{"class":292,"line":1021},[290,1733,528],{"class":462},[290,1735,531],{"class":493},[290,1737,1738],{"class":292,"line":1027},[290,1739,303],{"emptyLinePlaceholder":302},[290,1741,1743,1745,1747,1749,1751],{"class":292,"line":1742},20,[290,1744,536],{"class":443},[290,1746,484],{"class":454},[290,1748,541],{"class":462},[290,1750,544],{"class":450},[290,1752,547],{"class":493},[290,1754,1756,1758],{"class":292,"line":1755},21,[290,1757,552],{"class":462},[290,1759,531],{"class":454},[1123,1761,1085],{"id":1762},"generatetext",[269,1764,1765],{},"Synchronous generation, the middleware captures the result automatically:",[280,1767,1770],{"className":433,"code":1768,"filename":1769,"language":436,"meta":286,"style":286},"import { generateText } from 'ai'\nimport { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log)\n\n  const result = await generateText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    prompt: 'Summarize this document',\n  })\n\n  return { text: result.text }\n})\n","server\u002Fapi\u002Fsummarize.post.ts",[272,1771,1772,1791,1809,1813,1835,1851,1867,1871,1887,1911,1927,1933,1937,1955],{"__ignoreMap":286},[290,1773,1774,1776,1778,1781,1783,1785,1787,1789],{"class":292,"line":293},[290,1775,565],{"class":443},[290,1777,568],{"class":462},[290,1779,1780],{"class":454}," generateText",[290,1782,574],{"class":462},[290,1784,577],{"class":443},[290,1786,507],{"class":462},[290,1788,820],{"class":389},[290,1790,584],{"class":462},[290,1792,1793,1795,1797,1799,1801,1803,1805,1807],{"class":292,"line":299},[290,1794,565],{"class":443},[290,1796,568],{"class":462},[290,1798,571],{"class":454},[290,1800,574],{"class":462},[290,1802,577],{"class":443},[290,1804,507],{"class":462},[290,1806,274],{"class":389},[290,1808,584],{"class":462},[290,1810,1811],{"class":292,"line":306},[290,1812,303],{"emptyLinePlaceholder":302},[290,1814,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833],{"class":292,"line":312},[290,1816,444],{"class":443},[290,1818,447],{"class":443},[290,1820,451],{"class":450},[290,1822,455],{"class":454},[290,1824,459],{"class":458},[290,1826,463],{"class":462},[290,1828,467],{"class":466},[290,1830,470],{"class":462},[290,1832,473],{"class":458},[290,1834,476],{"class":462},[290,1836,1837,1839,1841,1843,1845,1847,1849],{"class":292,"line":318},[290,1838,481],{"class":458},[290,1840,617],{"class":454},[290,1842,487],{"class":462},[290,1844,622],{"class":450},[290,1846,455],{"class":493},[290,1848,467],{"class":454},[290,1850,531],{"class":493},[290,1852,1853,1855,1857,1859,1861,1863,1865],{"class":292,"line":324},[290,1854,481],{"class":458},[290,1856,635],{"class":454},[290,1858,487],{"class":462},[290,1860,571],{"class":450},[290,1862,455],{"class":493},[290,1864,644],{"class":454},[290,1866,531],{"class":493},[290,1868,1869],{"class":292,"line":330},[290,1870,303],{"emptyLinePlaceholder":302},[290,1872,1873,1875,1877,1879,1881,1883,1885],{"class":292,"line":336},[290,1874,481],{"class":458},[290,1876,484],{"class":454},[290,1878,487],{"class":462},[290,1880,1582],{"class":443},[290,1882,1780],{"class":450},[290,1884,455],{"class":493},[290,1886,496],{"class":462},[290,1888,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909],{"class":292,"line":342},[290,1890,501],{"class":493},[290,1892,504],{"class":462},[290,1894,635],{"class":454},[290,1896,541],{"class":462},[290,1898,677],{"class":450},[290,1900,455],{"class":493},[290,1902,513],{"class":462},[290,1904,510],{"class":389},[290,1906,513],{"class":462},[290,1908,470],{"class":493},[290,1910,516],{"class":462},[290,1912,1913,1916,1918,1920,1923,1925],{"class":292,"line":348},[290,1914,1915],{"class":493},"    prompt",[290,1917,504],{"class":462},[290,1919,507],{"class":462},[290,1921,1922],{"class":389},"Summarize this document",[290,1924,513],{"class":462},[290,1926,516],{"class":462},[290,1928,1929,1931],{"class":292,"line":353},[290,1930,528],{"class":462},[290,1932,531],{"class":493},[290,1934,1935],{"class":292,"line":359},[290,1936,303],{"emptyLinePlaceholder":302},[290,1938,1939,1941,1943,1945,1947,1949,1951,1953],{"class":292,"line":934},[290,1940,536],{"class":443},[290,1942,568],{"class":462},[290,1944,1701],{"class":493},[290,1946,504],{"class":462},[290,1948,484],{"class":454},[290,1950,541],{"class":462},[290,1952,1723],{"class":454},[290,1954,1432],{"class":462},[290,1956,1957,1959],{"class":292,"line":951},[290,1958,552],{"class":462},[290,1960,531],{"class":454},[1123,1962,1964],{"id":1963},"multi-step-agents","Multi-step agents",[269,1966,1967],{},"The middleware fires for each step automatically. Steps, tool calls, and tokens are all accumulated across the agent loop:",[280,1969,1972],{"className":433,"code":1970,"filename":1971,"language":436,"meta":286,"style":286},"import { ToolLoopAgent, createAgentUIStreamResponse, stepCountIs } from 'ai'\nimport { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log, {\n    toolInputs: { maxLength: 500 },\n  })\n\n  const agent = new ToolLoopAgent({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    tools: { searchWeb, queryDatabase },\n    stopWhen: stepCountIs(5),\n  })\n\n  return createAgentUIStreamResponse({\n    agent,\n    uiMessages: messages,\n  })\n})\n","server\u002Fapi\u002Fagent.post.ts",[272,1973,1974,2003,2021,2025,2047,2063,2081,2099,2105,2109,2127,2151,2170,2188,2194,2198,2208,2215,2226,2232],{"__ignoreMap":286},[290,1975,1976,1978,1980,1983,1985,1988,1990,1993,1995,1997,1999,2001],{"class":292,"line":293},[290,1977,565],{"class":443},[290,1979,568],{"class":462},[290,1981,1982],{"class":454}," ToolLoopAgent",[290,1984,1261],{"class":462},[290,1986,1987],{"class":454}," createAgentUIStreamResponse",[290,1989,1261],{"class":462},[290,1991,1992],{"class":454}," stepCountIs",[290,1994,574],{"class":462},[290,1996,577],{"class":443},[290,1998,507],{"class":462},[290,2000,820],{"class":389},[290,2002,584],{"class":462},[290,2004,2005,2007,2009,2011,2013,2015,2017,2019],{"class":292,"line":299},[290,2006,565],{"class":443},[290,2008,568],{"class":462},[290,2010,571],{"class":454},[290,2012,574],{"class":462},[290,2014,577],{"class":443},[290,2016,507],{"class":462},[290,2018,274],{"class":389},[290,2020,584],{"class":462},[290,2022,2023],{"class":292,"line":306},[290,2024,303],{"emptyLinePlaceholder":302},[290,2026,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045],{"class":292,"line":312},[290,2028,444],{"class":443},[290,2030,447],{"class":443},[290,2032,451],{"class":450},[290,2034,455],{"class":454},[290,2036,459],{"class":458},[290,2038,463],{"class":462},[290,2040,467],{"class":466},[290,2042,470],{"class":462},[290,2044,473],{"class":458},[290,2046,476],{"class":462},[290,2048,2049,2051,2053,2055,2057,2059,2061],{"class":292,"line":318},[290,2050,481],{"class":458},[290,2052,617],{"class":454},[290,2054,487],{"class":462},[290,2056,622],{"class":450},[290,2058,455],{"class":493},[290,2060,467],{"class":454},[290,2062,531],{"class":493},[290,2064,2065,2067,2069,2071,2073,2075,2077,2079],{"class":292,"line":324},[290,2066,481],{"class":458},[290,2068,635],{"class":454},[290,2070,487],{"class":462},[290,2072,571],{"class":450},[290,2074,455],{"class":493},[290,2076,644],{"class":454},[290,2078,1261],{"class":462},[290,2080,476],{"class":462},[290,2082,2083,2086,2088,2090,2092,2094,2096],{"class":292,"line":330},[290,2084,2085],{"class":493},"    toolInputs",[290,2087,504],{"class":462},[290,2089,568],{"class":462},[290,2091,1310],{"class":493},[290,2093,504],{"class":462},[290,2095,1364],{"class":790},[290,2097,2098],{"class":462}," },\n",[290,2100,2101,2103],{"class":292,"line":336},[290,2102,528],{"class":462},[290,2104,531],{"class":493},[290,2106,2107],{"class":292,"line":342},[290,2108,303],{"emptyLinePlaceholder":302},[290,2110,2111,2113,2116,2118,2121,2123,2125],{"class":292,"line":348},[290,2112,481],{"class":458},[290,2114,2115],{"class":454}," agent",[290,2117,487],{"class":462},[290,2119,2120],{"class":462}," new",[290,2122,1982],{"class":450},[290,2124,455],{"class":493},[290,2126,496],{"class":462},[290,2128,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149],{"class":292,"line":353},[290,2130,501],{"class":493},[290,2132,504],{"class":462},[290,2134,635],{"class":454},[290,2136,541],{"class":462},[290,2138,677],{"class":450},[290,2140,455],{"class":493},[290,2142,513],{"class":462},[290,2144,510],{"class":389},[290,2146,513],{"class":462},[290,2148,470],{"class":493},[290,2150,516],{"class":462},[290,2152,2153,2156,2158,2160,2163,2165,2168],{"class":292,"line":359},[290,2154,2155],{"class":493},"    tools",[290,2157,504],{"class":462},[290,2159,568],{"class":462},[290,2161,2162],{"class":454}," searchWeb",[290,2164,1261],{"class":462},[290,2166,2167],{"class":454}," queryDatabase",[290,2169,2098],{"class":462},[290,2171,2172,2175,2177,2179,2181,2184,2186],{"class":292,"line":934},[290,2173,2174],{"class":493},"    stopWhen",[290,2176,504],{"class":462},[290,2178,1992],{"class":450},[290,2180,455],{"class":493},[290,2182,2183],{"class":790},"5",[290,2185,470],{"class":493},[290,2187,516],{"class":462},[290,2189,2190,2192],{"class":292,"line":951},[290,2191,528],{"class":462},[290,2193,531],{"class":493},[290,2195,2196],{"class":292,"line":972},[290,2197,303],{"emptyLinePlaceholder":302},[290,2199,2200,2202,2204,2206],{"class":292,"line":989},[290,2201,536],{"class":443},[290,2203,1987],{"class":450},[290,2205,455],{"class":493},[290,2207,496],{"class":462},[290,2209,2210,2213],{"class":292,"line":1006},[290,2211,2212],{"class":454},"    agent",[290,2214,516],{"class":462},[290,2216,2217,2220,2222,2224],{"class":292,"line":1021},[290,2218,2219],{"class":493},"    uiMessages",[290,2221,504],{"class":462},[290,2223,1575],{"class":454},[290,2225,516],{"class":462},[290,2227,2228,2230],{"class":292,"line":1027},[290,2229,528],{"class":462},[290,2231,531],{"class":493},[290,2233,2234,2236],{"class":292,"line":1742},[290,2235,552],{"class":462},[290,2237,531],{"class":454},[269,2239,2240],{},"Wide event after a 3-step agent run:",[280,2242,2244],{"className":725,"code":2243,"language":727,"meta":286,"style":286},"{\n  \"ai\": {\n    \"calls\": 3,\n    \"steps\": 3,\n    \"model\": \"claude-sonnet-4.6\",\n    \"provider\": \"anthropic\",\n    \"inputTokens\": 4500,\n    \"outputTokens\": 1200,\n    \"totalTokens\": 5700,\n    \"finishReason\": \"stop\",\n    \"toolCalls\": [\n      { \"name\": \"searchWeb\", \"input\": { \"query\": \"TypeScript 6.0 features\" } },\n      { \"name\": \"queryDatabase\", \"input\": { \"sql\": \"SELECT * FROM docs WHERE topic = 'typescript'\" } },\n      { \"name\": \"searchWeb\", \"input\": { \"query\": \"TypeScript 6.0 release date\" } }\n    ],\n    \"responseId\": \"msg_01XFDUDYJgAACzvnptvVoYEL\",\n    \"stepsUsage\": [\n      { \"model\": \"claude-sonnet-4.6\", \"inputTokens\": 1200, \"outputTokens\": 300, \"toolCalls\": [\"searchWeb\"] },\n      { \"model\": \"claude-sonnet-4.6\", \"inputTokens\": 1500, \"outputTokens\": 400, \"toolCalls\": [\"queryDatabase\", \"searchWeb\"] },\n      { \"model\": \"claude-sonnet-4.6\", \"inputTokens\": 1800, \"outputTokens\": 500 }\n    ],\n    \"msToFirstChunk\": 312,\n    \"msToFinish\": 8200,\n    \"tokensPerSecond\": 146\n  }\n}\n",[272,2245,2246,2250,2262,2277,2292,2310,2328,2342,2357,2372,2390,2403,2456,2507,2556,2561,2581,2594,2661,2735,2780,2784,2800,2816,2830,2835],{"__ignoreMap":286},[290,2247,2248],{"class":292,"line":293},[290,2249,496],{"class":462},[290,2251,2252,2254,2256,2258,2260],{"class":292,"line":299},[290,2253,738],{"class":462},[290,2255,820],{"class":458},[290,2257,744],{"class":462},[290,2259,504],{"class":462},[290,2261,476],{"class":462},[290,2263,2264,2266,2268,2270,2272,2275],{"class":292,"line":306},[290,2265,831],{"class":462},[290,2267,834],{"class":386},[290,2269,744],{"class":462},[290,2271,504],{"class":462},[290,2273,2274],{"class":790}," 3",[290,2276,516],{"class":462},[290,2278,2279,2281,2284,2286,2288,2290],{"class":292,"line":312},[290,2280,831],{"class":462},[290,2282,2283],{"class":386},"steps",[290,2285,744],{"class":462},[290,2287,504],{"class":462},[290,2289,2274],{"class":790},[290,2291,516],{"class":462},[290,2293,2294,2296,2298,2300,2302,2304,2306,2308],{"class":292,"line":318},[290,2295,831],{"class":462},[290,2297,850],{"class":386},[290,2299,744],{"class":462},[290,2301,504],{"class":462},[290,2303,749],{"class":462},[290,2305,859],{"class":389},[290,2307,744],{"class":462},[290,2309,516],{"class":462},[290,2311,2312,2314,2316,2318,2320,2322,2324,2326],{"class":292,"line":324},[290,2313,831],{"class":462},[290,2315,870],{"class":386},[290,2317,744],{"class":462},[290,2319,504],{"class":462},[290,2321,749],{"class":462},[290,2323,879],{"class":389},[290,2325,744],{"class":462},[290,2327,516],{"class":462},[290,2329,2330,2332,2334,2336,2338,2340],{"class":292,"line":330},[290,2331,831],{"class":462},[290,2333,890],{"class":386},[290,2335,744],{"class":462},[290,2337,504],{"class":462},[290,2339,1001],{"class":790},[290,2341,516],{"class":462},[290,2343,2344,2346,2348,2350,2352,2355],{"class":292,"line":336},[290,2345,831],{"class":462},[290,2347,906],{"class":386},[290,2349,744],{"class":462},[290,2351,504],{"class":462},[290,2353,2354],{"class":790}," 1200",[290,2356,516],{"class":462},[290,2358,2359,2361,2363,2365,2367,2370],{"class":292,"line":342},[290,2360,831],{"class":462},[290,2362,922],{"class":386},[290,2364,744],{"class":462},[290,2366,504],{"class":462},[290,2368,2369],{"class":790}," 5700",[290,2371,516],{"class":462},[290,2373,2374,2376,2378,2380,2382,2384,2386,2388],{"class":292,"line":348},[290,2375,831],{"class":462},[290,2377,956],{"class":386},[290,2379,744],{"class":462},[290,2381,504],{"class":462},[290,2383,749],{"class":462},[290,2385,965],{"class":389},[290,2387,744],{"class":462},[290,2389,516],{"class":462},[290,2391,2392,2394,2396,2398,2400],{"class":292,"line":353},[290,2393,831],{"class":462},[290,2395,1168],{"class":386},[290,2397,744],{"class":462},[290,2399,504],{"class":462},[290,2401,2402],{"class":462}," [\n",[290,2404,2405,2408,2410,2413,2415,2417,2419,2422,2424,2426,2428,2430,2432,2434,2436,2438,2441,2443,2445,2447,2450,2452,2454],{"class":292,"line":359},[290,2406,2407],{"class":462},"      {",[290,2409,749],{"class":462},[290,2411,2412],{"class":790},"name",[290,2414,744],{"class":462},[290,2416,504],{"class":462},[290,2418,749],{"class":462},[290,2420,2421],{"class":389},"searchWeb",[290,2423,744],{"class":462},[290,2425,1261],{"class":462},[290,2427,749],{"class":462},[290,2429,1378],{"class":790},[290,2431,744],{"class":462},[290,2433,504],{"class":462},[290,2435,568],{"class":462},[290,2437,749],{"class":462},[290,2439,2440],{"class":493},"query",[290,2442,744],{"class":462},[290,2444,504],{"class":462},[290,2446,749],{"class":462},[290,2448,2449],{"class":389},"TypeScript 6.0 features",[290,2451,744],{"class":462},[290,2453,574],{"class":462},[290,2455,2098],{"class":462},[290,2457,2458,2460,2462,2464,2466,2468,2470,2473,2475,2477,2479,2481,2483,2485,2487,2489,2492,2494,2496,2498,2501,2503,2505],{"class":292,"line":934},[290,2459,2407],{"class":462},[290,2461,749],{"class":462},[290,2463,2412],{"class":790},[290,2465,744],{"class":462},[290,2467,504],{"class":462},[290,2469,749],{"class":462},[290,2471,2472],{"class":389},"queryDatabase",[290,2474,744],{"class":462},[290,2476,1261],{"class":462},[290,2478,749],{"class":462},[290,2480,1378],{"class":790},[290,2482,744],{"class":462},[290,2484,504],{"class":462},[290,2486,568],{"class":462},[290,2488,749],{"class":462},[290,2490,2491],{"class":493},"sql",[290,2493,744],{"class":462},[290,2495,504],{"class":462},[290,2497,749],{"class":462},[290,2499,2500],{"class":389},"SELECT * FROM docs WHERE topic = 'typescript'",[290,2502,744],{"class":462},[290,2504,574],{"class":462},[290,2506,2098],{"class":462},[290,2508,2509,2511,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2550,2552,2554],{"class":292,"line":951},[290,2510,2407],{"class":462},[290,2512,749],{"class":462},[290,2514,2412],{"class":790},[290,2516,744],{"class":462},[290,2518,504],{"class":462},[290,2520,749],{"class":462},[290,2522,2421],{"class":389},[290,2524,744],{"class":462},[290,2526,1261],{"class":462},[290,2528,749],{"class":462},[290,2530,1378],{"class":790},[290,2532,744],{"class":462},[290,2534,504],{"class":462},[290,2536,568],{"class":462},[290,2538,749],{"class":462},[290,2540,2440],{"class":493},[290,2542,744],{"class":462},[290,2544,504],{"class":462},[290,2546,749],{"class":462},[290,2548,2549],{"class":389},"TypeScript 6.0 release date",[290,2551,744],{"class":462},[290,2553,574],{"class":462},[290,2555,1432],{"class":462},[290,2557,2558],{"class":292,"line":972},[290,2559,2560],{"class":462},"    ],\n",[290,2562,2563,2565,2568,2570,2572,2574,2577,2579],{"class":292,"line":989},[290,2564,831],{"class":462},[290,2566,2567],{"class":386},"responseId",[290,2569,744],{"class":462},[290,2571,504],{"class":462},[290,2573,749],{"class":462},[290,2575,2576],{"class":389},"msg_01XFDUDYJgAACzvnptvVoYEL",[290,2578,744],{"class":462},[290,2580,516],{"class":462},[290,2582,2583,2585,2588,2590,2592],{"class":292,"line":1006},[290,2584,831],{"class":462},[290,2586,2587],{"class":386},"stepsUsage",[290,2589,744],{"class":462},[290,2591,504],{"class":462},[290,2593,2402],{"class":462},[290,2595,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2637,2639,2641,2643,2645,2647,2650,2652,2654,2656,2659],{"class":292,"line":1021},[290,2597,2407],{"class":462},[290,2599,749],{"class":462},[290,2601,850],{"class":790},[290,2603,744],{"class":462},[290,2605,504],{"class":462},[290,2607,749],{"class":462},[290,2609,859],{"class":389},[290,2611,744],{"class":462},[290,2613,1261],{"class":462},[290,2615,749],{"class":462},[290,2617,890],{"class":790},[290,2619,744],{"class":462},[290,2621,504],{"class":462},[290,2623,2354],{"class":790},[290,2625,1261],{"class":462},[290,2627,749],{"class":462},[290,2629,906],{"class":790},[290,2631,744],{"class":462},[290,2633,504],{"class":462},[290,2635,2636],{"class":790}," 300",[290,2638,1261],{"class":462},[290,2640,749],{"class":462},[290,2642,1168],{"class":790},[290,2644,744],{"class":462},[290,2646,504],{"class":462},[290,2648,2649],{"class":462}," [",[290,2651,744],{"class":462},[290,2653,2421],{"class":389},[290,2655,744],{"class":462},[290,2657,2658],{"class":462},"]",[290,2660,2098],{"class":462},[290,2662,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2692,2694,2696,2698,2700,2702,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733],{"class":292,"line":1027},[290,2664,2407],{"class":462},[290,2666,749],{"class":462},[290,2668,850],{"class":790},[290,2670,744],{"class":462},[290,2672,504],{"class":462},[290,2674,749],{"class":462},[290,2676,859],{"class":389},[290,2678,744],{"class":462},[290,2680,1261],{"class":462},[290,2682,749],{"class":462},[290,2684,890],{"class":790},[290,2686,744],{"class":462},[290,2688,504],{"class":462},[290,2690,2691],{"class":790}," 1500",[290,2693,1261],{"class":462},[290,2695,749],{"class":462},[290,2697,906],{"class":790},[290,2699,744],{"class":462},[290,2701,504],{"class":462},[290,2703,2704],{"class":790}," 400",[290,2706,1261],{"class":462},[290,2708,749],{"class":462},[290,2710,1168],{"class":790},[290,2712,744],{"class":462},[290,2714,504],{"class":462},[290,2716,2649],{"class":462},[290,2718,744],{"class":462},[290,2720,2472],{"class":389},[290,2722,744],{"class":462},[290,2724,1261],{"class":462},[290,2726,749],{"class":462},[290,2728,2421],{"class":389},[290,2730,744],{"class":462},[290,2732,2658],{"class":462},[290,2734,2098],{"class":462},[290,2736,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2766,2768,2770,2772,2774,2776,2778],{"class":292,"line":1742},[290,2738,2407],{"class":462},[290,2740,749],{"class":462},[290,2742,850],{"class":790},[290,2744,744],{"class":462},[290,2746,504],{"class":462},[290,2748,749],{"class":462},[290,2750,859],{"class":389},[290,2752,744],{"class":462},[290,2754,1261],{"class":462},[290,2756,749],{"class":462},[290,2758,890],{"class":790},[290,2760,744],{"class":462},[290,2762,504],{"class":462},[290,2764,2765],{"class":790}," 1800",[290,2767,1261],{"class":462},[290,2769,749],{"class":462},[290,2771,906],{"class":790},[290,2773,744],{"class":462},[290,2775,504],{"class":462},[290,2777,1364],{"class":790},[290,2779,1432],{"class":462},[290,2781,2782],{"class":292,"line":1755},[290,2783,2560],{"class":462},[290,2785,2787,2789,2791,2793,2795,2798],{"class":292,"line":2786},22,[290,2788,831],{"class":462},[290,2790,977],{"class":386},[290,2792,744],{"class":462},[290,2794,504],{"class":462},[290,2796,2797],{"class":790}," 312",[290,2799,516],{"class":462},[290,2801,2803,2805,2807,2809,2811,2814],{"class":292,"line":2802},23,[290,2804,831],{"class":462},[290,2806,994],{"class":386},[290,2808,744],{"class":462},[290,2810,504],{"class":462},[290,2812,2813],{"class":790}," 8200",[290,2815,516],{"class":462},[290,2817,2819,2821,2823,2825,2827],{"class":292,"line":2818},24,[290,2820,831],{"class":462},[290,2822,1011],{"class":386},[290,2824,744],{"class":462},[290,2826,504],{"class":462},[290,2828,2829],{"class":790}," 146\n",[290,2831,2833],{"class":292,"line":2832},25,[290,2834,1024],{"class":462},[290,2836,2838],{"class":292,"line":2837},26,[290,2839,1030],{"class":462},[1123,2841,2843],{"id":2842},"rag-embed-generate","RAG (embed + generate)",[269,2845,2846,2847,2850],{},"Use ",[272,2848,2849],{},"captureEmbed"," for embedding calls. They use a different model type that cannot be wrapped with middleware:",[280,2852,2855],{"className":433,"code":2853,"filename":2854,"language":436,"meta":286,"style":286},"import { embed, generateText } from 'ai'\nimport { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log)\n\n  const { embedding, usage } = await embed({\n    model: openai.embedding('text-embedding-3-small'),\n    value: query,\n  })\n  ai.captureEmbed({ usage })\n\n  const docs = await findSimilar(embedding)\n\n  const result = await generateText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    prompt: buildPrompt(docs),\n  })\n\n  return { text: result.text }\n})\n","server\u002Fapi\u002Frag.post.ts",[272,2856,2857,2880,2898,2902,2924,2940,2956,2960,2986,3013,3025,3031,3050,3054,3074,3078,3094,3118,3136,3142,3146,3164],{"__ignoreMap":286},[290,2858,2859,2861,2863,2866,2868,2870,2872,2874,2876,2878],{"class":292,"line":293},[290,2860,565],{"class":443},[290,2862,568],{"class":462},[290,2864,2865],{"class":454}," embed",[290,2867,1261],{"class":462},[290,2869,1780],{"class":454},[290,2871,574],{"class":462},[290,2873,577],{"class":443},[290,2875,507],{"class":462},[290,2877,820],{"class":389},[290,2879,584],{"class":462},[290,2881,2882,2884,2886,2888,2890,2892,2894,2896],{"class":292,"line":299},[290,2883,565],{"class":443},[290,2885,568],{"class":462},[290,2887,571],{"class":454},[290,2889,574],{"class":462},[290,2891,577],{"class":443},[290,2893,507],{"class":462},[290,2895,274],{"class":389},[290,2897,584],{"class":462},[290,2899,2900],{"class":292,"line":306},[290,2901,303],{"emptyLinePlaceholder":302},[290,2903,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922],{"class":292,"line":312},[290,2905,444],{"class":443},[290,2907,447],{"class":443},[290,2909,451],{"class":450},[290,2911,455],{"class":454},[290,2913,459],{"class":458},[290,2915,463],{"class":462},[290,2917,467],{"class":466},[290,2919,470],{"class":462},[290,2921,473],{"class":458},[290,2923,476],{"class":462},[290,2925,2926,2928,2930,2932,2934,2936,2938],{"class":292,"line":318},[290,2927,481],{"class":458},[290,2929,617],{"class":454},[290,2931,487],{"class":462},[290,2933,622],{"class":450},[290,2935,455],{"class":493},[290,2937,467],{"class":454},[290,2939,531],{"class":493},[290,2941,2942,2944,2946,2948,2950,2952,2954],{"class":292,"line":324},[290,2943,481],{"class":458},[290,2945,635],{"class":454},[290,2947,487],{"class":462},[290,2949,571],{"class":450},[290,2951,455],{"class":493},[290,2953,644],{"class":454},[290,2955,531],{"class":493},[290,2957,2958],{"class":292,"line":330},[290,2959,303],{"emptyLinePlaceholder":302},[290,2961,2962,2964,2966,2969,2971,2974,2976,2978,2980,2982,2984],{"class":292,"line":336},[290,2963,481],{"class":458},[290,2965,568],{"class":462},[290,2967,2968],{"class":454}," embedding",[290,2970,1261],{"class":462},[290,2972,2973],{"class":454}," usage",[290,2975,574],{"class":462},[290,2977,487],{"class":462},[290,2979,1582],{"class":443},[290,2981,2865],{"class":450},[290,2983,455],{"class":493},[290,2985,496],{"class":462},[290,2987,2988,2990,2992,2995,2997,3000,3002,3004,3007,3009,3011],{"class":292,"line":342},[290,2989,501],{"class":493},[290,2991,504],{"class":462},[290,2993,2994],{"class":454}," openai",[290,2996,541],{"class":462},[290,2998,2999],{"class":450},"embedding",[290,3001,455],{"class":493},[290,3003,513],{"class":462},[290,3005,3006],{"class":389},"text-embedding-3-small",[290,3008,513],{"class":462},[290,3010,470],{"class":493},[290,3012,516],{"class":462},[290,3014,3015,3018,3020,3023],{"class":292,"line":348},[290,3016,3017],{"class":493},"    value",[290,3019,504],{"class":462},[290,3021,3022],{"class":454}," query",[290,3024,516],{"class":462},[290,3026,3027,3029],{"class":292,"line":353},[290,3028,528],{"class":462},[290,3030,531],{"class":493},[290,3032,3033,3036,3038,3040,3042,3044,3046,3048],{"class":292,"line":359},[290,3034,3035],{"class":454},"  ai",[290,3037,541],{"class":462},[290,3039,2849],{"class":450},[290,3041,455],{"class":493},[290,3043,1610],{"class":462},[290,3045,2973],{"class":454},[290,3047,574],{"class":462},[290,3049,531],{"class":493},[290,3051,3052],{"class":292,"line":934},[290,3053,303],{"emptyLinePlaceholder":302},[290,3055,3056,3058,3061,3063,3065,3068,3070,3072],{"class":292,"line":951},[290,3057,481],{"class":458},[290,3059,3060],{"class":454}," docs",[290,3062,487],{"class":462},[290,3064,1582],{"class":443},[290,3066,3067],{"class":450}," findSimilar",[290,3069,455],{"class":493},[290,3071,2999],{"class":454},[290,3073,531],{"class":493},[290,3075,3076],{"class":292,"line":972},[290,3077,303],{"emptyLinePlaceholder":302},[290,3079,3080,3082,3084,3086,3088,3090,3092],{"class":292,"line":989},[290,3081,481],{"class":458},[290,3083,484],{"class":454},[290,3085,487],{"class":462},[290,3087,1582],{"class":443},[290,3089,1780],{"class":450},[290,3091,455],{"class":493},[290,3093,496],{"class":462},[290,3095,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116],{"class":292,"line":1006},[290,3097,501],{"class":493},[290,3099,504],{"class":462},[290,3101,635],{"class":454},[290,3103,541],{"class":462},[290,3105,677],{"class":450},[290,3107,455],{"class":493},[290,3109,513],{"class":462},[290,3111,510],{"class":389},[290,3113,513],{"class":462},[290,3115,470],{"class":493},[290,3117,516],{"class":462},[290,3119,3120,3122,3124,3127,3129,3132,3134],{"class":292,"line":1021},[290,3121,1915],{"class":493},[290,3123,504],{"class":462},[290,3125,3126],{"class":450}," buildPrompt",[290,3128,455],{"class":493},[290,3130,3131],{"class":454},"docs",[290,3133,470],{"class":493},[290,3135,516],{"class":462},[290,3137,3138,3140],{"class":292,"line":1027},[290,3139,528],{"class":462},[290,3141,531],{"class":493},[290,3143,3144],{"class":292,"line":1742},[290,3145,303],{"emptyLinePlaceholder":302},[290,3147,3148,3150,3152,3154,3156,3158,3160,3162],{"class":292,"line":1755},[290,3149,536],{"class":443},[290,3151,568],{"class":462},[290,3153,1701],{"class":493},[290,3155,504],{"class":462},[290,3157,484],{"class":454},[290,3159,541],{"class":462},[290,3161,1723],{"class":454},[290,3163,1432],{"class":462},[290,3165,3166,3168],{"class":292,"line":2786},[290,3167,552],{"class":462},[290,3169,531],{"class":454},[1123,3171,3173],{"id":3172},"multiple-models","Multiple models",[269,3175,3176,3177,3179,3180,3183],{},"Wrap each model separately, they share the same accumulator. When multiple models are used, the wide event includes both ",[272,3178,850],{}," (last model) and ",[272,3181,3182],{},"models"," (all unique models):",[372,3185,3186,3340],{},[280,3187,3190],{"className":433,"code":3188,"filename":3189,"language":436,"meta":286,"style":286},"const ai = createAILogger(log)\n\nconst fast = ai.wrap('anthropic\u002Fclaude-haiku-4.5')\nconst smart = ai.wrap('anthropic\u002Fclaude-sonnet-4.6')\n\nconst classification = await generateText({ model: fast, prompt: classifyPrompt })\nconst response = await generateText({ model: smart, prompt: detailedPrompt })\n","Code",[272,3191,3192,3205,3209,3235,3260,3264,3303],{"__ignoreMap":286},[290,3193,3194,3196,3198,3200,3202],{"class":292,"line":293},[290,3195,1247],{"class":458},[290,3197,1250],{"class":454},[290,3199,1253],{"class":462},[290,3201,571],{"class":450},[290,3203,3204],{"class":454},"(log)\n",[290,3206,3207],{"class":292,"line":299},[290,3208,303],{"emptyLinePlaceholder":302},[290,3210,3211,3213,3216,3218,3220,3222,3224,3226,3228,3231,3233],{"class":292,"line":306},[290,3212,1247],{"class":458},[290,3214,3215],{"class":454}," fast ",[290,3217,1253],{"class":462},[290,3219,635],{"class":454},[290,3221,541],{"class":462},[290,3223,677],{"class":450},[290,3225,455],{"class":454},[290,3227,513],{"class":462},[290,3229,3230],{"class":389},"anthropic\u002Fclaude-haiku-4.5",[290,3232,513],{"class":462},[290,3234,531],{"class":454},[290,3236,3237,3239,3242,3244,3246,3248,3250,3252,3254,3256,3258],{"class":292,"line":312},[290,3238,1247],{"class":458},[290,3240,3241],{"class":454}," smart ",[290,3243,1253],{"class":462},[290,3245,635],{"class":454},[290,3247,541],{"class":462},[290,3249,677],{"class":450},[290,3251,455],{"class":454},[290,3253,513],{"class":462},[290,3255,510],{"class":389},[290,3257,513],{"class":462},[290,3259,531],{"class":454},[290,3261,3262],{"class":292,"line":318},[290,3263,303],{"emptyLinePlaceholder":302},[290,3265,3266,3268,3271,3273,3275,3277,3279,3281,3284,3286,3289,3291,3294,3296,3299,3301],{"class":292,"line":324},[290,3267,1247],{"class":458},[290,3269,3270],{"class":454}," classification ",[290,3272,1253],{"class":462},[290,3274,1582],{"class":443},[290,3276,1780],{"class":450},[290,3278,455],{"class":454},[290,3280,1610],{"class":462},[290,3282,3283],{"class":493}," model",[290,3285,504],{"class":462},[290,3287,3288],{"class":454}," fast",[290,3290,1261],{"class":462},[290,3292,3293],{"class":493}," prompt",[290,3295,504],{"class":462},[290,3297,3298],{"class":454}," classifyPrompt ",[290,3300,552],{"class":462},[290,3302,531],{"class":454},[290,3304,3305,3307,3310,3312,3314,3316,3318,3320,3322,3324,3327,3329,3331,3333,3336,3338],{"class":292,"line":330},[290,3306,1247],{"class":458},[290,3308,3309],{"class":454}," response ",[290,3311,1253],{"class":462},[290,3313,1582],{"class":443},[290,3315,1780],{"class":450},[290,3317,455],{"class":454},[290,3319,1610],{"class":462},[290,3321,3283],{"class":493},[290,3323,504],{"class":462},[290,3325,3326],{"class":454}," smart",[290,3328,1261],{"class":462},[290,3330,3293],{"class":493},[290,3332,504],{"class":462},[290,3334,3335],{"class":454}," detailedPrompt ",[290,3337,552],{"class":462},[290,3339,531],{"class":454},[280,3341,3344],{"className":725,"code":3342,"filename":3343,"language":727,"meta":286,"style":286},"{\n  \"ai\": {\n    \"calls\": 2,\n    \"model\": \"claude-sonnet-4.6\",\n    \"models\": [\"claude-haiku-4.5\", \"claude-sonnet-4.6\"],\n    \"provider\": \"anthropic\",\n    \"inputTokens\": 450,\n    \"outputTokens\": 300,\n    \"totalTokens\": 750\n  }\n}\n","Wide Event",[272,3345,3346,3350,3362,3377,3395,3425,3443,3458,3472,3485,3489],{"__ignoreMap":286},[290,3347,3348],{"class":292,"line":293},[290,3349,496],{"class":462},[290,3351,3352,3354,3356,3358,3360],{"class":292,"line":299},[290,3353,738],{"class":462},[290,3355,820],{"class":458},[290,3357,744],{"class":462},[290,3359,504],{"class":462},[290,3361,476],{"class":462},[290,3363,3364,3366,3368,3370,3372,3375],{"class":292,"line":306},[290,3365,831],{"class":462},[290,3367,834],{"class":386},[290,3369,744],{"class":462},[290,3371,504],{"class":462},[290,3373,3374],{"class":790}," 2",[290,3376,516],{"class":462},[290,3378,3379,3381,3383,3385,3387,3389,3391,3393],{"class":292,"line":312},[290,3380,831],{"class":462},[290,3382,850],{"class":386},[290,3384,744],{"class":462},[290,3386,504],{"class":462},[290,3388,749],{"class":462},[290,3390,859],{"class":389},[290,3392,744],{"class":462},[290,3394,516],{"class":462},[290,3396,3397,3399,3401,3403,3405,3407,3409,3412,3414,3416,3418,3420,3422],{"class":292,"line":318},[290,3398,831],{"class":462},[290,3400,3182],{"class":386},[290,3402,744],{"class":462},[290,3404,504],{"class":462},[290,3406,2649],{"class":462},[290,3408,744],{"class":462},[290,3410,3411],{"class":389},"claude-haiku-4.5",[290,3413,744],{"class":462},[290,3415,1261],{"class":462},[290,3417,749],{"class":462},[290,3419,859],{"class":389},[290,3421,744],{"class":462},[290,3423,3424],{"class":462},"],\n",[290,3426,3427,3429,3431,3433,3435,3437,3439,3441],{"class":292,"line":324},[290,3428,831],{"class":462},[290,3430,870],{"class":386},[290,3432,744],{"class":462},[290,3434,504],{"class":462},[290,3436,749],{"class":462},[290,3438,879],{"class":389},[290,3440,744],{"class":462},[290,3442,516],{"class":462},[290,3444,3445,3447,3449,3451,3453,3456],{"class":292,"line":330},[290,3446,831],{"class":462},[290,3448,890],{"class":386},[290,3450,744],{"class":462},[290,3452,504],{"class":462},[290,3454,3455],{"class":790}," 450",[290,3457,516],{"class":462},[290,3459,3460,3462,3464,3466,3468,3470],{"class":292,"line":336},[290,3461,831],{"class":462},[290,3463,906],{"class":386},[290,3465,744],{"class":462},[290,3467,504],{"class":462},[290,3469,2636],{"class":790},[290,3471,516],{"class":462},[290,3473,3474,3476,3478,3480,3482],{"class":292,"line":342},[290,3475,831],{"class":462},[290,3477,922],{"class":386},[290,3479,744],{"class":462},[290,3481,504],{"class":462},[290,3483,3484],{"class":790}," 750\n",[290,3486,3487],{"class":292,"line":348},[290,3488,1024],{"class":462},[290,3490,3491],{"class":292,"line":353},[290,3492,1030],{"class":462},[1123,3494,3496],{"id":3495},"model-object-support","Model object support",[269,3498,3499,3502],{},[272,3500,3501],{},"wrap()"," also accepts model objects from provider SDKs if you prefer explicit imports:",[280,3504,3506],{"className":433,"code":3505,"language":436,"meta":286,"style":286},"import { anthropic } from '@ai-sdk\u002Fanthropic'\n\nconst model = ai.wrap(anthropic('claude-sonnet-4.6'))\n",[272,3507,3508,3528,3532],{"__ignoreMap":286},[290,3509,3510,3512,3514,3517,3519,3521,3523,3526],{"class":292,"line":293},[290,3511,565],{"class":443},[290,3513,568],{"class":462},[290,3515,3516],{"class":454}," anthropic",[290,3518,574],{"class":462},[290,3520,577],{"class":443},[290,3522,507],{"class":462},[290,3524,3525],{"class":389},"@ai-sdk\u002Fanthropic",[290,3527,584],{"class":462},[290,3529,3530],{"class":292,"line":299},[290,3531,303],{"emptyLinePlaceholder":302},[290,3533,3534,3536,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559],{"class":292,"line":306},[290,3535,1247],{"class":458},[290,3537,3538],{"class":454}," model ",[290,3540,1253],{"class":462},[290,3542,635],{"class":454},[290,3544,541],{"class":462},[290,3546,677],{"class":450},[290,3548,455],{"class":454},[290,3550,879],{"class":450},[290,3552,455],{"class":454},[290,3554,513],{"class":462},[290,3556,859],{"class":389},[290,3558,513],{"class":462},[290,3560,3561],{"class":454},"))\n",[364,3563,3565],{"id":3564},"captured-data","Captured Data",[1046,3567,3568,3580],{},[1049,3569,3570],{},[1052,3571,3572,3575,3578],{},[1055,3573,3574],{},"Wide event field",[1055,3576,3577],{},"Source",[1055,3579,1060],{},[1062,3581,3582,3595,3610,3623,3647,3662,3677,3692,3707,3722,3737,3757,3780,3798,3811,3824,3837,3849,3861],{},[1052,3583,3584,3589,3592],{},[1067,3585,3586],{},[272,3587,3588],{},"ai.calls",[1067,3590,3591],{},"Call count",[1067,3593,3594],{},"Number of AI calls in this request",[1052,3596,3597,3602,3607],{},[1067,3598,3599],{},[272,3600,3601],{},"ai.model",[1067,3603,3604],{},[272,3605,3606],{},"response.modelId",[1067,3608,3609],{},"Model that served the response",[1052,3611,3612,3617,3620],{},[1067,3613,3614],{},[272,3615,3616],{},"ai.models",[1067,3618,3619],{},"All model IDs",[1067,3621,3622],{},"Array of all models used (only when > 1)",[1052,3624,3625,3630,3635],{},[1067,3626,3627],{},[272,3628,3629],{},"ai.provider",[1067,3631,3632],{},[272,3633,3634],{},"model.provider",[1067,3636,3637,3638,1086,3640,1086,3643,3646],{},"Provider (",[272,3639,879],{},[272,3641,3642],{},"openai",[272,3644,3645],{},"google",", etc.)",[1052,3648,3649,3654,3659],{},[1067,3650,3651],{},[272,3652,3653],{},"ai.inputTokens",[1067,3655,3656],{},[272,3657,3658],{},"usage.inputTokens.total",[1067,3660,3661],{},"Total input tokens across all calls",[1052,3663,3664,3669,3674],{},[1067,3665,3666],{},[272,3667,3668],{},"ai.outputTokens",[1067,3670,3671],{},[272,3672,3673],{},"usage.outputTokens.total",[1067,3675,3676],{},"Total output tokens across all calls",[1052,3678,3679,3684,3687],{},[1067,3680,3681],{},[272,3682,3683],{},"ai.totalTokens",[1067,3685,3686],{},"Computed",[1067,3688,3689],{},[272,3690,3691],{},"inputTokens + outputTokens",[1052,3693,3694,3699,3704],{},[1067,3695,3696],{},[272,3697,3698],{},"ai.cacheReadTokens",[1067,3700,3701],{},[272,3702,3703],{},"usage.inputTokens.cacheRead",[1067,3705,3706],{},"Tokens served from prompt cache",[1052,3708,3709,3714,3719],{},[1067,3710,3711],{},[272,3712,3713],{},"ai.cacheWriteTokens",[1067,3715,3716],{},[272,3717,3718],{},"usage.inputTokens.cacheWrite",[1067,3720,3721],{},"Tokens written to prompt cache",[1052,3723,3724,3729,3734],{},[1067,3725,3726],{},[272,3727,3728],{},"ai.reasoningTokens",[1067,3730,3731],{},[272,3732,3733],{},"usage.outputTokens.reasoning",[1067,3735,3736],{},"Reasoning tokens (extended thinking)",[1052,3738,3739,3744,3749],{},[1067,3740,3741],{},[272,3742,3743],{},"ai.finishReason",[1067,3745,3746],{},[272,3747,3748],{},"finishReason.unified",[1067,3750,3751,3752,1086,3754,3646],{},"Why generation ended (",[272,3753,965],{},[272,3755,3756],{},"tool-calls",[1052,3758,3759,3764,3767],{},[1067,3760,3761],{},[272,3762,3763],{},"ai.toolCalls",[1067,3765,3766],{},"Content \u002F stream chunks",[1067,3768,3769,3772,3773,3776,3777,3779],{},[272,3770,3771],{},"string[]"," of tool names by default, or ",[272,3774,3775],{},"Array\u003C{ name, input }>"," when ",[272,3778,1152],{}," is enabled",[1052,3781,3782,3787,3792],{},[1067,3783,3784],{},[272,3785,3786],{},"ai.responseId",[1067,3788,3789],{},[272,3790,3791],{},"response.id",[1067,3793,3794,3795,470],{},"Provider-assigned response ID (e.g. Anthropic's ",[272,3796,3797],{},"msg_...",[1052,3799,3800,3805,3808],{},[1067,3801,3802],{},[272,3803,3804],{},"ai.steps",[1067,3806,3807],{},"Step count",[1067,3809,3810],{},"Number of LLM calls (only when > 1)",[1052,3812,3813,3818,3821],{},[1067,3814,3815],{},[272,3816,3817],{},"ai.stepsUsage",[1067,3819,3820],{},"Per-step accumulation",[1067,3822,3823],{},"Per-step token and tool call breakdown (only when > 1 step)",[1052,3825,3826,3831,3834],{},[1067,3827,3828],{},[272,3829,3830],{},"ai.msToFirstChunk",[1067,3832,3833],{},"Stream timing",[1067,3835,3836],{},"Time to first text chunk (streaming only)",[1052,3838,3839,3844,3846],{},[1067,3840,3841],{},[272,3842,3843],{},"ai.msToFinish",[1067,3845,3833],{},[1067,3847,3848],{},"Total stream duration (streaming only)",[1052,3850,3851,3856,3858],{},[1067,3852,3853],{},[272,3854,3855],{},"ai.tokensPerSecond",[1067,3857,3686],{},[1067,3859,3860],{},"Output tokens per second (streaming only)",[1052,3862,3863,3868,3871],{},[1067,3864,3865],{},[272,3866,3867],{},"ai.error",[1067,3869,3870],{},"Error capture",[1067,3872,3873],{},"Error message if a model call fails",[364,3875,3877],{"id":3876},"composability","Composability",[269,3879,3880,3883,3884,504],{},[272,3881,3882],{},"ai.wrap()"," works with models that are already wrapped by other tools. If you use supermemory, guardrails middleware, or any other model wrapper, pass the wrapped model to ",[272,3885,3882],{},[280,3887,3889],{"className":433,"code":3888,"language":436,"meta":286,"style":286},"import { createAILogger } from 'evlog\u002Fai'\nimport { withSupermemory } from '@supermemory\u002Ftools\u002Fai-sdk'\n\nconst ai = createAILogger(log)\nconst base = gateway('anthropic\u002Fclaude-sonnet-4.6')\nconst model = ai.wrap(withSupermemory(base, orgId, { mode: 'full' }))\n",[272,3890,3891,3909,3929,3933,3945,3967],{"__ignoreMap":286},[290,3892,3893,3895,3897,3899,3901,3903,3905,3907],{"class":292,"line":293},[290,3894,565],{"class":443},[290,3896,568],{"class":462},[290,3898,571],{"class":454},[290,3900,574],{"class":462},[290,3902,577],{"class":443},[290,3904,507],{"class":462},[290,3906,274],{"class":389},[290,3908,584],{"class":462},[290,3910,3911,3913,3915,3918,3920,3922,3924,3927],{"class":292,"line":299},[290,3912,565],{"class":443},[290,3914,568],{"class":462},[290,3916,3917],{"class":454}," withSupermemory",[290,3919,574],{"class":462},[290,3921,577],{"class":443},[290,3923,507],{"class":462},[290,3925,3926],{"class":389},"@supermemory\u002Ftools\u002Fai-sdk",[290,3928,584],{"class":462},[290,3930,3931],{"class":292,"line":306},[290,3932,303],{"emptyLinePlaceholder":302},[290,3934,3935,3937,3939,3941,3943],{"class":292,"line":312},[290,3936,1247],{"class":458},[290,3938,1250],{"class":454},[290,3940,1253],{"class":462},[290,3942,571],{"class":450},[290,3944,3204],{"class":454},[290,3946,3947,3949,3952,3954,3957,3959,3961,3963,3965],{"class":292,"line":318},[290,3948,1247],{"class":458},[290,3950,3951],{"class":454}," base ",[290,3953,1253],{"class":462},[290,3955,3956],{"class":450}," gateway",[290,3958,455],{"class":454},[290,3960,513],{"class":462},[290,3962,510],{"class":389},[290,3964,513],{"class":462},[290,3966,531],{"class":454},[290,3968,3969,3971,3973,3975,3977,3979,3981,3983,3986,3989,3991,3994,3996,3998,4001,4003,4005,4008,4010,4012],{"class":292,"line":324},[290,3970,1247],{"class":458},[290,3972,3538],{"class":454},[290,3974,1253],{"class":462},[290,3976,635],{"class":454},[290,3978,541],{"class":462},[290,3980,677],{"class":450},[290,3982,455],{"class":454},[290,3984,3985],{"class":450},"withSupermemory",[290,3987,3988],{"class":454},"(base",[290,3990,1261],{"class":462},[290,3992,3993],{"class":454}," orgId",[290,3995,1261],{"class":462},[290,3997,568],{"class":462},[290,3999,4000],{"class":493}," mode",[290,4002,504],{"class":462},[290,4004,507],{"class":462},[290,4006,4007],{"class":389},"full",[290,4009,513],{"class":462},[290,4011,574],{"class":462},[290,4013,3561],{"class":454},[269,4015,4016,4017,4020,4021,504],{},"For explicit middleware composition, use ",[272,4018,4019],{},"createAIMiddleware"," to get the raw middleware and compose it yourself via ",[272,4022,4023],{},"wrapLanguageModel",[280,4025,4027],{"className":433,"code":4026,"language":436,"meta":286,"style":286},"import { createAIMiddleware } from 'evlog\u002Fai'\nimport { wrapLanguageModel } from 'ai'\n\nconst model = wrapLanguageModel({\n  model: base,\n  middleware: [createAIMiddleware(log, { toolInputs: true }), otherMiddleware],\n})\n",[272,4028,4029,4048,4067,4071,4085,4097,4131],{"__ignoreMap":286},[290,4030,4031,4033,4035,4038,4040,4042,4044,4046],{"class":292,"line":293},[290,4032,565],{"class":443},[290,4034,568],{"class":462},[290,4036,4037],{"class":454}," createAIMiddleware",[290,4039,574],{"class":462},[290,4041,577],{"class":443},[290,4043,507],{"class":462},[290,4045,274],{"class":389},[290,4047,584],{"class":462},[290,4049,4050,4052,4054,4057,4059,4061,4063,4065],{"class":292,"line":299},[290,4051,565],{"class":443},[290,4053,568],{"class":462},[290,4055,4056],{"class":454}," wrapLanguageModel",[290,4058,574],{"class":462},[290,4060,577],{"class":443},[290,4062,507],{"class":462},[290,4064,820],{"class":389},[290,4066,584],{"class":462},[290,4068,4069],{"class":292,"line":306},[290,4070,303],{"emptyLinePlaceholder":302},[290,4072,4073,4075,4077,4079,4081,4083],{"class":292,"line":312},[290,4074,1247],{"class":458},[290,4076,3538],{"class":454},[290,4078,1253],{"class":462},[290,4080,4056],{"class":450},[290,4082,455],{"class":454},[290,4084,496],{"class":462},[290,4086,4087,4090,4092,4095],{"class":292,"line":318},[290,4088,4089],{"class":493},"  model",[290,4091,504],{"class":462},[290,4093,4094],{"class":454}," base",[290,4096,516],{"class":462},[290,4098,4099,4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126,4129],{"class":292,"line":324},[290,4100,4101],{"class":493},"  middleware",[290,4103,504],{"class":462},[290,4105,2649],{"class":454},[290,4107,4019],{"class":450},[290,4109,1258],{"class":454},[290,4111,1261],{"class":462},[290,4113,568],{"class":462},[290,4115,1266],{"class":493},[290,4117,504],{"class":462},[290,4119,1272],{"class":1271},[290,4121,574],{"class":462},[290,4123,470],{"class":454},[290,4125,1261],{"class":462},[290,4127,4128],{"class":454}," otherMiddleware]",[290,4130,516],{"class":462},[290,4132,4133,4135],{"class":292,"line":330},[290,4134,552],{"class":462},[290,4136,531],{"class":454},[269,4138,4139,4141,4142,4145,4146,4148,4149,4151,4152,4154,4155,4157],{},[272,4140,4019],{}," returns the same middleware that ",[272,4143,4144],{},"createAILogger"," uses internally. The difference: ",[272,4147,4019],{}," does not include ",[272,4150,2849],{}," (embedding models don't use middleware). Use ",[272,4153,4144],{}," for the full API, ",[272,4156,4019],{}," when you need explicit middleware ordering.",[364,4159,4161],{"id":4160},"error-handling","Error Handling",[269,4163,4164],{},"If a model call fails, the middleware captures the error into the wide event before re-throwing:",[280,4166,4168],{"className":725,"code":4167,"language":727,"meta":286,"style":286},"{\n  \"ai\": {\n    \"calls\": 1,\n    \"model\": \"claude-sonnet-4.6\",\n    \"provider\": \"anthropic\",\n    \"finishReason\": \"error\",\n    \"error\": \"API rate limit exceeded\"\n  }\n}\n",[272,4169,4170,4174,4186,4200,4218,4236,4255,4273,4277],{"__ignoreMap":286},[290,4171,4172],{"class":292,"line":293},[290,4173,496],{"class":462},[290,4175,4176,4178,4180,4182,4184],{"class":292,"line":299},[290,4177,738],{"class":462},[290,4179,820],{"class":458},[290,4181,744],{"class":462},[290,4183,504],{"class":462},[290,4185,476],{"class":462},[290,4187,4188,4190,4192,4194,4196,4198],{"class":292,"line":306},[290,4189,831],{"class":462},[290,4191,834],{"class":386},[290,4193,744],{"class":462},[290,4195,504],{"class":462},[290,4197,841],{"class":790},[290,4199,516],{"class":462},[290,4201,4202,4204,4206,4208,4210,4212,4214,4216],{"class":292,"line":312},[290,4203,831],{"class":462},[290,4205,850],{"class":386},[290,4207,744],{"class":462},[290,4209,504],{"class":462},[290,4211,749],{"class":462},[290,4213,859],{"class":389},[290,4215,744],{"class":462},[290,4217,516],{"class":462},[290,4219,4220,4222,4224,4226,4228,4230,4232,4234],{"class":292,"line":318},[290,4221,831],{"class":462},[290,4223,870],{"class":386},[290,4225,744],{"class":462},[290,4227,504],{"class":462},[290,4229,749],{"class":462},[290,4231,879],{"class":389},[290,4233,744],{"class":462},[290,4235,516],{"class":462},[290,4237,4238,4240,4242,4244,4246,4248,4251,4253],{"class":292,"line":324},[290,4239,831],{"class":462},[290,4241,956],{"class":386},[290,4243,744],{"class":462},[290,4245,504],{"class":462},[290,4247,749],{"class":462},[290,4249,4250],{"class":389},"error",[290,4252,744],{"class":462},[290,4254,516],{"class":462},[290,4256,4257,4259,4261,4263,4265,4267,4270],{"class":292,"line":330},[290,4258,831],{"class":462},[290,4260,4250],{"class":386},[290,4262,744],{"class":462},[290,4264,504],{"class":462},[290,4266,749],{"class":462},[290,4268,4269],{"class":389},"API rate limit exceeded",[290,4271,4272],{"class":462},"\"\n",[290,4274,4275],{"class":292,"line":336},[290,4276,1024],{"class":462},[290,4278,4279],{"class":292,"line":342},[290,4280,1030],{"class":462},[269,4282,4283],{},"Stream errors (e.g. content filter) are also captured from the stream's error chunks.",[364,4285,4287],{"id":4286},"works-with-all-frameworks","Works With All Frameworks",[269,4289,4290,4292],{},[272,4291,274],{}," works with any framework that evlog supports:",[372,4294,4295,4326,4398,4471,4538,4590],{},[280,4296,4298],{"className":433,"code":4297,"filename":41,"language":436,"meta":286,"style":286},"const log = useLogger(event)\nconst ai = createAILogger(log)\n",[272,4299,4300,4314],{"__ignoreMap":286},[290,4301,4302,4304,4307,4309,4311],{"class":292,"line":293},[290,4303,1247],{"class":458},[290,4305,4306],{"class":454}," log ",[290,4308,1253],{"class":462},[290,4310,622],{"class":450},[290,4312,4313],{"class":454},"(event)\n",[290,4315,4316,4318,4320,4322,4324],{"class":292,"line":299},[290,4317,1247],{"class":458},[290,4319,1250],{"class":454},[290,4321,1253],{"class":462},[290,4323,571],{"class":450},[290,4325,3204],{"class":454},[280,4327,4329],{"className":433,"code":4328,"filename":71,"language":436,"meta":286,"style":286},"app.post('\u002Fapi\u002Fchat', (req, res) => {\n  const ai = createAILogger(req.log)\n  \u002F\u002F ...\n})\n",[272,4330,4331,4367,4387,4392],{"__ignoreMap":286},[290,4332,4333,4336,4338,4341,4343,4345,4347,4349,4351,4353,4356,4358,4361,4363,4365],{"class":292,"line":293},[290,4334,4335],{"class":454},"app",[290,4337,541],{"class":462},[290,4339,4340],{"class":450},"post",[290,4342,455],{"class":454},[290,4344,513],{"class":462},[290,4346,772],{"class":389},[290,4348,513],{"class":462},[290,4350,1261],{"class":462},[290,4352,463],{"class":462},[290,4354,4355],{"class":466},"req",[290,4357,1261],{"class":462},[290,4359,4360],{"class":466}," res",[290,4362,470],{"class":462},[290,4364,473],{"class":458},[290,4366,476],{"class":462},[290,4368,4369,4371,4373,4375,4377,4379,4381,4383,4385],{"class":292,"line":299},[290,4370,481],{"class":458},[290,4372,635],{"class":454},[290,4374,487],{"class":462},[290,4376,571],{"class":450},[290,4378,455],{"class":493},[290,4380,4355],{"class":454},[290,4382,541],{"class":462},[290,4384,644],{"class":454},[290,4386,531],{"class":493},[290,4388,4389],{"class":292,"line":306},[290,4390,4391],{"class":1241},"  \u002F\u002F ...\n",[290,4393,4394,4396],{"class":292,"line":312},[290,4395,552],{"class":462},[290,4397,531],{"class":454},[280,4399,4401],{"className":433,"code":4400,"filename":76,"language":436,"meta":286,"style":286},"app.post('\u002Fapi\u002Fchat', (c) => {\n  const ai = createAILogger(c.get('log'))\n  \u002F\u002F ...\n})\n",[272,4402,4403,4432,4461,4465],{"__ignoreMap":286},[290,4404,4405,4407,4409,4411,4413,4415,4417,4419,4421,4423,4426,4428,4430],{"class":292,"line":293},[290,4406,4335],{"class":454},[290,4408,541],{"class":462},[290,4410,4340],{"class":450},[290,4412,455],{"class":454},[290,4414,513],{"class":462},[290,4416,772],{"class":389},[290,4418,513],{"class":462},[290,4420,1261],{"class":462},[290,4422,463],{"class":462},[290,4424,4425],{"class":466},"c",[290,4427,470],{"class":462},[290,4429,473],{"class":458},[290,4431,476],{"class":462},[290,4433,4434,4436,4438,4440,4442,4444,4446,4448,4451,4453,4455,4457,4459],{"class":292,"line":299},[290,4435,481],{"class":458},[290,4437,635],{"class":454},[290,4439,487],{"class":462},[290,4441,571],{"class":450},[290,4443,455],{"class":493},[290,4445,4425],{"class":454},[290,4447,541],{"class":462},[290,4449,4450],{"class":450},"get",[290,4452,455],{"class":493},[290,4454,513],{"class":462},[290,4456,644],{"class":389},[290,4458,513],{"class":462},[290,4460,3561],{"class":493},[290,4462,4463],{"class":292,"line":306},[290,4464,4391],{"class":1241},[290,4466,4467,4469],{"class":292,"line":312},[290,4468,552],{"class":462},[290,4470,531],{"class":454},[280,4472,4474],{"className":433,"code":4473,"filename":81,"language":436,"meta":286,"style":286},"app.post('\u002Fapi\u002Fchat', async (request) => {\n  const ai = createAILogger(request.log)\n  \u002F\u002F ...\n})\n",[272,4475,4476,4508,4528,4532],{"__ignoreMap":286},[290,4477,4478,4480,4482,4484,4486,4488,4490,4492,4494,4497,4499,4502,4504,4506],{"class":292,"line":293},[290,4479,4335],{"class":454},[290,4481,541],{"class":462},[290,4483,4340],{"class":450},[290,4485,455],{"class":454},[290,4487,513],{"class":462},[290,4489,772],{"class":389},[290,4491,513],{"class":462},[290,4493,1261],{"class":462},[290,4495,4496],{"class":458}," async",[290,4498,463],{"class":462},[290,4500,4501],{"class":466},"request",[290,4503,470],{"class":462},[290,4505,473],{"class":458},[290,4507,476],{"class":462},[290,4509,4510,4512,4514,4516,4518,4520,4522,4524,4526],{"class":292,"line":299},[290,4511,481],{"class":458},[290,4513,635],{"class":454},[290,4515,487],{"class":462},[290,4517,571],{"class":450},[290,4519,455],{"class":493},[290,4521,4501],{"class":454},[290,4523,541],{"class":462},[290,4525,644],{"class":454},[290,4527,531],{"class":493},[290,4529,4530],{"class":292,"line":306},[290,4531,4391],{"class":1241},[290,4533,4534,4536],{"class":292,"line":312},[290,4535,552],{"class":462},[290,4537,531],{"class":454},[280,4539,4541],{"className":433,"code":4540,"filename":66,"language":436,"meta":286,"style":286},"import { useLogger } from 'evlog\u002Fnestjs'\n\nconst log = useLogger()\nconst ai = createAILogger(log)\n",[272,4542,4543,4562,4566,4578],{"__ignoreMap":286},[290,4544,4545,4547,4549,4551,4553,4555,4557,4560],{"class":292,"line":293},[290,4546,565],{"class":443},[290,4548,568],{"class":462},[290,4550,622],{"class":454},[290,4552,574],{"class":462},[290,4554,577],{"class":443},[290,4556,507],{"class":462},[290,4558,4559],{"class":389},"evlog\u002Fnestjs",[290,4561,584],{"class":462},[290,4563,4564],{"class":292,"line":299},[290,4565,303],{"emptyLinePlaceholder":302},[290,4567,4568,4570,4572,4574,4576],{"class":292,"line":306},[290,4569,1247],{"class":458},[290,4571,4306],{"class":454},[290,4573,1253],{"class":462},[290,4575,622],{"class":450},[290,4577,547],{"class":454},[290,4579,4580,4582,4584,4586,4588],{"class":292,"line":312},[290,4581,1247],{"class":458},[290,4583,1250],{"class":454},[290,4585,1253],{"class":462},[290,4587,571],{"class":450},[290,4589,3204],{"class":454},[280,4591,4593],{"className":433,"code":4592,"filename":101,"language":436,"meta":286,"style":286},"import { createLogger } from 'evlog'\n\nconst log = createLogger()\nconst ai = createAILogger(log)\n\u002F\u002F ...\nlog.emit()\n",[272,4594,4595,4615,4619,4631,4643,4648],{"__ignoreMap":286},[290,4596,4597,4599,4601,4604,4606,4608,4610,4613],{"class":292,"line":293},[290,4598,565],{"class":443},[290,4600,568],{"class":462},[290,4602,4603],{"class":454}," createLogger",[290,4605,574],{"class":462},[290,4607,577],{"class":443},[290,4609,507],{"class":462},[290,4611,4612],{"class":389},"evlog",[290,4614,584],{"class":462},[290,4616,4617],{"class":292,"line":299},[290,4618,303],{"emptyLinePlaceholder":302},[290,4620,4621,4623,4625,4627,4629],{"class":292,"line":306},[290,4622,1247],{"class":458},[290,4624,4306],{"class":454},[290,4626,1253],{"class":462},[290,4628,4603],{"class":450},[290,4630,547],{"class":454},[290,4632,4633,4635,4637,4639,4641],{"class":292,"line":312},[290,4634,1247],{"class":458},[290,4636,1250],{"class":454},[290,4638,1253],{"class":462},[290,4640,571],{"class":450},[290,4642,3204],{"class":454},[290,4644,4645],{"class":292,"line":318},[290,4646,4647],{"class":1241},"\u002F\u002F ...\n",[290,4649,4650,4652,4654,4657],{"class":292,"line":324},[290,4651,644],{"class":454},[290,4653,541],{"class":462},[290,4655,4656],{"class":450},"emit",[290,4658,547],{"class":454},[4660,4661,4662],"style",{},"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":286,"searchDepth":299,"depth":299,"links":4664},[4665,4666,4667,4670,4678,4679,4680,4681],{"id":366,"depth":299,"text":367},{"id":425,"depth":299,"text":20},{"id":1033,"depth":299,"text":1034,"children":4668},[4669],{"id":1125,"depth":306,"text":1126},{"id":1459,"depth":299,"text":1460,"children":4671},[4672,4673,4674,4675,4676,4677],{"id":1463,"depth":306,"text":1089},{"id":1762,"depth":306,"text":1085},{"id":1963,"depth":306,"text":1964},{"id":2842,"depth":306,"text":2843},{"id":3172,"depth":306,"text":3173},{"id":3495,"depth":306,"text":3496},{"id":3564,"depth":299,"text":3565},{"id":3876,"depth":299,"text":3877},{"id":4160,"depth":299,"text":4161},{"id":4286,"depth":299,"text":4287},"Capture token usage, tool calls, model info, and streaming metrics from the Vercel AI SDK into wide events. Wrap your model and get full AI observability.","md",[4685,4688],{"label":126,"icon":129,"to":127,"color":4686,"variant":4687},"neutral","subtle",{"label":175,"icon":4689,"to":180,"color":4686,"variant":4687},"i-lucide-plug",{},{"icon":139},{"title":136,"description":4682},"Bb3d5LOujfeLD8IRGYEahF23d9SkSRp-Dj8XrDMDQb8",[4695,4697],{"title":131,"path":132,"stem":133,"description":4696,"icon":134,"children":-1},"Build-time optimizations for any Vite-based framework — auto-init, debug stripping, source location injection, and optional auto-imports.",{"title":141,"path":142,"stem":143,"description":4698,"icon":144,"children":-1},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.",1775236123350]