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