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