[{"data":1,"prerenderedAt":7492},["ShallowReactive",2],{"navigation_docs":3,"-logging-ai-sdk":301,"-logging-ai-sdk-surround":7487},[4,30,75,119,207,271,287],{"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,65,70],{"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,"icon":69},"Better Auth Integration","\u002Flogging\u002Fbetter-auth","2.logging\u002F6.better-auth","i-simple-icons-betterauth",{"title":71,"path":72,"stem":73,"icon":74},"Audit Logs","\u002Flogging\u002Faudit","2.logging\u002F7.audit","i-lucide-shield-check",{"title":76,"path":77,"stem":78,"children":79,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[80,85,90,95,100,104,109,114],{"title":81,"path":82,"stem":83,"icon":84},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":86,"path":87,"stem":88,"icon":89},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":91,"path":92,"stem":93,"icon":94},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":96,"path":97,"stem":98,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":74},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":105,"path":106,"stem":107,"icon":108},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":110,"path":111,"stem":112,"icon":113},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":115,"path":116,"stem":117,"icon":118},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":120,"path":121,"stem":122,"children":123,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[124,128,133,138,143,148,153,158,163,168,173,178,183,188,192,197,202],{"title":36,"path":125,"stem":126,"icon":127},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":129,"path":130,"stem":131,"icon":132},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":134,"path":135,"stem":136,"icon":137},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":139,"path":140,"stem":141,"icon":142},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":144,"path":145,"stem":146,"icon":147},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":149,"path":150,"stem":151,"icon":152},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":154,"path":155,"stem":156,"icon":157},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":159,"path":160,"stem":161,"icon":162},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":164,"path":165,"stem":166,"icon":167},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":169,"path":170,"stem":171,"icon":172},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":174,"path":175,"stem":176,"icon":177},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":179,"path":180,"stem":181,"icon":182},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":184,"path":185,"stem":186,"icon":187},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":189,"path":190,"stem":191,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":193,"path":194,"stem":195,"icon":196},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":198,"path":199,"stem":200,"icon":201},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":203,"path":204,"stem":205,"icon":206},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":208,"path":209,"stem":210,"children":211,"page":29},"Adapters","\u002Fadapters","5.adapters",[212,216,221,226,231,236,241,246,251,256,261,266],{"title":36,"path":213,"stem":214,"icon":215},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":217,"path":218,"stem":219,"icon":220},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":222,"path":223,"stem":224,"icon":225},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":227,"path":228,"stem":229,"icon":230},"HTTP","\u002Fadapters\u002Fhttp","5.adapters\u002F12.http","i-lucide-globe",{"title":232,"path":233,"stem":234,"icon":235},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":237,"path":238,"stem":239,"icon":240},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":242,"path":243,"stem":244,"icon":245},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":247,"path":248,"stem":249,"icon":250},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":252,"path":253,"stem":254,"icon":255},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":257,"path":258,"stem":259,"icon":260},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":262,"path":263,"stem":264,"icon":265},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":267,"path":268,"stem":269,"icon":270},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":272,"path":273,"stem":274,"children":275,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[276,279,283],{"title":36,"path":277,"stem":278,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":280,"path":281,"stem":282,"icon":201},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":284,"path":285,"stem":286,"icon":220},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":288,"path":289,"stem":290,"children":291,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[292,296],{"title":36,"path":293,"stem":294,"icon":295},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":297,"path":298,"stem":299,"icon":300},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":302,"title":61,"body":303,"description":7475,"extension":7476,"links":7477,"meta":7483,"navigation":7484,"path":62,"seo":7485,"stem":63,"__hash__":7486},"docs\u002F2.logging\u002F5.ai-sdk.md",{"type":304,"value":305,"toc":7441},"minimark",[306,314,413,418,421,473,476,479,789,792,1099,1103,1113,1248,1251,1256,1325,1332,1383,1723,1727,1730,1733,2023,2026,2029,2224,2228,2231,2540,2543,3138,3142,3148,3519,3526,3646,3650,3660,3966,3970,3976,4035,4039,4042,4047,4053,4064,4477,4480,4486,4497,4666,4672,4675,4698,4701,5078,5081,5132,5138,5158,5293,5297,5308,5312,5322,5566,5569,5905,5909,5912,6026,6030,6089,6092,6095,6468,6472,6480,6653,6663,6775,6796,6800,6803,6918,6921,6925,6930,7437],[307,308,309,313],"p",{},[310,311,312],"code",{},"evlog\u002Fai"," gives you full AI observability by wrapping your model with middleware and an optional telemetry integration. Token usage, tool calls, tool execution timing, streaming performance, cache hits, reasoning tokens, cost estimation — all captured into the wide event automatically.",[315,316,317],"code-collapse",{},[318,319,325],"pre",{"className":320,"code":321,"filename":322,"language":323,"meta":324,"style":324},"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 and createEvlogIntegration 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 deeper observability (tool execution timing, total generation wall time), add createEvlogIntegration(ai) to experimental_telemetry.integrations\n- For embedding calls, use ai.captureEmbed({ usage, model, dimensions, count }) after embed() or embedMany()\n- For cost estimation, pass a cost map: createAILogger(log, { cost: { 'claude-sonnet-4.6': { input: 3, output: 15 } } })\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","",[310,326,327,335,342,348,354,360,366,372,378,384,390,396,401,407],{"__ignoreMap":324},[328,329,332],"span",{"class":330,"line":331},"line",1,[328,333,334],{},"Add AI observability to my app with evlog.\n",[328,336,338],{"class":330,"line":337},2,[328,339,341],{"emptyLinePlaceholder":340},true,"\n",[328,343,345],{"class":330,"line":344},3,[328,346,347],{},"- Install the AI SDK: pnpm add ai\n",[328,349,351],{"class":330,"line":350},4,[328,352,353],{},"- Import createAILogger and createEvlogIntegration from 'evlog\u002Fai'\n",[328,355,357],{"class":330,"line":356},5,[328,358,359],{},"- Create an AI logger with createAILogger(log) where log is your request logger\n",[328,361,363],{"class":330,"line":362},6,[328,364,365],{},"- Wrap your model with ai.wrap('anthropic\u002Fclaude-sonnet-4.6') and pass it to generateText, streamText, etc.\n",[328,367,369],{"class":330,"line":368},7,[328,370,371],{},"- Token usage, tool calls, streaming metrics, and errors are captured automatically into the wide event\n",[328,373,375],{"class":330,"line":374},8,[328,376,377],{},"- For deeper observability (tool execution timing, total generation wall time), add createEvlogIntegration(ai) to experimental_telemetry.integrations\n",[328,379,381],{"class":330,"line":380},9,[328,382,383],{},"- For embedding calls, use ai.captureEmbed({ usage, model, dimensions, count }) after embed() or embedMany()\n",[328,385,387],{"class":330,"line":386},10,[328,388,389],{},"- For cost estimation, pass a cost map: createAILogger(log, { cost: { 'claude-sonnet-4.6': { input: 3, output: 15 } } })\n",[328,391,393],{"class":330,"line":392},11,[328,394,395],{},"- Works with all frameworks: Nuxt, Express, Hono, Fastify, NestJS, Elysia, standalone\n",[328,397,399],{"class":330,"line":398},12,[328,400,341],{"emptyLinePlaceholder":340},[328,402,404],{"class":330,"line":403},13,[328,405,406],{},"Docs: https:\u002F\u002Fwww.evlog.dev\u002Flogging\u002Fai-sdk\n",[328,408,410],{"class":330,"line":409},14,[328,411,412],{},"Adapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n",[414,415,417],"h2",{"id":416},"install","Install",[307,419,420],{},"Add the AI SDK as a dependency:",[422,423,424,444,459],"code-group",{},[318,425,430],{"className":426,"code":427,"filename":428,"language":429,"meta":324,"style":324},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install ai\n","npm","bash",[310,431,432],{"__ignoreMap":324},[328,433,434,437,441],{"class":330,"line":331},[328,435,428],{"class":436},"sBMFI",[328,438,440],{"class":439},"sfazB"," install",[328,442,443],{"class":439}," ai\n",[318,445,448],{"className":426,"code":446,"filename":447,"language":429,"meta":324,"style":324},"bun add ai\n","bun",[310,449,450],{"__ignoreMap":324},[328,451,452,454,457],{"class":330,"line":331},[328,453,447],{"class":436},[328,455,456],{"class":439}," add",[328,458,443],{"class":439},[318,460,463],{"className":426,"code":461,"filename":462,"language":429,"meta":324,"style":324},"pnpm add ai\n","pnpm",[310,464,465],{"__ignoreMap":324},[328,466,467,469,471],{"class":330,"line":331},[328,468,462],{"class":436},[328,470,456],{"class":439},[328,472,443],{"class":439},[414,474,20],{"id":475},"quick-start",[307,477,478],{},"Two lines to add, one param to change:",[422,480,481,605],{},[318,482,487],{"className":483,"code":484,"filename":485,"language":486,"meta":324,"style":324},"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",[310,488,489,527,547,567,574,582,598],{"__ignoreMap":324},[328,490,491,495,498,502,506,510,514,518,521,524],{"class":330,"line":331},[328,492,494],{"class":493},"s7zQu","export",[328,496,497],{"class":493}," default",[328,499,501],{"class":500},"s2Zo4"," defineEventHandler",[328,503,505],{"class":504},"sTEyZ","(",[328,507,509],{"class":508},"spNyl","async",[328,511,513],{"class":512},"sMK4o"," (",[328,515,517],{"class":516},"sHdIc","event",[328,519,520],{"class":512},")",[328,522,523],{"class":508}," =>",[328,525,526],{"class":512}," {\n",[328,528,529,532,535,538,541,544],{"class":330,"line":337},[328,530,531],{"class":508},"  const",[328,533,534],{"class":504}," result",[328,536,537],{"class":512}," =",[328,539,540],{"class":500}," streamText",[328,542,505],{"class":543},"swJcz",[328,545,546],{"class":512},"{\n",[328,548,549,552,555,558,561,564],{"class":330,"line":344},[328,550,551],{"class":543},"    model",[328,553,554],{"class":512},":",[328,556,557],{"class":512}," '",[328,559,560],{"class":439},"anthropic\u002Fclaude-sonnet-4.6",[328,562,563],{"class":512},"'",[328,565,566],{"class":512},",\n",[328,568,569,572],{"class":330,"line":350},[328,570,571],{"class":504},"    messages",[328,573,566],{"class":512},[328,575,576,579],{"class":330,"line":356},[328,577,578],{"class":512},"  }",[328,580,581],{"class":543},")\n",[328,583,584,587,589,592,595],{"class":330,"line":362},[328,585,586],{"class":493},"  return",[328,588,534],{"class":504},[328,590,591],{"class":512},".",[328,593,594],{"class":500},"toTextStreamResponse",[328,596,597],{"class":543},"()\n",[328,599,600,603],{"class":330,"line":368},[328,601,602],{"class":512},"}",[328,604,581],{"class":504},[318,606,609],{"className":483,"code":607,"filename":608,"language":486,"meta":324,"style":324},"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",[310,610,611,636,655,659,681,698,716,720,734,759,765,771,783],{"__ignoreMap":324},[328,612,613,616,619,622,625,628,630,633],{"class":330,"line":331},[328,614,615],{"class":493},"import",[328,617,618],{"class":512}," {",[328,620,621],{"class":504}," useLogger",[328,623,624],{"class":512}," }",[328,626,627],{"class":493}," from",[328,629,557],{"class":512},[328,631,632],{"class":439},"evlog",[328,634,635],{"class":512},"'\n",[328,637,638,640,642,645,647,649,651,653],{"class":330,"line":337},[328,639,615],{"class":493},[328,641,618],{"class":512},[328,643,644],{"class":504}," createAILogger",[328,646,624],{"class":512},[328,648,627],{"class":493},[328,650,557],{"class":512},[328,652,312],{"class":439},[328,654,635],{"class":512},[328,656,657],{"class":330,"line":344},[328,658,341],{"emptyLinePlaceholder":340},[328,660,661,663,665,667,669,671,673,675,677,679],{"class":330,"line":350},[328,662,494],{"class":493},[328,664,497],{"class":493},[328,666,501],{"class":500},[328,668,505],{"class":504},[328,670,509],{"class":508},[328,672,513],{"class":512},[328,674,517],{"class":516},[328,676,520],{"class":512},[328,678,523],{"class":508},[328,680,526],{"class":512},[328,682,683,685,688,690,692,694,696],{"class":330,"line":356},[328,684,531],{"class":508},[328,686,687],{"class":504}," log",[328,689,537],{"class":512},[328,691,621],{"class":500},[328,693,505],{"class":543},[328,695,517],{"class":504},[328,697,581],{"class":543},[328,699,700,702,705,707,709,711,714],{"class":330,"line":362},[328,701,531],{"class":508},[328,703,704],{"class":504}," ai",[328,706,537],{"class":512},[328,708,644],{"class":500},[328,710,505],{"class":543},[328,712,713],{"class":504},"log",[328,715,581],{"class":543},[328,717,718],{"class":330,"line":368},[328,719,341],{"emptyLinePlaceholder":340},[328,721,722,724,726,728,730,732],{"class":330,"line":374},[328,723,531],{"class":508},[328,725,534],{"class":504},[328,727,537],{"class":512},[328,729,540],{"class":500},[328,731,505],{"class":543},[328,733,546],{"class":512},[328,735,736,738,740,742,744,747,749,751,753,755,757],{"class":330,"line":380},[328,737,551],{"class":543},[328,739,554],{"class":512},[328,741,704],{"class":504},[328,743,591],{"class":512},[328,745,746],{"class":500},"wrap",[328,748,505],{"class":543},[328,750,563],{"class":512},[328,752,560],{"class":439},[328,754,563],{"class":512},[328,756,520],{"class":543},[328,758,566],{"class":512},[328,760,761,763],{"class":330,"line":386},[328,762,571],{"class":504},[328,764,566],{"class":512},[328,766,767,769],{"class":330,"line":392},[328,768,578],{"class":512},[328,770,581],{"class":543},[328,772,773,775,777,779,781],{"class":330,"line":398},[328,774,586],{"class":493},[328,776,534],{"class":504},[328,778,591],{"class":512},[328,780,594],{"class":500},[328,782,597],{"class":543},[328,784,785,787],{"class":330,"line":403},[328,786,602],{"class":512},[328,788,581],{"class":504},[307,790,791],{},"Your wide event now includes:",[318,793,798],{"className":794,"code":795,"filename":796,"language":797,"meta":324,"style":324},"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",[310,799,800,804,827,847,864,884,897,914,934,954,970,986,1002,1018,1038,1055,1072,1087,1093],{"__ignoreMap":324},[328,801,802],{"class":330,"line":331},[328,803,546],{"class":512},[328,805,806,809,812,815,817,820,823,825],{"class":330,"line":337},[328,807,808],{"class":512},"  \"",[328,810,811],{"class":508},"method",[328,813,814],{"class":512},"\"",[328,816,554],{"class":512},[328,818,819],{"class":512}," \"",[328,821,822],{"class":439},"POST",[328,824,814],{"class":512},[328,826,566],{"class":512},[328,828,829,831,834,836,838,840,843,845],{"class":330,"line":344},[328,830,808],{"class":512},[328,832,833],{"class":508},"path",[328,835,814],{"class":512},[328,837,554],{"class":512},[328,839,819],{"class":512},[328,841,842],{"class":439},"\u002Fapi\u002Fchat",[328,844,814],{"class":512},[328,846,566],{"class":512},[328,848,849,851,854,856,858,862],{"class":330,"line":350},[328,850,808],{"class":512},[328,852,853],{"class":508},"status",[328,855,814],{"class":512},[328,857,554],{"class":512},[328,859,861],{"class":860},"sbssI"," 200",[328,863,566],{"class":512},[328,865,866,868,871,873,875,877,880,882],{"class":330,"line":356},[328,867,808],{"class":512},[328,869,870],{"class":508},"duration",[328,872,814],{"class":512},[328,874,554],{"class":512},[328,876,819],{"class":512},[328,878,879],{"class":439},"4.5s",[328,881,814],{"class":512},[328,883,566],{"class":512},[328,885,886,888,891,893,895],{"class":330,"line":362},[328,887,808],{"class":512},[328,889,890],{"class":508},"ai",[328,892,814],{"class":512},[328,894,554],{"class":512},[328,896,526],{"class":512},[328,898,899,902,905,907,909,912],{"class":330,"line":368},[328,900,901],{"class":512},"    \"",[328,903,904],{"class":436},"calls",[328,906,814],{"class":512},[328,908,554],{"class":512},[328,910,911],{"class":860}," 1",[328,913,566],{"class":512},[328,915,916,918,921,923,925,927,930,932],{"class":330,"line":374},[328,917,901],{"class":512},[328,919,920],{"class":436},"model",[328,922,814],{"class":512},[328,924,554],{"class":512},[328,926,819],{"class":512},[328,928,929],{"class":439},"claude-sonnet-4.6",[328,931,814],{"class":512},[328,933,566],{"class":512},[328,935,936,938,941,943,945,947,950,952],{"class":330,"line":380},[328,937,901],{"class":512},[328,939,940],{"class":436},"provider",[328,942,814],{"class":512},[328,944,554],{"class":512},[328,946,819],{"class":512},[328,948,949],{"class":439},"anthropic",[328,951,814],{"class":512},[328,953,566],{"class":512},[328,955,956,958,961,963,965,968],{"class":330,"line":386},[328,957,901],{"class":512},[328,959,960],{"class":436},"inputTokens",[328,962,814],{"class":512},[328,964,554],{"class":512},[328,966,967],{"class":860}," 3312",[328,969,566],{"class":512},[328,971,972,974,977,979,981,984],{"class":330,"line":392},[328,973,901],{"class":512},[328,975,976],{"class":436},"outputTokens",[328,978,814],{"class":512},[328,980,554],{"class":512},[328,982,983],{"class":860}," 814",[328,985,566],{"class":512},[328,987,988,990,993,995,997,1000],{"class":330,"line":398},[328,989,901],{"class":512},[328,991,992],{"class":436},"totalTokens",[328,994,814],{"class":512},[328,996,554],{"class":512},[328,998,999],{"class":860}," 4126",[328,1001,566],{"class":512},[328,1003,1004,1006,1009,1011,1013,1016],{"class":330,"line":403},[328,1005,901],{"class":512},[328,1007,1008],{"class":436},"reasoningTokens",[328,1010,814],{"class":512},[328,1012,554],{"class":512},[328,1014,1015],{"class":860}," 225",[328,1017,566],{"class":512},[328,1019,1020,1022,1025,1027,1029,1031,1034,1036],{"class":330,"line":409},[328,1021,901],{"class":512},[328,1023,1024],{"class":436},"finishReason",[328,1026,814],{"class":512},[328,1028,554],{"class":512},[328,1030,819],{"class":512},[328,1032,1033],{"class":439},"stop",[328,1035,814],{"class":512},[328,1037,566],{"class":512},[328,1039,1041,1043,1046,1048,1050,1053],{"class":330,"line":1040},15,[328,1042,901],{"class":512},[328,1044,1045],{"class":436},"msToFirstChunk",[328,1047,814],{"class":512},[328,1049,554],{"class":512},[328,1051,1052],{"class":860}," 234",[328,1054,566],{"class":512},[328,1056,1058,1060,1063,1065,1067,1070],{"class":330,"line":1057},16,[328,1059,901],{"class":512},[328,1061,1062],{"class":436},"msToFinish",[328,1064,814],{"class":512},[328,1066,554],{"class":512},[328,1068,1069],{"class":860}," 4500",[328,1071,566],{"class":512},[328,1073,1075,1077,1080,1082,1084],{"class":330,"line":1074},17,[328,1076,901],{"class":512},[328,1078,1079],{"class":436},"tokensPerSecond",[328,1081,814],{"class":512},[328,1083,554],{"class":512},[328,1085,1086],{"class":860}," 180\n",[328,1088,1090],{"class":330,"line":1089},18,[328,1091,1092],{"class":512},"  }\n",[328,1094,1096],{"class":330,"line":1095},19,[328,1097,1098],{"class":512},"}\n",[414,1100,1102],{"id":1101},"how-it-works","How It Works",[307,1104,1105,1108,1109,1112],{},[310,1106,1107],{},"createAILogger(log, options?)"," returns an ",[310,1110,1111],{},"AILogger"," with the following methods:",[1114,1115,1116,1129],"table",{},[1117,1118,1119],"thead",{},[1120,1121,1122,1126],"tr",{},[1123,1124,1125],"th",{},"Method",[1123,1127,1128],{},"Description",[1130,1131,1132,1163,1181,1206,1227],"tbody",{},[1120,1133,1134,1140],{},[1135,1136,1137],"td",{},[310,1138,1139],{},"wrap(model)",[1135,1141,1142,1143,1146,1147,1150,1151,1154,1155,1158,1159,1162],{},"Wraps a language model with middleware. Accepts a model string (e.g. ",[310,1144,1145],{},"'anthropic\u002Fclaude-sonnet-4.6'",") or a ",[310,1148,1149],{},"LanguageModelV3"," object. Works with ",[310,1152,1153],{},"generateText",", ",[310,1156,1157],{},"streamText",", and ",[310,1160,1161],{},"ToolLoopAgent",". Also works with pre-wrapped models (e.g. from supermemory).",[1120,1164,1165,1170],{},[1135,1166,1167],{},[310,1168,1169],{},"captureEmbed(result)",[1135,1171,1172,1173,1176,1177,1180],{},"Manually captures token usage, model info, and dimensions from ",[310,1174,1175],{},"embed()"," or ",[310,1178,1179],{},"embedMany()"," results (embedding models use a different type).",[1120,1182,1183,1188],{},[1135,1184,1185],{},[310,1186,1187],{},"getMetadata()",[1135,1189,1190,1191,1194,1195,1197,1198,1201,1202,1205],{},"Returns a snapshot of the current execution metadata (",[310,1192,1193],{},"AIMetadata",") — same shape as the ",[310,1196,890],{}," field on the wide event. Safe to call inside ",[310,1199,1200],{},"onFinish",", after ",[310,1203,1204],{},"await generateText()",", or while a stream is in progress.",[1120,1207,1208,1213],{},[1135,1209,1210],{},[310,1211,1212],{},"getEstimatedCost()",[1135,1214,1215,1216,1219,1220,1223,1224,591],{},"Returns the current estimated cost in dollars, or ",[310,1217,1218],{},"undefined"," if no ",[310,1221,1222],{},"cost"," map was provided. Convenience for ",[310,1225,1226],{},"getMetadata().estimatedCost",[1120,1228,1229,1234],{},[1135,1230,1231],{},[310,1232,1233],{},"onUpdate(callback)",[1135,1235,1236,1237,1240,1241,1244,1245,1247],{},"Subscribes to metadata updates. Fires on every step, every ",[310,1238,1239],{},"captureEmbed"," call, on errors, and on ",[310,1242,1243],{},"createEvlogIntegration","'s ",[310,1246,1200],{},". Returns an unsubscribe function.",[307,1249,1250],{},"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.",[1252,1253,1255],"h3",{"id":1254},"options","Options",[1114,1257,1258,1273],{},[1117,1259,1260],{},[1120,1261,1262,1265,1268,1271],{},[1123,1263,1264],{},"Option",[1123,1266,1267],{},"Type",[1123,1269,1270],{},"Default",[1123,1272,1128],{},[1130,1274,1275,1303],{},[1120,1276,1277,1282,1287,1292],{},[1135,1278,1279],{},[310,1280,1281],{},"toolInputs",[1135,1283,1284],{},[310,1285,1286],{},"boolean | ToolInputsOptions",[1135,1288,1289],{},[310,1290,1291],{},"false",[1135,1293,1294,1295,1298,1299,1302],{},"When enabled, ",[310,1296,1297],{},"toolCalls"," contains ",[310,1300,1301],{},"{ name, input }"," objects instead of plain strings. Opt-in because inputs can be large and may contain sensitive data.",[1120,1304,1305,1309,1314,1318],{},[1135,1306,1307],{},[310,1308,1222],{},[1135,1310,1311],{},[310,1312,1313],{},"Record\u003Cstring, ModelCost>",[1135,1315,1316],{},[310,1317,1218],{},[1135,1319,1320,1321,1324],{},"Pricing map for cost estimation. Keys are model IDs, values are ",[310,1322,1323],{},"{ input, output }"," in dollars per 1M tokens.",[307,1326,1327,1328,1331],{},"Pass ",[310,1329,1330],{},"true"," to capture all inputs as-is, or an options object for fine-grained control:",[1114,1333,1334,1345],{},[1117,1335,1336],{},[1120,1337,1338,1341,1343],{},[1123,1339,1340],{},"Sub-option",[1123,1342,1267],{},[1123,1344,1128],{},[1130,1346,1347,1365],{},[1120,1348,1349,1354,1359],{},[1135,1350,1351],{},[310,1352,1353],{},"maxLength",[1135,1355,1356],{},[310,1357,1358],{},"number",[1135,1360,1361,1362,520],{},"Truncate stringified inputs exceeding this character length (appends ",[310,1363,1364],{},"…",[1120,1366,1367,1372,1377],{},[1135,1368,1369],{},[310,1370,1371],{},"transform",[1135,1373,1374],{},[310,1375,1376],{},"(input, toolName) => unknown",[1135,1378,1379,1380,1382],{},"Custom transform applied before ",[310,1381,1353],{},". Use to redact fields or reshape data.",[318,1384,1387],{"className":483,"code":1385,"filename":1386,"language":486,"meta":324,"style":324},"\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\n\u002F\u002F Cost estimation\nconst ai = createAILogger(log, {\n  cost: {\n    'claude-sonnet-4.6': { input: 3, output: 15 },\n    'gpt-4o': { input: 2.5, output: 10 },\n  },\n})\n","server\u002Fapi\u002Fchat.post.ts",[310,1388,1389,1395,1429,1433,1438,1473,1477,1482,1498,1507,1519,1542,1585,1593,1598,1603,1609,1613,1618,1634,1644,1679,1711,1716],{"__ignoreMap":324},[328,1390,1391],{"class":330,"line":331},[328,1392,1394],{"class":1393},"sHwdD","\u002F\u002F Capture everything\n",[328,1396,1397,1400,1403,1406,1408,1411,1414,1416,1419,1421,1425,1427],{"class":330,"line":337},[328,1398,1399],{"class":508},"const",[328,1401,1402],{"class":504}," ai ",[328,1404,1405],{"class":512},"=",[328,1407,644],{"class":500},[328,1409,1410],{"class":504},"(log",[328,1412,1413],{"class":512},",",[328,1415,618],{"class":512},[328,1417,1418],{"class":543}," toolInputs",[328,1420,554],{"class":512},[328,1422,1424],{"class":1423},"sfNiH"," true",[328,1426,624],{"class":512},[328,1428,581],{"class":504},[328,1430,1431],{"class":330,"line":344},[328,1432,341],{"emptyLinePlaceholder":340},[328,1434,1435],{"class":330,"line":350},[328,1436,1437],{"class":1393},"\u002F\u002F Truncate long inputs (e.g. SQL queries)\n",[328,1439,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1463,1465,1467,1469,1471],{"class":330,"line":356},[328,1441,1399],{"class":508},[328,1443,1402],{"class":504},[328,1445,1405],{"class":512},[328,1447,644],{"class":500},[328,1449,1410],{"class":504},[328,1451,1413],{"class":512},[328,1453,618],{"class":512},[328,1455,1418],{"class":543},[328,1457,554],{"class":512},[328,1459,618],{"class":512},[328,1461,1462],{"class":543}," maxLength",[328,1464,554],{"class":512},[328,1466,861],{"class":860},[328,1468,624],{"class":512},[328,1470,624],{"class":512},[328,1472,581],{"class":504},[328,1474,1475],{"class":330,"line":362},[328,1476,341],{"emptyLinePlaceholder":340},[328,1478,1479],{"class":330,"line":368},[328,1480,1481],{"class":1393},"\u002F\u002F Redact sensitive tool inputs\n",[328,1483,1484,1486,1488,1490,1492,1494,1496],{"class":330,"line":374},[328,1485,1399],{"class":508},[328,1487,1402],{"class":504},[328,1489,1405],{"class":512},[328,1491,644],{"class":500},[328,1493,1410],{"class":504},[328,1495,1413],{"class":512},[328,1497,526],{"class":512},[328,1499,1500,1503,1505],{"class":330,"line":380},[328,1501,1502],{"class":543},"  toolInputs",[328,1504,554],{"class":512},[328,1506,526],{"class":512},[328,1508,1509,1512,1514,1517],{"class":330,"line":386},[328,1510,1511],{"class":543},"    maxLength",[328,1513,554],{"class":512},[328,1515,1516],{"class":860}," 500",[328,1518,566],{"class":512},[328,1520,1521,1524,1526,1528,1531,1533,1536,1538,1540],{"class":330,"line":392},[328,1522,1523],{"class":500},"    transform",[328,1525,554],{"class":512},[328,1527,513],{"class":512},[328,1529,1530],{"class":516},"input",[328,1532,1413],{"class":512},[328,1534,1535],{"class":516}," toolName",[328,1537,520],{"class":512},[328,1539,523],{"class":508},[328,1541,526],{"class":512},[328,1543,1544,1547,1549,1552,1555,1557,1560,1562,1565,1568,1570,1573,1575,1577,1580,1582],{"class":330,"line":398},[328,1545,1546],{"class":493},"      if",[328,1548,513],{"class":543},[328,1550,1551],{"class":504},"toolName",[328,1553,1554],{"class":512}," ===",[328,1556,557],{"class":512},[328,1558,1559],{"class":439},"queryDB",[328,1561,563],{"class":512},[328,1563,1564],{"class":543},") ",[328,1566,1567],{"class":493},"return",[328,1569,618],{"class":512},[328,1571,1572],{"class":543}," sql",[328,1574,554],{"class":512},[328,1576,557],{"class":512},[328,1578,1579],{"class":439},"***",[328,1581,563],{"class":512},[328,1583,1584],{"class":512}," }\n",[328,1586,1587,1590],{"class":330,"line":403},[328,1588,1589],{"class":493},"      return",[328,1591,1592],{"class":504}," input\n",[328,1594,1595],{"class":330,"line":409},[328,1596,1597],{"class":512},"    },\n",[328,1599,1600],{"class":330,"line":1040},[328,1601,1602],{"class":512},"  },\n",[328,1604,1605,1607],{"class":330,"line":1057},[328,1606,602],{"class":512},[328,1608,581],{"class":504},[328,1610,1611],{"class":330,"line":1074},[328,1612,341],{"emptyLinePlaceholder":340},[328,1614,1615],{"class":330,"line":1089},[328,1616,1617],{"class":1393},"\u002F\u002F Cost estimation\n",[328,1619,1620,1622,1624,1626,1628,1630,1632],{"class":330,"line":1095},[328,1621,1399],{"class":508},[328,1623,1402],{"class":504},[328,1625,1405],{"class":512},[328,1627,644],{"class":500},[328,1629,1410],{"class":504},[328,1631,1413],{"class":512},[328,1633,526],{"class":512},[328,1635,1637,1640,1642],{"class":330,"line":1636},20,[328,1638,1639],{"class":543},"  cost",[328,1641,554],{"class":512},[328,1643,526],{"class":512},[328,1645,1647,1650,1652,1654,1656,1658,1661,1663,1666,1668,1671,1673,1676],{"class":330,"line":1646},21,[328,1648,1649],{"class":512},"    '",[328,1651,929],{"class":543},[328,1653,563],{"class":512},[328,1655,554],{"class":512},[328,1657,618],{"class":512},[328,1659,1660],{"class":543}," input",[328,1662,554],{"class":512},[328,1664,1665],{"class":860}," 3",[328,1667,1413],{"class":512},[328,1669,1670],{"class":543}," output",[328,1672,554],{"class":512},[328,1674,1675],{"class":860}," 15",[328,1677,1678],{"class":512}," },\n",[328,1680,1682,1684,1687,1689,1691,1693,1695,1697,1700,1702,1704,1706,1709],{"class":330,"line":1681},22,[328,1683,1649],{"class":512},[328,1685,1686],{"class":543},"gpt-4o",[328,1688,563],{"class":512},[328,1690,554],{"class":512},[328,1692,618],{"class":512},[328,1694,1660],{"class":543},[328,1696,554],{"class":512},[328,1698,1699],{"class":860}," 2.5",[328,1701,1413],{"class":512},[328,1703,1670],{"class":543},[328,1705,554],{"class":512},[328,1707,1708],{"class":860}," 10",[328,1710,1678],{"class":512},[328,1712,1714],{"class":330,"line":1713},23,[328,1715,1602],{"class":512},[328,1717,1719,1721],{"class":330,"line":1718},24,[328,1720,602],{"class":512},[328,1722,581],{"class":504},[414,1724,1726],{"id":1725},"usage-patterns","Usage Patterns",[1252,1728,1157],{"id":1729},"streamtext",[307,1731,1732],{},"The most common pattern, streaming chat with full observability:",[318,1734,1736],{"className":483,"code":1735,"filename":1386,"language":486,"meta":324,"style":324},"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",[310,1737,1738,1756,1774,1778,1800,1816,1832,1857,1861,1906,1910,1924,1948,1954,1974,1979,1991,1995,2001,2005,2017],{"__ignoreMap":324},[328,1739,1740,1742,1744,1746,1748,1750,1752,1754],{"class":330,"line":331},[328,1741,615],{"class":493},[328,1743,618],{"class":512},[328,1745,540],{"class":504},[328,1747,624],{"class":512},[328,1749,627],{"class":493},[328,1751,557],{"class":512},[328,1753,890],{"class":439},[328,1755,635],{"class":512},[328,1757,1758,1760,1762,1764,1766,1768,1770,1772],{"class":330,"line":337},[328,1759,615],{"class":493},[328,1761,618],{"class":512},[328,1763,644],{"class":504},[328,1765,624],{"class":512},[328,1767,627],{"class":493},[328,1769,557],{"class":512},[328,1771,312],{"class":439},[328,1773,635],{"class":512},[328,1775,1776],{"class":330,"line":344},[328,1777,341],{"emptyLinePlaceholder":340},[328,1779,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798],{"class":330,"line":350},[328,1781,494],{"class":493},[328,1783,497],{"class":493},[328,1785,501],{"class":500},[328,1787,505],{"class":504},[328,1789,509],{"class":508},[328,1791,513],{"class":512},[328,1793,517],{"class":516},[328,1795,520],{"class":512},[328,1797,523],{"class":508},[328,1799,526],{"class":512},[328,1801,1802,1804,1806,1808,1810,1812,1814],{"class":330,"line":356},[328,1803,531],{"class":508},[328,1805,687],{"class":504},[328,1807,537],{"class":512},[328,1809,621],{"class":500},[328,1811,505],{"class":543},[328,1813,517],{"class":504},[328,1815,581],{"class":543},[328,1817,1818,1820,1822,1824,1826,1828,1830],{"class":330,"line":362},[328,1819,531],{"class":508},[328,1821,704],{"class":504},[328,1823,537],{"class":512},[328,1825,644],{"class":500},[328,1827,505],{"class":543},[328,1829,713],{"class":504},[328,1831,581],{"class":543},[328,1833,1834,1836,1838,1841,1843,1845,1848,1851,1853,1855],{"class":330,"line":368},[328,1835,531],{"class":508},[328,1837,618],{"class":512},[328,1839,1840],{"class":504}," messages",[328,1842,624],{"class":512},[328,1844,537],{"class":512},[328,1846,1847],{"class":493}," await",[328,1849,1850],{"class":500}," readBody",[328,1852,505],{"class":543},[328,1854,517],{"class":504},[328,1856,581],{"class":543},[328,1858,1859],{"class":330,"line":374},[328,1860,341],{"emptyLinePlaceholder":340},[328,1862,1863,1866,1868,1871,1873,1876,1879,1881,1883,1886,1888,1890,1893,1895,1897,1899,1902,1904],{"class":330,"line":380},[328,1864,1865],{"class":504},"  log",[328,1867,591],{"class":512},[328,1869,1870],{"class":500},"set",[328,1872,505],{"class":543},[328,1874,1875],{"class":512},"{",[328,1877,1878],{"class":543}," action",[328,1880,554],{"class":512},[328,1882,557],{"class":512},[328,1884,1885],{"class":439},"chat",[328,1887,563],{"class":512},[328,1889,1413],{"class":512},[328,1891,1892],{"class":543}," messagesCount",[328,1894,554],{"class":512},[328,1896,1840],{"class":504},[328,1898,591],{"class":512},[328,1900,1901],{"class":504},"length",[328,1903,624],{"class":512},[328,1905,581],{"class":543},[328,1907,1908],{"class":330,"line":386},[328,1909,341],{"emptyLinePlaceholder":340},[328,1911,1912,1914,1916,1918,1920,1922],{"class":330,"line":392},[328,1913,531],{"class":508},[328,1915,534],{"class":504},[328,1917,537],{"class":512},[328,1919,540],{"class":500},[328,1921,505],{"class":543},[328,1923,546],{"class":512},[328,1925,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946],{"class":330,"line":398},[328,1927,551],{"class":543},[328,1929,554],{"class":512},[328,1931,704],{"class":504},[328,1933,591],{"class":512},[328,1935,746],{"class":500},[328,1937,505],{"class":543},[328,1939,563],{"class":512},[328,1941,560],{"class":439},[328,1943,563],{"class":512},[328,1945,520],{"class":543},[328,1947,566],{"class":512},[328,1949,1950,1952],{"class":330,"line":403},[328,1951,571],{"class":504},[328,1953,566],{"class":512},[328,1955,1956,1959,1961,1964,1967,1970,1972],{"class":330,"line":409},[328,1957,1958],{"class":500},"    onFinish",[328,1960,554],{"class":512},[328,1962,1963],{"class":512}," ({",[328,1965,1966],{"class":516}," text",[328,1968,1969],{"class":512}," })",[328,1971,523],{"class":508},[328,1973,526],{"class":512},[328,1975,1976],{"class":330,"line":1040},[328,1977,1978],{"class":1393},"      \u002F\u002F Your code, no conflict with evlog\n",[328,1980,1981,1984,1986,1989],{"class":330,"line":1057},[328,1982,1983],{"class":500},"      saveConversation",[328,1985,505],{"class":543},[328,1987,1988],{"class":504},"text",[328,1990,581],{"class":543},[328,1992,1993],{"class":330,"line":1074},[328,1994,1597],{"class":512},[328,1996,1997,1999],{"class":330,"line":1089},[328,1998,578],{"class":512},[328,2000,581],{"class":543},[328,2002,2003],{"class":330,"line":1095},[328,2004,341],{"emptyLinePlaceholder":340},[328,2006,2007,2009,2011,2013,2015],{"class":330,"line":1636},[328,2008,586],{"class":493},[328,2010,534],{"class":504},[328,2012,591],{"class":512},[328,2014,594],{"class":500},[328,2016,597],{"class":543},[328,2018,2019,2021],{"class":330,"line":1646},[328,2020,602],{"class":512},[328,2022,581],{"class":504},[1252,2024,1153],{"id":2025},"generatetext",[307,2027,2028],{},"Synchronous generation, the middleware captures the result automatically:",[318,2030,2033],{"className":483,"code":2031,"filename":2032,"language":486,"meta":324,"style":324},"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",[310,2034,2035,2054,2072,2076,2098,2114,2130,2134,2150,2174,2190,2196,2200,2218],{"__ignoreMap":324},[328,2036,2037,2039,2041,2044,2046,2048,2050,2052],{"class":330,"line":331},[328,2038,615],{"class":493},[328,2040,618],{"class":512},[328,2042,2043],{"class":504}," generateText",[328,2045,624],{"class":512},[328,2047,627],{"class":493},[328,2049,557],{"class":512},[328,2051,890],{"class":439},[328,2053,635],{"class":512},[328,2055,2056,2058,2060,2062,2064,2066,2068,2070],{"class":330,"line":337},[328,2057,615],{"class":493},[328,2059,618],{"class":512},[328,2061,644],{"class":504},[328,2063,624],{"class":512},[328,2065,627],{"class":493},[328,2067,557],{"class":512},[328,2069,312],{"class":439},[328,2071,635],{"class":512},[328,2073,2074],{"class":330,"line":344},[328,2075,341],{"emptyLinePlaceholder":340},[328,2077,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096],{"class":330,"line":350},[328,2079,494],{"class":493},[328,2081,497],{"class":493},[328,2083,501],{"class":500},[328,2085,505],{"class":504},[328,2087,509],{"class":508},[328,2089,513],{"class":512},[328,2091,517],{"class":516},[328,2093,520],{"class":512},[328,2095,523],{"class":508},[328,2097,526],{"class":512},[328,2099,2100,2102,2104,2106,2108,2110,2112],{"class":330,"line":356},[328,2101,531],{"class":508},[328,2103,687],{"class":504},[328,2105,537],{"class":512},[328,2107,621],{"class":500},[328,2109,505],{"class":543},[328,2111,517],{"class":504},[328,2113,581],{"class":543},[328,2115,2116,2118,2120,2122,2124,2126,2128],{"class":330,"line":362},[328,2117,531],{"class":508},[328,2119,704],{"class":504},[328,2121,537],{"class":512},[328,2123,644],{"class":500},[328,2125,505],{"class":543},[328,2127,713],{"class":504},[328,2129,581],{"class":543},[328,2131,2132],{"class":330,"line":368},[328,2133,341],{"emptyLinePlaceholder":340},[328,2135,2136,2138,2140,2142,2144,2146,2148],{"class":330,"line":374},[328,2137,531],{"class":508},[328,2139,534],{"class":504},[328,2141,537],{"class":512},[328,2143,1847],{"class":493},[328,2145,2043],{"class":500},[328,2147,505],{"class":543},[328,2149,546],{"class":512},[328,2151,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172],{"class":330,"line":380},[328,2153,551],{"class":543},[328,2155,554],{"class":512},[328,2157,704],{"class":504},[328,2159,591],{"class":512},[328,2161,746],{"class":500},[328,2163,505],{"class":543},[328,2165,563],{"class":512},[328,2167,560],{"class":439},[328,2169,563],{"class":512},[328,2171,520],{"class":543},[328,2173,566],{"class":512},[328,2175,2176,2179,2181,2183,2186,2188],{"class":330,"line":386},[328,2177,2178],{"class":543},"    prompt",[328,2180,554],{"class":512},[328,2182,557],{"class":512},[328,2184,2185],{"class":439},"Summarize this document",[328,2187,563],{"class":512},[328,2189,566],{"class":512},[328,2191,2192,2194],{"class":330,"line":392},[328,2193,578],{"class":512},[328,2195,581],{"class":543},[328,2197,2198],{"class":330,"line":398},[328,2199,341],{"emptyLinePlaceholder":340},[328,2201,2202,2204,2206,2208,2210,2212,2214,2216],{"class":330,"line":403},[328,2203,586],{"class":493},[328,2205,618],{"class":512},[328,2207,1966],{"class":543},[328,2209,554],{"class":512},[328,2211,534],{"class":504},[328,2213,591],{"class":512},[328,2215,1988],{"class":504},[328,2217,1584],{"class":512},[328,2219,2220,2222],{"class":330,"line":409},[328,2221,602],{"class":512},[328,2223,581],{"class":504},[1252,2225,2227],{"id":2226},"multi-step-agents","Multi-step agents",[307,2229,2230],{},"The middleware fires for each step automatically. Steps, tool calls, and tokens are all accumulated across the agent loop:",[318,2232,2235],{"className":483,"code":2233,"filename":2234,"language":486,"meta":324,"style":324},"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",[310,2236,2237,2266,2284,2302,2306,2328,2344,2366,2384,2401,2407,2411,2429,2453,2472,2490,2496,2500,2510,2517,2528,2534],{"__ignoreMap":324},[328,2238,2239,2241,2243,2246,2248,2251,2253,2256,2258,2260,2262,2264],{"class":330,"line":331},[328,2240,615],{"class":493},[328,2242,618],{"class":512},[328,2244,2245],{"class":504}," ToolLoopAgent",[328,2247,1413],{"class":512},[328,2249,2250],{"class":504}," createAgentUIStreamResponse",[328,2252,1413],{"class":512},[328,2254,2255],{"class":504}," stepCountIs",[328,2257,624],{"class":512},[328,2259,627],{"class":493},[328,2261,557],{"class":512},[328,2263,890],{"class":439},[328,2265,635],{"class":512},[328,2267,2268,2270,2272,2274,2276,2278,2280,2282],{"class":330,"line":337},[328,2269,615],{"class":493},[328,2271,618],{"class":512},[328,2273,621],{"class":504},[328,2275,624],{"class":512},[328,2277,627],{"class":493},[328,2279,557],{"class":512},[328,2281,632],{"class":439},[328,2283,635],{"class":512},[328,2285,2286,2288,2290,2292,2294,2296,2298,2300],{"class":330,"line":344},[328,2287,615],{"class":493},[328,2289,618],{"class":512},[328,2291,644],{"class":504},[328,2293,624],{"class":512},[328,2295,627],{"class":493},[328,2297,557],{"class":512},[328,2299,312],{"class":439},[328,2301,635],{"class":512},[328,2303,2304],{"class":330,"line":350},[328,2305,341],{"emptyLinePlaceholder":340},[328,2307,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326],{"class":330,"line":356},[328,2309,494],{"class":493},[328,2311,497],{"class":493},[328,2313,501],{"class":500},[328,2315,505],{"class":504},[328,2317,509],{"class":508},[328,2319,513],{"class":512},[328,2321,517],{"class":516},[328,2323,520],{"class":512},[328,2325,523],{"class":508},[328,2327,526],{"class":512},[328,2329,2330,2332,2334,2336,2338,2340,2342],{"class":330,"line":362},[328,2331,531],{"class":508},[328,2333,687],{"class":504},[328,2335,537],{"class":512},[328,2337,621],{"class":500},[328,2339,505],{"class":543},[328,2341,517],{"class":504},[328,2343,581],{"class":543},[328,2345,2346,2348,2350,2352,2354,2356,2358,2360,2362,2364],{"class":330,"line":368},[328,2347,531],{"class":508},[328,2349,618],{"class":512},[328,2351,1840],{"class":504},[328,2353,624],{"class":512},[328,2355,537],{"class":512},[328,2357,1847],{"class":493},[328,2359,1850],{"class":500},[328,2361,505],{"class":543},[328,2363,517],{"class":504},[328,2365,581],{"class":543},[328,2367,2368,2370,2372,2374,2376,2378,2380,2382],{"class":330,"line":374},[328,2369,531],{"class":508},[328,2371,704],{"class":504},[328,2373,537],{"class":512},[328,2375,644],{"class":500},[328,2377,505],{"class":543},[328,2379,713],{"class":504},[328,2381,1413],{"class":512},[328,2383,526],{"class":512},[328,2385,2386,2389,2391,2393,2395,2397,2399],{"class":330,"line":380},[328,2387,2388],{"class":543},"    toolInputs",[328,2390,554],{"class":512},[328,2392,618],{"class":512},[328,2394,1462],{"class":543},[328,2396,554],{"class":512},[328,2398,1516],{"class":860},[328,2400,1678],{"class":512},[328,2402,2403,2405],{"class":330,"line":386},[328,2404,578],{"class":512},[328,2406,581],{"class":543},[328,2408,2409],{"class":330,"line":392},[328,2410,341],{"emptyLinePlaceholder":340},[328,2412,2413,2415,2418,2420,2423,2425,2427],{"class":330,"line":398},[328,2414,531],{"class":508},[328,2416,2417],{"class":504}," agent",[328,2419,537],{"class":512},[328,2421,2422],{"class":512}," new",[328,2424,2245],{"class":500},[328,2426,505],{"class":543},[328,2428,546],{"class":512},[328,2430,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451],{"class":330,"line":403},[328,2432,551],{"class":543},[328,2434,554],{"class":512},[328,2436,704],{"class":504},[328,2438,591],{"class":512},[328,2440,746],{"class":500},[328,2442,505],{"class":543},[328,2444,563],{"class":512},[328,2446,560],{"class":439},[328,2448,563],{"class":512},[328,2450,520],{"class":543},[328,2452,566],{"class":512},[328,2454,2455,2458,2460,2462,2465,2467,2470],{"class":330,"line":409},[328,2456,2457],{"class":543},"    tools",[328,2459,554],{"class":512},[328,2461,618],{"class":512},[328,2463,2464],{"class":504}," searchWeb",[328,2466,1413],{"class":512},[328,2468,2469],{"class":504}," queryDatabase",[328,2471,1678],{"class":512},[328,2473,2474,2477,2479,2481,2483,2486,2488],{"class":330,"line":1040},[328,2475,2476],{"class":543},"    stopWhen",[328,2478,554],{"class":512},[328,2480,2255],{"class":500},[328,2482,505],{"class":543},[328,2484,2485],{"class":860},"5",[328,2487,520],{"class":543},[328,2489,566],{"class":512},[328,2491,2492,2494],{"class":330,"line":1057},[328,2493,578],{"class":512},[328,2495,581],{"class":543},[328,2497,2498],{"class":330,"line":1074},[328,2499,341],{"emptyLinePlaceholder":340},[328,2501,2502,2504,2506,2508],{"class":330,"line":1089},[328,2503,586],{"class":493},[328,2505,2250],{"class":500},[328,2507,505],{"class":543},[328,2509,546],{"class":512},[328,2511,2512,2515],{"class":330,"line":1095},[328,2513,2514],{"class":504},"    agent",[328,2516,566],{"class":512},[328,2518,2519,2522,2524,2526],{"class":330,"line":1636},[328,2520,2521],{"class":543},"    uiMessages",[328,2523,554],{"class":512},[328,2525,1840],{"class":504},[328,2527,566],{"class":512},[328,2529,2530,2532],{"class":330,"line":1646},[328,2531,578],{"class":512},[328,2533,581],{"class":543},[328,2535,2536,2538],{"class":330,"line":1681},[328,2537,602],{"class":512},[328,2539,581],{"class":504},[307,2541,2542],{},"Wide event after a 3-step agent run:",[318,2544,2546],{"className":794,"code":2545,"filename":796,"language":797,"meta":324,"style":324},"{\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",[310,2547,2548,2552,2564,2578,2593,2611,2629,2643,2658,2673,2691,2704,2757,2808,2857,2862,2882,2895,2962,3036,3081,3085,3100,3115,3128,3133],{"__ignoreMap":324},[328,2549,2550],{"class":330,"line":331},[328,2551,546],{"class":512},[328,2553,2554,2556,2558,2560,2562],{"class":330,"line":337},[328,2555,808],{"class":512},[328,2557,890],{"class":508},[328,2559,814],{"class":512},[328,2561,554],{"class":512},[328,2563,526],{"class":512},[328,2565,2566,2568,2570,2572,2574,2576],{"class":330,"line":344},[328,2567,901],{"class":512},[328,2569,904],{"class":436},[328,2571,814],{"class":512},[328,2573,554],{"class":512},[328,2575,1665],{"class":860},[328,2577,566],{"class":512},[328,2579,2580,2582,2585,2587,2589,2591],{"class":330,"line":350},[328,2581,901],{"class":512},[328,2583,2584],{"class":436},"steps",[328,2586,814],{"class":512},[328,2588,554],{"class":512},[328,2590,1665],{"class":860},[328,2592,566],{"class":512},[328,2594,2595,2597,2599,2601,2603,2605,2607,2609],{"class":330,"line":356},[328,2596,901],{"class":512},[328,2598,920],{"class":436},[328,2600,814],{"class":512},[328,2602,554],{"class":512},[328,2604,819],{"class":512},[328,2606,929],{"class":439},[328,2608,814],{"class":512},[328,2610,566],{"class":512},[328,2612,2613,2615,2617,2619,2621,2623,2625,2627],{"class":330,"line":362},[328,2614,901],{"class":512},[328,2616,940],{"class":436},[328,2618,814],{"class":512},[328,2620,554],{"class":512},[328,2622,819],{"class":512},[328,2624,949],{"class":439},[328,2626,814],{"class":512},[328,2628,566],{"class":512},[328,2630,2631,2633,2635,2637,2639,2641],{"class":330,"line":368},[328,2632,901],{"class":512},[328,2634,960],{"class":436},[328,2636,814],{"class":512},[328,2638,554],{"class":512},[328,2640,1069],{"class":860},[328,2642,566],{"class":512},[328,2644,2645,2647,2649,2651,2653,2656],{"class":330,"line":374},[328,2646,901],{"class":512},[328,2648,976],{"class":436},[328,2650,814],{"class":512},[328,2652,554],{"class":512},[328,2654,2655],{"class":860}," 1200",[328,2657,566],{"class":512},[328,2659,2660,2662,2664,2666,2668,2671],{"class":330,"line":380},[328,2661,901],{"class":512},[328,2663,992],{"class":436},[328,2665,814],{"class":512},[328,2667,554],{"class":512},[328,2669,2670],{"class":860}," 5700",[328,2672,566],{"class":512},[328,2674,2675,2677,2679,2681,2683,2685,2687,2689],{"class":330,"line":386},[328,2676,901],{"class":512},[328,2678,1024],{"class":436},[328,2680,814],{"class":512},[328,2682,554],{"class":512},[328,2684,819],{"class":512},[328,2686,1033],{"class":439},[328,2688,814],{"class":512},[328,2690,566],{"class":512},[328,2692,2693,2695,2697,2699,2701],{"class":330,"line":392},[328,2694,901],{"class":512},[328,2696,1297],{"class":436},[328,2698,814],{"class":512},[328,2700,554],{"class":512},[328,2702,2703],{"class":512}," [\n",[328,2705,2706,2709,2711,2714,2716,2718,2720,2723,2725,2727,2729,2731,2733,2735,2737,2739,2742,2744,2746,2748,2751,2753,2755],{"class":330,"line":398},[328,2707,2708],{"class":512},"      {",[328,2710,819],{"class":512},[328,2712,2713],{"class":860},"name",[328,2715,814],{"class":512},[328,2717,554],{"class":512},[328,2719,819],{"class":512},[328,2721,2722],{"class":439},"searchWeb",[328,2724,814],{"class":512},[328,2726,1413],{"class":512},[328,2728,819],{"class":512},[328,2730,1530],{"class":860},[328,2732,814],{"class":512},[328,2734,554],{"class":512},[328,2736,618],{"class":512},[328,2738,819],{"class":512},[328,2740,2741],{"class":543},"query",[328,2743,814],{"class":512},[328,2745,554],{"class":512},[328,2747,819],{"class":512},[328,2749,2750],{"class":439},"TypeScript 6.0 features",[328,2752,814],{"class":512},[328,2754,624],{"class":512},[328,2756,1678],{"class":512},[328,2758,2759,2761,2763,2765,2767,2769,2771,2774,2776,2778,2780,2782,2784,2786,2788,2790,2793,2795,2797,2799,2802,2804,2806],{"class":330,"line":403},[328,2760,2708],{"class":512},[328,2762,819],{"class":512},[328,2764,2713],{"class":860},[328,2766,814],{"class":512},[328,2768,554],{"class":512},[328,2770,819],{"class":512},[328,2772,2773],{"class":439},"queryDatabase",[328,2775,814],{"class":512},[328,2777,1413],{"class":512},[328,2779,819],{"class":512},[328,2781,1530],{"class":860},[328,2783,814],{"class":512},[328,2785,554],{"class":512},[328,2787,618],{"class":512},[328,2789,819],{"class":512},[328,2791,2792],{"class":543},"sql",[328,2794,814],{"class":512},[328,2796,554],{"class":512},[328,2798,819],{"class":512},[328,2800,2801],{"class":439},"SELECT * FROM docs WHERE topic = 'typescript'",[328,2803,814],{"class":512},[328,2805,624],{"class":512},[328,2807,1678],{"class":512},[328,2809,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2851,2853,2855],{"class":330,"line":409},[328,2811,2708],{"class":512},[328,2813,819],{"class":512},[328,2815,2713],{"class":860},[328,2817,814],{"class":512},[328,2819,554],{"class":512},[328,2821,819],{"class":512},[328,2823,2722],{"class":439},[328,2825,814],{"class":512},[328,2827,1413],{"class":512},[328,2829,819],{"class":512},[328,2831,1530],{"class":860},[328,2833,814],{"class":512},[328,2835,554],{"class":512},[328,2837,618],{"class":512},[328,2839,819],{"class":512},[328,2841,2741],{"class":543},[328,2843,814],{"class":512},[328,2845,554],{"class":512},[328,2847,819],{"class":512},[328,2849,2850],{"class":439},"TypeScript 6.0 release date",[328,2852,814],{"class":512},[328,2854,624],{"class":512},[328,2856,1584],{"class":512},[328,2858,2859],{"class":330,"line":1040},[328,2860,2861],{"class":512},"    ],\n",[328,2863,2864,2866,2869,2871,2873,2875,2878,2880],{"class":330,"line":1057},[328,2865,901],{"class":512},[328,2867,2868],{"class":436},"responseId",[328,2870,814],{"class":512},[328,2872,554],{"class":512},[328,2874,819],{"class":512},[328,2876,2877],{"class":439},"msg_01XFDUDYJgAACzvnptvVoYEL",[328,2879,814],{"class":512},[328,2881,566],{"class":512},[328,2883,2884,2886,2889,2891,2893],{"class":330,"line":1074},[328,2885,901],{"class":512},[328,2887,2888],{"class":436},"stepsUsage",[328,2890,814],{"class":512},[328,2892,554],{"class":512},[328,2894,2703],{"class":512},[328,2896,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2938,2940,2942,2944,2946,2948,2951,2953,2955,2957,2960],{"class":330,"line":1089},[328,2898,2708],{"class":512},[328,2900,819],{"class":512},[328,2902,920],{"class":860},[328,2904,814],{"class":512},[328,2906,554],{"class":512},[328,2908,819],{"class":512},[328,2910,929],{"class":439},[328,2912,814],{"class":512},[328,2914,1413],{"class":512},[328,2916,819],{"class":512},[328,2918,960],{"class":860},[328,2920,814],{"class":512},[328,2922,554],{"class":512},[328,2924,2655],{"class":860},[328,2926,1413],{"class":512},[328,2928,819],{"class":512},[328,2930,976],{"class":860},[328,2932,814],{"class":512},[328,2934,554],{"class":512},[328,2936,2937],{"class":860}," 300",[328,2939,1413],{"class":512},[328,2941,819],{"class":512},[328,2943,1297],{"class":860},[328,2945,814],{"class":512},[328,2947,554],{"class":512},[328,2949,2950],{"class":512}," [",[328,2952,814],{"class":512},[328,2954,2722],{"class":439},[328,2956,814],{"class":512},[328,2958,2959],{"class":512},"]",[328,2961,1678],{"class":512},[328,2963,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2993,2995,2997,2999,3001,3003,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034],{"class":330,"line":1095},[328,2965,2708],{"class":512},[328,2967,819],{"class":512},[328,2969,920],{"class":860},[328,2971,814],{"class":512},[328,2973,554],{"class":512},[328,2975,819],{"class":512},[328,2977,929],{"class":439},[328,2979,814],{"class":512},[328,2981,1413],{"class":512},[328,2983,819],{"class":512},[328,2985,960],{"class":860},[328,2987,814],{"class":512},[328,2989,554],{"class":512},[328,2991,2992],{"class":860}," 1500",[328,2994,1413],{"class":512},[328,2996,819],{"class":512},[328,2998,976],{"class":860},[328,3000,814],{"class":512},[328,3002,554],{"class":512},[328,3004,3005],{"class":860}," 400",[328,3007,1413],{"class":512},[328,3009,819],{"class":512},[328,3011,1297],{"class":860},[328,3013,814],{"class":512},[328,3015,554],{"class":512},[328,3017,2950],{"class":512},[328,3019,814],{"class":512},[328,3021,2773],{"class":439},[328,3023,814],{"class":512},[328,3025,1413],{"class":512},[328,3027,819],{"class":512},[328,3029,2722],{"class":439},[328,3031,814],{"class":512},[328,3033,2959],{"class":512},[328,3035,1678],{"class":512},[328,3037,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064,3067,3069,3071,3073,3075,3077,3079],{"class":330,"line":1636},[328,3039,2708],{"class":512},[328,3041,819],{"class":512},[328,3043,920],{"class":860},[328,3045,814],{"class":512},[328,3047,554],{"class":512},[328,3049,819],{"class":512},[328,3051,929],{"class":439},[328,3053,814],{"class":512},[328,3055,1413],{"class":512},[328,3057,819],{"class":512},[328,3059,960],{"class":860},[328,3061,814],{"class":512},[328,3063,554],{"class":512},[328,3065,3066],{"class":860}," 1800",[328,3068,1413],{"class":512},[328,3070,819],{"class":512},[328,3072,976],{"class":860},[328,3074,814],{"class":512},[328,3076,554],{"class":512},[328,3078,1516],{"class":860},[328,3080,1584],{"class":512},[328,3082,3083],{"class":330,"line":1646},[328,3084,2861],{"class":512},[328,3086,3087,3089,3091,3093,3095,3098],{"class":330,"line":1681},[328,3088,901],{"class":512},[328,3090,1045],{"class":436},[328,3092,814],{"class":512},[328,3094,554],{"class":512},[328,3096,3097],{"class":860}," 312",[328,3099,566],{"class":512},[328,3101,3102,3104,3106,3108,3110,3113],{"class":330,"line":1713},[328,3103,901],{"class":512},[328,3105,1062],{"class":436},[328,3107,814],{"class":512},[328,3109,554],{"class":512},[328,3111,3112],{"class":860}," 8200",[328,3114,566],{"class":512},[328,3116,3117,3119,3121,3123,3125],{"class":330,"line":1718},[328,3118,901],{"class":512},[328,3120,1079],{"class":436},[328,3122,814],{"class":512},[328,3124,554],{"class":512},[328,3126,3127],{"class":860}," 146\n",[328,3129,3131],{"class":330,"line":3130},25,[328,3132,1092],{"class":512},[328,3134,3136],{"class":330,"line":3135},26,[328,3137,1098],{"class":512},[1252,3139,3141],{"id":3140},"rag-embed-generate","RAG (embed + generate)",[307,3143,3144,3145,3147],{},"Use ",[310,3146,1239],{}," for embedding calls. They use a different model type that cannot be wrapped with middleware:",[318,3149,3152],{"className":483,"code":3150,"filename":3151,"language":486,"meta":324,"style":324},"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({\n    usage,\n    model: 'text-embedding-3-small',\n    dimensions: 1536,\n  })\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",[310,3153,3154,3177,3195,3213,3217,3239,3255,3271,3275,3301,3328,3340,3346,3359,3366,3380,3392,3398,3402,3422,3426,3442,3466,3484,3490,3494,3512],{"__ignoreMap":324},[328,3155,3156,3158,3160,3163,3165,3167,3169,3171,3173,3175],{"class":330,"line":331},[328,3157,615],{"class":493},[328,3159,618],{"class":512},[328,3161,3162],{"class":504}," embed",[328,3164,1413],{"class":512},[328,3166,2043],{"class":504},[328,3168,624],{"class":512},[328,3170,627],{"class":493},[328,3172,557],{"class":512},[328,3174,890],{"class":439},[328,3176,635],{"class":512},[328,3178,3179,3181,3183,3185,3187,3189,3191,3193],{"class":330,"line":337},[328,3180,615],{"class":493},[328,3182,618],{"class":512},[328,3184,621],{"class":504},[328,3186,624],{"class":512},[328,3188,627],{"class":493},[328,3190,557],{"class":512},[328,3192,632],{"class":439},[328,3194,635],{"class":512},[328,3196,3197,3199,3201,3203,3205,3207,3209,3211],{"class":330,"line":344},[328,3198,615],{"class":493},[328,3200,618],{"class":512},[328,3202,644],{"class":504},[328,3204,624],{"class":512},[328,3206,627],{"class":493},[328,3208,557],{"class":512},[328,3210,312],{"class":439},[328,3212,635],{"class":512},[328,3214,3215],{"class":330,"line":350},[328,3216,341],{"emptyLinePlaceholder":340},[328,3218,3219,3221,3223,3225,3227,3229,3231,3233,3235,3237],{"class":330,"line":356},[328,3220,494],{"class":493},[328,3222,497],{"class":493},[328,3224,501],{"class":500},[328,3226,505],{"class":504},[328,3228,509],{"class":508},[328,3230,513],{"class":512},[328,3232,517],{"class":516},[328,3234,520],{"class":512},[328,3236,523],{"class":508},[328,3238,526],{"class":512},[328,3240,3241,3243,3245,3247,3249,3251,3253],{"class":330,"line":362},[328,3242,531],{"class":508},[328,3244,687],{"class":504},[328,3246,537],{"class":512},[328,3248,621],{"class":500},[328,3250,505],{"class":543},[328,3252,517],{"class":504},[328,3254,581],{"class":543},[328,3256,3257,3259,3261,3263,3265,3267,3269],{"class":330,"line":368},[328,3258,531],{"class":508},[328,3260,704],{"class":504},[328,3262,537],{"class":512},[328,3264,644],{"class":500},[328,3266,505],{"class":543},[328,3268,713],{"class":504},[328,3270,581],{"class":543},[328,3272,3273],{"class":330,"line":374},[328,3274,341],{"emptyLinePlaceholder":340},[328,3276,3277,3279,3281,3284,3286,3289,3291,3293,3295,3297,3299],{"class":330,"line":380},[328,3278,531],{"class":508},[328,3280,618],{"class":512},[328,3282,3283],{"class":504}," embedding",[328,3285,1413],{"class":512},[328,3287,3288],{"class":504}," usage",[328,3290,624],{"class":512},[328,3292,537],{"class":512},[328,3294,1847],{"class":493},[328,3296,3162],{"class":500},[328,3298,505],{"class":543},[328,3300,546],{"class":512},[328,3302,3303,3305,3307,3310,3312,3315,3317,3319,3322,3324,3326],{"class":330,"line":386},[328,3304,551],{"class":543},[328,3306,554],{"class":512},[328,3308,3309],{"class":504}," openai",[328,3311,591],{"class":512},[328,3313,3314],{"class":500},"embedding",[328,3316,505],{"class":543},[328,3318,563],{"class":512},[328,3320,3321],{"class":439},"text-embedding-3-small",[328,3323,563],{"class":512},[328,3325,520],{"class":543},[328,3327,566],{"class":512},[328,3329,3330,3333,3335,3338],{"class":330,"line":392},[328,3331,3332],{"class":543},"    value",[328,3334,554],{"class":512},[328,3336,3337],{"class":504}," query",[328,3339,566],{"class":512},[328,3341,3342,3344],{"class":330,"line":398},[328,3343,578],{"class":512},[328,3345,581],{"class":543},[328,3347,3348,3351,3353,3355,3357],{"class":330,"line":403},[328,3349,3350],{"class":504},"  ai",[328,3352,591],{"class":512},[328,3354,1239],{"class":500},[328,3356,505],{"class":543},[328,3358,546],{"class":512},[328,3360,3361,3364],{"class":330,"line":409},[328,3362,3363],{"class":504},"    usage",[328,3365,566],{"class":512},[328,3367,3368,3370,3372,3374,3376,3378],{"class":330,"line":1040},[328,3369,551],{"class":543},[328,3371,554],{"class":512},[328,3373,557],{"class":512},[328,3375,3321],{"class":439},[328,3377,563],{"class":512},[328,3379,566],{"class":512},[328,3381,3382,3385,3387,3390],{"class":330,"line":1057},[328,3383,3384],{"class":543},"    dimensions",[328,3386,554],{"class":512},[328,3388,3389],{"class":860}," 1536",[328,3391,566],{"class":512},[328,3393,3394,3396],{"class":330,"line":1074},[328,3395,578],{"class":512},[328,3397,581],{"class":543},[328,3399,3400],{"class":330,"line":1089},[328,3401,341],{"emptyLinePlaceholder":340},[328,3403,3404,3406,3409,3411,3413,3416,3418,3420],{"class":330,"line":1095},[328,3405,531],{"class":508},[328,3407,3408],{"class":504}," docs",[328,3410,537],{"class":512},[328,3412,1847],{"class":493},[328,3414,3415],{"class":500}," findSimilar",[328,3417,505],{"class":543},[328,3419,3314],{"class":504},[328,3421,581],{"class":543},[328,3423,3424],{"class":330,"line":1636},[328,3425,341],{"emptyLinePlaceholder":340},[328,3427,3428,3430,3432,3434,3436,3438,3440],{"class":330,"line":1646},[328,3429,531],{"class":508},[328,3431,534],{"class":504},[328,3433,537],{"class":512},[328,3435,1847],{"class":493},[328,3437,2043],{"class":500},[328,3439,505],{"class":543},[328,3441,546],{"class":512},[328,3443,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464],{"class":330,"line":1681},[328,3445,551],{"class":543},[328,3447,554],{"class":512},[328,3449,704],{"class":504},[328,3451,591],{"class":512},[328,3453,746],{"class":500},[328,3455,505],{"class":543},[328,3457,563],{"class":512},[328,3459,560],{"class":439},[328,3461,563],{"class":512},[328,3463,520],{"class":543},[328,3465,566],{"class":512},[328,3467,3468,3470,3472,3475,3477,3480,3482],{"class":330,"line":1713},[328,3469,2178],{"class":543},[328,3471,554],{"class":512},[328,3473,3474],{"class":500}," buildPrompt",[328,3476,505],{"class":543},[328,3478,3479],{"class":504},"docs",[328,3481,520],{"class":543},[328,3483,566],{"class":512},[328,3485,3486,3488],{"class":330,"line":1718},[328,3487,578],{"class":512},[328,3489,581],{"class":543},[328,3491,3492],{"class":330,"line":3130},[328,3493,341],{"emptyLinePlaceholder":340},[328,3495,3496,3498,3500,3502,3504,3506,3508,3510],{"class":330,"line":3135},[328,3497,586],{"class":493},[328,3499,618],{"class":512},[328,3501,1966],{"class":543},[328,3503,554],{"class":512},[328,3505,534],{"class":504},[328,3507,591],{"class":512},[328,3509,1988],{"class":504},[328,3511,1584],{"class":512},[328,3513,3515,3517],{"class":330,"line":3514},27,[328,3516,602],{"class":512},[328,3518,581],{"class":504},[307,3520,3521,3522,3525],{},"For ",[310,3523,3524],{},"embedMany",", pass the batch count:",[318,3527,3529],{"className":483,"code":3528,"language":486,"meta":324,"style":324},"const { embeddings, usage } = await embedMany({\n  model: openai.embedding('text-embedding-3-small'),\n  values: documents,\n})\nai.captureEmbed({ usage, model: 'text-embedding-3-small', count: documents.length })\n",[310,3530,3531,3558,3583,3595,3601],{"__ignoreMap":324},[328,3532,3533,3535,3537,3540,3542,3545,3547,3549,3551,3554,3556],{"class":330,"line":331},[328,3534,1399],{"class":508},[328,3536,618],{"class":512},[328,3538,3539],{"class":504}," embeddings",[328,3541,1413],{"class":512},[328,3543,3544],{"class":504}," usage ",[328,3546,602],{"class":512},[328,3548,537],{"class":512},[328,3550,1847],{"class":493},[328,3552,3553],{"class":500}," embedMany",[328,3555,505],{"class":504},[328,3557,546],{"class":512},[328,3559,3560,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581],{"class":330,"line":337},[328,3561,3562],{"class":543},"  model",[328,3564,554],{"class":512},[328,3566,3309],{"class":504},[328,3568,591],{"class":512},[328,3570,3314],{"class":500},[328,3572,505],{"class":504},[328,3574,563],{"class":512},[328,3576,3321],{"class":439},[328,3578,563],{"class":512},[328,3580,520],{"class":504},[328,3582,566],{"class":512},[328,3584,3585,3588,3590,3593],{"class":330,"line":344},[328,3586,3587],{"class":543},"  values",[328,3589,554],{"class":512},[328,3591,3592],{"class":504}," documents",[328,3594,566],{"class":512},[328,3596,3597,3599],{"class":330,"line":350},[328,3598,602],{"class":512},[328,3600,581],{"class":504},[328,3602,3603,3605,3607,3609,3611,3613,3615,3617,3620,3622,3624,3626,3628,3630,3633,3635,3637,3639,3642,3644],{"class":330,"line":356},[328,3604,890],{"class":504},[328,3606,591],{"class":512},[328,3608,1239],{"class":500},[328,3610,505],{"class":504},[328,3612,1875],{"class":512},[328,3614,3288],{"class":504},[328,3616,1413],{"class":512},[328,3618,3619],{"class":543}," model",[328,3621,554],{"class":512},[328,3623,557],{"class":512},[328,3625,3321],{"class":439},[328,3627,563],{"class":512},[328,3629,1413],{"class":512},[328,3631,3632],{"class":543}," count",[328,3634,554],{"class":512},[328,3636,3592],{"class":504},[328,3638,591],{"class":512},[328,3640,3641],{"class":504},"length ",[328,3643,602],{"class":512},[328,3645,581],{"class":504},[1252,3647,3649],{"id":3648},"multiple-models","Multiple models",[307,3651,3652,3653,3655,3656,3659],{},"Wrap each model separately, they share the same accumulator. When multiple models are used, the wide event includes both ",[310,3654,920],{}," (last model) and ",[310,3657,3658],{},"models"," (all unique models):",[422,3661,3662,3814],{},[318,3663,3665],{"className":483,"code":3664,"filename":1386,"language":486,"meta":324,"style":324},"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",[310,3666,3667,3680,3684,3710,3735,3739,3777],{"__ignoreMap":324},[328,3668,3669,3671,3673,3675,3677],{"class":330,"line":331},[328,3670,1399],{"class":508},[328,3672,1402],{"class":504},[328,3674,1405],{"class":512},[328,3676,644],{"class":500},[328,3678,3679],{"class":504},"(log)\n",[328,3681,3682],{"class":330,"line":337},[328,3683,341],{"emptyLinePlaceholder":340},[328,3685,3686,3688,3691,3693,3695,3697,3699,3701,3703,3706,3708],{"class":330,"line":344},[328,3687,1399],{"class":508},[328,3689,3690],{"class":504}," fast ",[328,3692,1405],{"class":512},[328,3694,704],{"class":504},[328,3696,591],{"class":512},[328,3698,746],{"class":500},[328,3700,505],{"class":504},[328,3702,563],{"class":512},[328,3704,3705],{"class":439},"anthropic\u002Fclaude-haiku-4.5",[328,3707,563],{"class":512},[328,3709,581],{"class":504},[328,3711,3712,3714,3717,3719,3721,3723,3725,3727,3729,3731,3733],{"class":330,"line":350},[328,3713,1399],{"class":508},[328,3715,3716],{"class":504}," smart ",[328,3718,1405],{"class":512},[328,3720,704],{"class":504},[328,3722,591],{"class":512},[328,3724,746],{"class":500},[328,3726,505],{"class":504},[328,3728,563],{"class":512},[328,3730,560],{"class":439},[328,3732,563],{"class":512},[328,3734,581],{"class":504},[328,3736,3737],{"class":330,"line":356},[328,3738,341],{"emptyLinePlaceholder":340},[328,3740,3741,3743,3746,3748,3750,3752,3754,3756,3758,3760,3763,3765,3768,3770,3773,3775],{"class":330,"line":362},[328,3742,1399],{"class":508},[328,3744,3745],{"class":504}," classification ",[328,3747,1405],{"class":512},[328,3749,1847],{"class":493},[328,3751,2043],{"class":500},[328,3753,505],{"class":504},[328,3755,1875],{"class":512},[328,3757,3619],{"class":543},[328,3759,554],{"class":512},[328,3761,3762],{"class":504}," fast",[328,3764,1413],{"class":512},[328,3766,3767],{"class":543}," prompt",[328,3769,554],{"class":512},[328,3771,3772],{"class":504}," classifyPrompt ",[328,3774,602],{"class":512},[328,3776,581],{"class":504},[328,3778,3779,3781,3784,3786,3788,3790,3792,3794,3796,3798,3801,3803,3805,3807,3810,3812],{"class":330,"line":368},[328,3780,1399],{"class":508},[328,3782,3783],{"class":504}," response ",[328,3785,1405],{"class":512},[328,3787,1847],{"class":493},[328,3789,2043],{"class":500},[328,3791,505],{"class":504},[328,3793,1875],{"class":512},[328,3795,3619],{"class":543},[328,3797,554],{"class":512},[328,3799,3800],{"class":504}," smart",[328,3802,1413],{"class":512},[328,3804,3767],{"class":543},[328,3806,554],{"class":512},[328,3808,3809],{"class":504}," detailedPrompt ",[328,3811,602],{"class":512},[328,3813,581],{"class":504},[318,3815,3817],{"className":794,"code":3816,"filename":796,"language":797,"meta":324,"style":324},"{\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",[310,3818,3819,3823,3835,3850,3868,3898,3916,3931,3945,3958,3962],{"__ignoreMap":324},[328,3820,3821],{"class":330,"line":331},[328,3822,546],{"class":512},[328,3824,3825,3827,3829,3831,3833],{"class":330,"line":337},[328,3826,808],{"class":512},[328,3828,890],{"class":508},[328,3830,814],{"class":512},[328,3832,554],{"class":512},[328,3834,526],{"class":512},[328,3836,3837,3839,3841,3843,3845,3848],{"class":330,"line":344},[328,3838,901],{"class":512},[328,3840,904],{"class":436},[328,3842,814],{"class":512},[328,3844,554],{"class":512},[328,3846,3847],{"class":860}," 2",[328,3849,566],{"class":512},[328,3851,3852,3854,3856,3858,3860,3862,3864,3866],{"class":330,"line":350},[328,3853,901],{"class":512},[328,3855,920],{"class":436},[328,3857,814],{"class":512},[328,3859,554],{"class":512},[328,3861,819],{"class":512},[328,3863,929],{"class":439},[328,3865,814],{"class":512},[328,3867,566],{"class":512},[328,3869,3870,3872,3874,3876,3878,3880,3882,3885,3887,3889,3891,3893,3895],{"class":330,"line":356},[328,3871,901],{"class":512},[328,3873,3658],{"class":436},[328,3875,814],{"class":512},[328,3877,554],{"class":512},[328,3879,2950],{"class":512},[328,3881,814],{"class":512},[328,3883,3884],{"class":439},"claude-haiku-4.5",[328,3886,814],{"class":512},[328,3888,1413],{"class":512},[328,3890,819],{"class":512},[328,3892,929],{"class":439},[328,3894,814],{"class":512},[328,3896,3897],{"class":512},"],\n",[328,3899,3900,3902,3904,3906,3908,3910,3912,3914],{"class":330,"line":362},[328,3901,901],{"class":512},[328,3903,940],{"class":436},[328,3905,814],{"class":512},[328,3907,554],{"class":512},[328,3909,819],{"class":512},[328,3911,949],{"class":439},[328,3913,814],{"class":512},[328,3915,566],{"class":512},[328,3917,3918,3920,3922,3924,3926,3929],{"class":330,"line":368},[328,3919,901],{"class":512},[328,3921,960],{"class":436},[328,3923,814],{"class":512},[328,3925,554],{"class":512},[328,3927,3928],{"class":860}," 450",[328,3930,566],{"class":512},[328,3932,3933,3935,3937,3939,3941,3943],{"class":330,"line":374},[328,3934,901],{"class":512},[328,3936,976],{"class":436},[328,3938,814],{"class":512},[328,3940,554],{"class":512},[328,3942,2937],{"class":860},[328,3944,566],{"class":512},[328,3946,3947,3949,3951,3953,3955],{"class":330,"line":380},[328,3948,901],{"class":512},[328,3950,992],{"class":436},[328,3952,814],{"class":512},[328,3954,554],{"class":512},[328,3956,3957],{"class":860}," 750\n",[328,3959,3960],{"class":330,"line":386},[328,3961,1092],{"class":512},[328,3963,3964],{"class":330,"line":392},[328,3965,1098],{"class":512},[1252,3967,3969],{"id":3968},"model-object-support","Model object support",[307,3971,3972,3975],{},[310,3973,3974],{},"wrap()"," also accepts model objects from provider SDKs if you prefer explicit imports:",[318,3977,3979],{"className":483,"code":3978,"filename":1386,"language":486,"meta":324,"style":324},"import { anthropic } from '@ai-sdk\u002Fanthropic'\n\nconst model = ai.wrap(anthropic('claude-sonnet-4.6'))\n",[310,3980,3981,4001,4005],{"__ignoreMap":324},[328,3982,3983,3985,3987,3990,3992,3994,3996,3999],{"class":330,"line":331},[328,3984,615],{"class":493},[328,3986,618],{"class":512},[328,3988,3989],{"class":504}," anthropic",[328,3991,624],{"class":512},[328,3993,627],{"class":493},[328,3995,557],{"class":512},[328,3997,3998],{"class":439},"@ai-sdk\u002Fanthropic",[328,4000,635],{"class":512},[328,4002,4003],{"class":330,"line":337},[328,4004,341],{"emptyLinePlaceholder":340},[328,4006,4007,4009,4012,4014,4016,4018,4020,4022,4024,4026,4028,4030,4032],{"class":330,"line":344},[328,4008,1399],{"class":508},[328,4010,4011],{"class":504}," model ",[328,4013,1405],{"class":512},[328,4015,704],{"class":504},[328,4017,591],{"class":512},[328,4019,746],{"class":500},[328,4021,505],{"class":504},[328,4023,949],{"class":500},[328,4025,505],{"class":504},[328,4027,563],{"class":512},[328,4029,929],{"class":439},[328,4031,563],{"class":512},[328,4033,4034],{"class":504},"))\n",[414,4036,4038],{"id":4037},"accessing-metadata-in-your-code","Accessing Metadata in Your Code",[307,4040,4041],{},"The wide event already contains the full metadata object, but you often want the same data inside your handler — to persist it, surface it to end-users, bill against it, or stream incremental progress to the client.",[307,4043,4044,4046],{},[310,4045,1111],{}," exposes three methods for that, with no need to touch internal state:",[1252,4048,4050,4052],{"id":4049},"getmetadata-final-snapshot",[310,4051,1187],{}," — final snapshot",[307,4054,4055,4056,4058,4059,4061,4062,554],{},"Returns a structured ",[310,4057,1193],{}," object that mirrors the ",[310,4060,890],{}," field on the wide event. Safe to call at any point, including after the run completes or inside the AI SDK's ",[310,4063,1200],{},[318,4065,4067],{"className":483,"code":4066,"filename":1386,"language":486,"meta":324,"style":324},"import { useLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\nimport { generateText } from 'ai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log, {\n    cost: { 'claude-sonnet-4.6': { input: 3, output: 15 } },\n  })\n\n  await generateText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    prompt: 'Summarize this document',\n  })\n\n  const metadata = ai.getMetadata()\n\n  await db.aiRuns.insert({\n    userId: event.context.userId,\n    model: metadata.model,\n    inputTokens: metadata.inputTokens,\n    outputTokens: metadata.outputTokens,\n    estimatedCost: metadata.estimatedCost,\n    finishReason: metadata.finishReason,\n    responseId: metadata.responseId,\n  })\n\n  return { ok: true }\n})\n",[310,4068,4069,4087,4105,4123,4127,4149,4165,4183,4220,4226,4230,4241,4265,4279,4285,4289,4307,4311,4332,4354,4368,4383,4398,4414,4429,4444,4450,4454,4470],{"__ignoreMap":324},[328,4070,4071,4073,4075,4077,4079,4081,4083,4085],{"class":330,"line":331},[328,4072,615],{"class":493},[328,4074,618],{"class":512},[328,4076,621],{"class":504},[328,4078,624],{"class":512},[328,4080,627],{"class":493},[328,4082,557],{"class":512},[328,4084,632],{"class":439},[328,4086,635],{"class":512},[328,4088,4089,4091,4093,4095,4097,4099,4101,4103],{"class":330,"line":337},[328,4090,615],{"class":493},[328,4092,618],{"class":512},[328,4094,644],{"class":504},[328,4096,624],{"class":512},[328,4098,627],{"class":493},[328,4100,557],{"class":512},[328,4102,312],{"class":439},[328,4104,635],{"class":512},[328,4106,4107,4109,4111,4113,4115,4117,4119,4121],{"class":330,"line":344},[328,4108,615],{"class":493},[328,4110,618],{"class":512},[328,4112,2043],{"class":504},[328,4114,624],{"class":512},[328,4116,627],{"class":493},[328,4118,557],{"class":512},[328,4120,890],{"class":439},[328,4122,635],{"class":512},[328,4124,4125],{"class":330,"line":350},[328,4126,341],{"emptyLinePlaceholder":340},[328,4128,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147],{"class":330,"line":356},[328,4130,494],{"class":493},[328,4132,497],{"class":493},[328,4134,501],{"class":500},[328,4136,505],{"class":504},[328,4138,509],{"class":508},[328,4140,513],{"class":512},[328,4142,517],{"class":516},[328,4144,520],{"class":512},[328,4146,523],{"class":508},[328,4148,526],{"class":512},[328,4150,4151,4153,4155,4157,4159,4161,4163],{"class":330,"line":362},[328,4152,531],{"class":508},[328,4154,687],{"class":504},[328,4156,537],{"class":512},[328,4158,621],{"class":500},[328,4160,505],{"class":543},[328,4162,517],{"class":504},[328,4164,581],{"class":543},[328,4166,4167,4169,4171,4173,4175,4177,4179,4181],{"class":330,"line":368},[328,4168,531],{"class":508},[328,4170,704],{"class":504},[328,4172,537],{"class":512},[328,4174,644],{"class":500},[328,4176,505],{"class":543},[328,4178,713],{"class":504},[328,4180,1413],{"class":512},[328,4182,526],{"class":512},[328,4184,4185,4188,4190,4192,4194,4196,4198,4200,4202,4204,4206,4208,4210,4212,4214,4216,4218],{"class":330,"line":374},[328,4186,4187],{"class":543},"    cost",[328,4189,554],{"class":512},[328,4191,618],{"class":512},[328,4193,557],{"class":512},[328,4195,929],{"class":543},[328,4197,563],{"class":512},[328,4199,554],{"class":512},[328,4201,618],{"class":512},[328,4203,1660],{"class":543},[328,4205,554],{"class":512},[328,4207,1665],{"class":860},[328,4209,1413],{"class":512},[328,4211,1670],{"class":543},[328,4213,554],{"class":512},[328,4215,1675],{"class":860},[328,4217,624],{"class":512},[328,4219,1678],{"class":512},[328,4221,4222,4224],{"class":330,"line":380},[328,4223,578],{"class":512},[328,4225,581],{"class":543},[328,4227,4228],{"class":330,"line":386},[328,4229,341],{"emptyLinePlaceholder":340},[328,4231,4232,4235,4237,4239],{"class":330,"line":392},[328,4233,4234],{"class":493},"  await",[328,4236,2043],{"class":500},[328,4238,505],{"class":543},[328,4240,546],{"class":512},[328,4242,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261,4263],{"class":330,"line":398},[328,4244,551],{"class":543},[328,4246,554],{"class":512},[328,4248,704],{"class":504},[328,4250,591],{"class":512},[328,4252,746],{"class":500},[328,4254,505],{"class":543},[328,4256,563],{"class":512},[328,4258,560],{"class":439},[328,4260,563],{"class":512},[328,4262,520],{"class":543},[328,4264,566],{"class":512},[328,4266,4267,4269,4271,4273,4275,4277],{"class":330,"line":403},[328,4268,2178],{"class":543},[328,4270,554],{"class":512},[328,4272,557],{"class":512},[328,4274,2185],{"class":439},[328,4276,563],{"class":512},[328,4278,566],{"class":512},[328,4280,4281,4283],{"class":330,"line":409},[328,4282,578],{"class":512},[328,4284,581],{"class":543},[328,4286,4287],{"class":330,"line":1040},[328,4288,341],{"emptyLinePlaceholder":340},[328,4290,4291,4293,4296,4298,4300,4302,4305],{"class":330,"line":1057},[328,4292,531],{"class":508},[328,4294,4295],{"class":504}," metadata",[328,4297,537],{"class":512},[328,4299,704],{"class":504},[328,4301,591],{"class":512},[328,4303,4304],{"class":500},"getMetadata",[328,4306,597],{"class":543},[328,4308,4309],{"class":330,"line":1074},[328,4310,341],{"emptyLinePlaceholder":340},[328,4312,4313,4315,4318,4320,4323,4325,4328,4330],{"class":330,"line":1089},[328,4314,4234],{"class":493},[328,4316,4317],{"class":504}," db",[328,4319,591],{"class":512},[328,4321,4322],{"class":504},"aiRuns",[328,4324,591],{"class":512},[328,4326,4327],{"class":500},"insert",[328,4329,505],{"class":543},[328,4331,546],{"class":512},[328,4333,4334,4337,4339,4342,4344,4347,4349,4352],{"class":330,"line":1095},[328,4335,4336],{"class":543},"    userId",[328,4338,554],{"class":512},[328,4340,4341],{"class":504}," event",[328,4343,591],{"class":512},[328,4345,4346],{"class":504},"context",[328,4348,591],{"class":512},[328,4350,4351],{"class":504},"userId",[328,4353,566],{"class":512},[328,4355,4356,4358,4360,4362,4364,4366],{"class":330,"line":1636},[328,4357,551],{"class":543},[328,4359,554],{"class":512},[328,4361,4295],{"class":504},[328,4363,591],{"class":512},[328,4365,920],{"class":504},[328,4367,566],{"class":512},[328,4369,4370,4373,4375,4377,4379,4381],{"class":330,"line":1646},[328,4371,4372],{"class":543},"    inputTokens",[328,4374,554],{"class":512},[328,4376,4295],{"class":504},[328,4378,591],{"class":512},[328,4380,960],{"class":504},[328,4382,566],{"class":512},[328,4384,4385,4388,4390,4392,4394,4396],{"class":330,"line":1681},[328,4386,4387],{"class":543},"    outputTokens",[328,4389,554],{"class":512},[328,4391,4295],{"class":504},[328,4393,591],{"class":512},[328,4395,976],{"class":504},[328,4397,566],{"class":512},[328,4399,4400,4403,4405,4407,4409,4412],{"class":330,"line":1713},[328,4401,4402],{"class":543},"    estimatedCost",[328,4404,554],{"class":512},[328,4406,4295],{"class":504},[328,4408,591],{"class":512},[328,4410,4411],{"class":504},"estimatedCost",[328,4413,566],{"class":512},[328,4415,4416,4419,4421,4423,4425,4427],{"class":330,"line":1718},[328,4417,4418],{"class":543},"    finishReason",[328,4420,554],{"class":512},[328,4422,4295],{"class":504},[328,4424,591],{"class":512},[328,4426,1024],{"class":504},[328,4428,566],{"class":512},[328,4430,4431,4434,4436,4438,4440,4442],{"class":330,"line":3130},[328,4432,4433],{"class":543},"    responseId",[328,4435,554],{"class":512},[328,4437,4295],{"class":504},[328,4439,591],{"class":512},[328,4441,2868],{"class":504},[328,4443,566],{"class":512},[328,4445,4446,4448],{"class":330,"line":3135},[328,4447,578],{"class":512},[328,4449,581],{"class":543},[328,4451,4452],{"class":330,"line":3514},[328,4453,341],{"emptyLinePlaceholder":340},[328,4455,4457,4459,4461,4464,4466,4468],{"class":330,"line":4456},28,[328,4458,586],{"class":493},[328,4460,618],{"class":512},[328,4462,4463],{"class":543}," ok",[328,4465,554],{"class":512},[328,4467,1424],{"class":1423},[328,4469,1584],{"class":512},[328,4471,4473,4475],{"class":330,"line":4472},29,[328,4474,602],{"class":512},[328,4476,581],{"class":504},[307,4478,4479],{},"The snapshot is a fresh copy: mutating it never affects the underlying state or subsequent calls.",[1252,4481,4483,4485],{"id":4482},"getestimatedcost-quick-cost-check",[310,4484,1212],{}," — quick cost check",[307,4487,4488,4489,4491,4492,1219,4494,4496],{},"Convenience for ",[310,4490,1226],{},". Returns the cost in dollars, or ",[310,4493,1218],{},[310,4495,1222],{}," map was provided or the model is not in the map.",[318,4498,4500],{"className":483,"code":4499,"language":486,"meta":324,"style":324},"const ai = createAILogger(log, {\n  cost: { 'claude-sonnet-4.6': { input: 3, output: 15 } },\n})\n\nawait generateText({ model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'), prompt })\n\nconst cost = ai.getEstimatedCost()\nconsole.log(`This call cost $${cost?.toFixed(4)}`)\n",[310,4501,4502,4518,4554,4560,4564,4604,4608,4626],{"__ignoreMap":324},[328,4503,4504,4506,4508,4510,4512,4514,4516],{"class":330,"line":331},[328,4505,1399],{"class":508},[328,4507,1402],{"class":504},[328,4509,1405],{"class":512},[328,4511,644],{"class":500},[328,4513,1410],{"class":504},[328,4515,1413],{"class":512},[328,4517,526],{"class":512},[328,4519,4520,4522,4524,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552],{"class":330,"line":337},[328,4521,1639],{"class":543},[328,4523,554],{"class":512},[328,4525,618],{"class":512},[328,4527,557],{"class":512},[328,4529,929],{"class":543},[328,4531,563],{"class":512},[328,4533,554],{"class":512},[328,4535,618],{"class":512},[328,4537,1660],{"class":543},[328,4539,554],{"class":512},[328,4541,1665],{"class":860},[328,4543,1413],{"class":512},[328,4545,1670],{"class":543},[328,4547,554],{"class":512},[328,4549,1675],{"class":860},[328,4551,624],{"class":512},[328,4553,1678],{"class":512},[328,4555,4556,4558],{"class":330,"line":344},[328,4557,602],{"class":512},[328,4559,581],{"class":504},[328,4561,4562],{"class":330,"line":350},[328,4563,341],{"emptyLinePlaceholder":340},[328,4565,4566,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4600,4602],{"class":330,"line":356},[328,4567,4568],{"class":493},"await",[328,4570,2043],{"class":500},[328,4572,505],{"class":504},[328,4574,1875],{"class":512},[328,4576,3619],{"class":543},[328,4578,554],{"class":512},[328,4580,704],{"class":504},[328,4582,591],{"class":512},[328,4584,746],{"class":500},[328,4586,505],{"class":504},[328,4588,563],{"class":512},[328,4590,560],{"class":439},[328,4592,563],{"class":512},[328,4594,520],{"class":504},[328,4596,1413],{"class":512},[328,4598,4599],{"class":504}," prompt ",[328,4601,602],{"class":512},[328,4603,581],{"class":504},[328,4605,4606],{"class":330,"line":362},[328,4607,341],{"emptyLinePlaceholder":340},[328,4609,4610,4612,4615,4617,4619,4621,4624],{"class":330,"line":368},[328,4611,1399],{"class":508},[328,4613,4614],{"class":504}," cost ",[328,4616,1405],{"class":512},[328,4618,704],{"class":504},[328,4620,591],{"class":512},[328,4622,4623],{"class":500},"getEstimatedCost",[328,4625,597],{"class":504},[328,4627,4628,4631,4633,4635,4637,4640,4643,4646,4648,4651,4654,4656,4659,4661,4664],{"class":330,"line":374},[328,4629,4630],{"class":504},"console",[328,4632,591],{"class":512},[328,4634,713],{"class":500},[328,4636,505],{"class":504},[328,4638,4639],{"class":512},"`",[328,4641,4642],{"class":439},"This call cost $",[328,4644,4645],{"class":512},"${",[328,4647,1222],{"class":504},[328,4649,4650],{"class":512},"?.",[328,4652,4653],{"class":500},"toFixed",[328,4655,505],{"class":504},[328,4657,4658],{"class":860},"4",[328,4660,520],{"class":504},[328,4662,4663],{"class":512},"}`",[328,4665,581],{"class":504},[1252,4667,4669,4671],{"id":4668},"onupdatecallback-incremental-updates",[310,4670,1233],{}," — incremental updates",[307,4673,4674],{},"Subscribe to metadata updates. The callback fires every time the underlying state flushes:",[4676,4677,4678,4682,4688,4691],"ul",{},[4679,4680,4681],"li",{},"Once per step in multi-step agent runs",[4679,4683,4684,4685,4687],{},"Once per ",[310,4686,1239],{}," call",[4679,4689,4690],{},"On model errors",[4679,4692,4693,4694,1244,4696],{},"On ",[310,4695,1243],{},[310,4697,1200],{},[307,4699,4700],{},"Each invocation receives a fresh snapshot. Returns an unsubscribe function. Subscriber errors are isolated and never break the AI flow.",[318,4702,4704],{"className":483,"code":4703,"filename":2234,"language":486,"meta":324,"style":324},"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\n  ai.onUpdate((metadata) => {\n    pushToClient(event, {\n      type: 'ai-progress',\n      step: metadata.steps,\n      tokens: metadata.totalTokens,\n      cost: metadata.estimatedCost,\n    })\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({ agent, uiMessages: messages })\n})\n",[310,4705,4706,4732,4750,4768,4772,4794,4810,4832,4848,4852,4874,4887,4903,4918,4933,4948,4955,4961,4965,4981,5005,5021,5037,5043,5047,5072],{"__ignoreMap":324},[328,4707,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726,4728,4730],{"class":330,"line":331},[328,4709,615],{"class":493},[328,4711,618],{"class":512},[328,4713,2245],{"class":504},[328,4715,1413],{"class":512},[328,4717,2250],{"class":504},[328,4719,1413],{"class":512},[328,4721,2255],{"class":504},[328,4723,624],{"class":512},[328,4725,627],{"class":493},[328,4727,557],{"class":512},[328,4729,890],{"class":439},[328,4731,635],{"class":512},[328,4733,4734,4736,4738,4740,4742,4744,4746,4748],{"class":330,"line":337},[328,4735,615],{"class":493},[328,4737,618],{"class":512},[328,4739,621],{"class":504},[328,4741,624],{"class":512},[328,4743,627],{"class":493},[328,4745,557],{"class":512},[328,4747,632],{"class":439},[328,4749,635],{"class":512},[328,4751,4752,4754,4756,4758,4760,4762,4764,4766],{"class":330,"line":344},[328,4753,615],{"class":493},[328,4755,618],{"class":512},[328,4757,644],{"class":504},[328,4759,624],{"class":512},[328,4761,627],{"class":493},[328,4763,557],{"class":512},[328,4765,312],{"class":439},[328,4767,635],{"class":512},[328,4769,4770],{"class":330,"line":350},[328,4771,341],{"emptyLinePlaceholder":340},[328,4773,4774,4776,4778,4780,4782,4784,4786,4788,4790,4792],{"class":330,"line":356},[328,4775,494],{"class":493},[328,4777,497],{"class":493},[328,4779,501],{"class":500},[328,4781,505],{"class":504},[328,4783,509],{"class":508},[328,4785,513],{"class":512},[328,4787,517],{"class":516},[328,4789,520],{"class":512},[328,4791,523],{"class":508},[328,4793,526],{"class":512},[328,4795,4796,4798,4800,4802,4804,4806,4808],{"class":330,"line":362},[328,4797,531],{"class":508},[328,4799,687],{"class":504},[328,4801,537],{"class":512},[328,4803,621],{"class":500},[328,4805,505],{"class":543},[328,4807,517],{"class":504},[328,4809,581],{"class":543},[328,4811,4812,4814,4816,4818,4820,4822,4824,4826,4828,4830],{"class":330,"line":368},[328,4813,531],{"class":508},[328,4815,618],{"class":512},[328,4817,1840],{"class":504},[328,4819,624],{"class":512},[328,4821,537],{"class":512},[328,4823,1847],{"class":493},[328,4825,1850],{"class":500},[328,4827,505],{"class":543},[328,4829,517],{"class":504},[328,4831,581],{"class":543},[328,4833,4834,4836,4838,4840,4842,4844,4846],{"class":330,"line":374},[328,4835,531],{"class":508},[328,4837,704],{"class":504},[328,4839,537],{"class":512},[328,4841,644],{"class":500},[328,4843,505],{"class":543},[328,4845,713],{"class":504},[328,4847,581],{"class":543},[328,4849,4850],{"class":330,"line":380},[328,4851,341],{"emptyLinePlaceholder":340},[328,4853,4854,4856,4858,4861,4863,4865,4868,4870,4872],{"class":330,"line":386},[328,4855,3350],{"class":504},[328,4857,591],{"class":512},[328,4859,4860],{"class":500},"onUpdate",[328,4862,505],{"class":543},[328,4864,505],{"class":512},[328,4866,4867],{"class":516},"metadata",[328,4869,520],{"class":512},[328,4871,523],{"class":508},[328,4873,526],{"class":512},[328,4875,4876,4879,4881,4883,4885],{"class":330,"line":392},[328,4877,4878],{"class":500},"    pushToClient",[328,4880,505],{"class":543},[328,4882,517],{"class":504},[328,4884,1413],{"class":512},[328,4886,526],{"class":512},[328,4888,4889,4892,4894,4896,4899,4901],{"class":330,"line":398},[328,4890,4891],{"class":543},"      type",[328,4893,554],{"class":512},[328,4895,557],{"class":512},[328,4897,4898],{"class":439},"ai-progress",[328,4900,563],{"class":512},[328,4902,566],{"class":512},[328,4904,4905,4908,4910,4912,4914,4916],{"class":330,"line":403},[328,4906,4907],{"class":543},"      step",[328,4909,554],{"class":512},[328,4911,4295],{"class":504},[328,4913,591],{"class":512},[328,4915,2584],{"class":504},[328,4917,566],{"class":512},[328,4919,4920,4923,4925,4927,4929,4931],{"class":330,"line":409},[328,4921,4922],{"class":543},"      tokens",[328,4924,554],{"class":512},[328,4926,4295],{"class":504},[328,4928,591],{"class":512},[328,4930,992],{"class":504},[328,4932,566],{"class":512},[328,4934,4935,4938,4940,4942,4944,4946],{"class":330,"line":1040},[328,4936,4937],{"class":543},"      cost",[328,4939,554],{"class":512},[328,4941,4295],{"class":504},[328,4943,591],{"class":512},[328,4945,4411],{"class":504},[328,4947,566],{"class":512},[328,4949,4950,4953],{"class":330,"line":1057},[328,4951,4952],{"class":512},"    }",[328,4954,581],{"class":543},[328,4956,4957,4959],{"class":330,"line":1074},[328,4958,578],{"class":512},[328,4960,581],{"class":543},[328,4962,4963],{"class":330,"line":1089},[328,4964,341],{"emptyLinePlaceholder":340},[328,4966,4967,4969,4971,4973,4975,4977,4979],{"class":330,"line":1095},[328,4968,531],{"class":508},[328,4970,2417],{"class":504},[328,4972,537],{"class":512},[328,4974,2422],{"class":512},[328,4976,2245],{"class":500},[328,4978,505],{"class":543},[328,4980,546],{"class":512},[328,4982,4983,4985,4987,4989,4991,4993,4995,4997,4999,5001,5003],{"class":330,"line":1636},[328,4984,551],{"class":543},[328,4986,554],{"class":512},[328,4988,704],{"class":504},[328,4990,591],{"class":512},[328,4992,746],{"class":500},[328,4994,505],{"class":543},[328,4996,563],{"class":512},[328,4998,560],{"class":439},[328,5000,563],{"class":512},[328,5002,520],{"class":543},[328,5004,566],{"class":512},[328,5006,5007,5009,5011,5013,5015,5017,5019],{"class":330,"line":1646},[328,5008,2457],{"class":543},[328,5010,554],{"class":512},[328,5012,618],{"class":512},[328,5014,2464],{"class":504},[328,5016,1413],{"class":512},[328,5018,2469],{"class":504},[328,5020,1678],{"class":512},[328,5022,5023,5025,5027,5029,5031,5033,5035],{"class":330,"line":1681},[328,5024,2476],{"class":543},[328,5026,554],{"class":512},[328,5028,2255],{"class":500},[328,5030,505],{"class":543},[328,5032,2485],{"class":860},[328,5034,520],{"class":543},[328,5036,566],{"class":512},[328,5038,5039,5041],{"class":330,"line":1713},[328,5040,578],{"class":512},[328,5042,581],{"class":543},[328,5044,5045],{"class":330,"line":1718},[328,5046,341],{"emptyLinePlaceholder":340},[328,5048,5049,5051,5053,5055,5057,5059,5061,5064,5066,5068,5070],{"class":330,"line":3130},[328,5050,586],{"class":493},[328,5052,2250],{"class":500},[328,5054,505],{"class":543},[328,5056,1875],{"class":512},[328,5058,2417],{"class":504},[328,5060,1413],{"class":512},[328,5062,5063],{"class":543}," uiMessages",[328,5065,554],{"class":512},[328,5067,1840],{"class":504},[328,5069,624],{"class":512},[328,5071,581],{"class":543},[328,5073,5074,5076],{"class":330,"line":3135},[328,5075,602],{"class":512},[328,5077,581],{"class":504},[307,5079,5080],{},"For one-off cleanup:",[318,5082,5084],{"className":483,"code":5083,"language":486,"meta":324,"style":324},"const off = ai.onUpdate((metadata) => { \u002F* ... *\u002F })\n\u002F\u002F later\noff()\n",[310,5085,5086,5120,5125],{"__ignoreMap":324},[328,5087,5088,5090,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5116,5118],{"class":330,"line":331},[328,5089,1399],{"class":508},[328,5091,5092],{"class":504}," off ",[328,5094,1405],{"class":512},[328,5096,704],{"class":504},[328,5098,591],{"class":512},[328,5100,4860],{"class":500},[328,5102,505],{"class":504},[328,5104,505],{"class":512},[328,5106,4867],{"class":516},[328,5108,520],{"class":512},[328,5110,523],{"class":508},[328,5112,618],{"class":512},[328,5114,5115],{"class":1393}," \u002F* ... *\u002F",[328,5117,624],{"class":512},[328,5119,581],{"class":504},[328,5121,5122],{"class":330,"line":337},[328,5123,5124],{"class":1393},"\u002F\u002F later\n",[328,5126,5127,5130],{"class":330,"line":344},[328,5128,5129],{"class":500},"off",[328,5131,597],{"class":504},[1252,5133,5135,5137],{"id":5134},"aimetadata-shape",[310,5136,1193],{}," shape",[307,5139,5140,5142,5143,5145,5146,5148,5149,5151,5152,5157],{},[310,5141,1193],{}," is a public type alias for the snapshot returned by ",[310,5144,1187],{}," and passed to ",[310,5147,4860],{}," listeners. It has the same shape as the ",[310,5150,890],{}," field on the wide event — see ",[5153,5154,5156],"a",{"href":5155},"#captured-data","Captured Data"," for the full field reference.",[318,5159,5161],{"className":483,"code":5160,"language":486,"meta":324,"style":324},"import type { AIMetadata, AIMetadataListener } from 'evlog\u002Fai'\n\nfunction handleProgress(metadata: AIMetadata) {\n  console.log(`${metadata.calls} calls, $${metadata.estimatedCost ?? 0}`)\n}\n\nconst listener: AIMetadataListener = handleProgress\nai.onUpdate(listener)\n",[310,5162,5163,5190,5194,5214,5258,5262,5266,5282],{"__ignoreMap":324},[328,5164,5165,5167,5170,5172,5175,5177,5180,5182,5184,5186,5188],{"class":330,"line":331},[328,5166,615],{"class":493},[328,5168,5169],{"class":493}," type",[328,5171,618],{"class":512},[328,5173,5174],{"class":504}," AIMetadata",[328,5176,1413],{"class":512},[328,5178,5179],{"class":504}," AIMetadataListener",[328,5181,624],{"class":512},[328,5183,627],{"class":493},[328,5185,557],{"class":512},[328,5187,312],{"class":439},[328,5189,635],{"class":512},[328,5191,5192],{"class":330,"line":337},[328,5193,341],{"emptyLinePlaceholder":340},[328,5195,5196,5199,5202,5204,5206,5208,5210,5212],{"class":330,"line":344},[328,5197,5198],{"class":508},"function",[328,5200,5201],{"class":500}," handleProgress",[328,5203,505],{"class":512},[328,5205,4867],{"class":516},[328,5207,554],{"class":512},[328,5209,5174],{"class":436},[328,5211,520],{"class":512},[328,5213,526],{"class":512},[328,5215,5216,5219,5221,5223,5225,5228,5230,5232,5234,5236,5239,5241,5243,5245,5248,5251,5254,5256],{"class":330,"line":350},[328,5217,5218],{"class":504},"  console",[328,5220,591],{"class":512},[328,5222,713],{"class":500},[328,5224,505],{"class":543},[328,5226,5227],{"class":512},"`${",[328,5229,4867],{"class":504},[328,5231,591],{"class":512},[328,5233,904],{"class":504},[328,5235,602],{"class":512},[328,5237,5238],{"class":439}," calls, $",[328,5240,4645],{"class":512},[328,5242,4867],{"class":504},[328,5244,591],{"class":512},[328,5246,5247],{"class":504},"estimatedCost ",[328,5249,5250],{"class":512},"??",[328,5252,5253],{"class":860}," 0",[328,5255,4663],{"class":512},[328,5257,581],{"class":543},[328,5259,5260],{"class":330,"line":356},[328,5261,1098],{"class":512},[328,5263,5264],{"class":330,"line":362},[328,5265,341],{"emptyLinePlaceholder":340},[328,5267,5268,5270,5273,5275,5277,5279],{"class":330,"line":368},[328,5269,1399],{"class":508},[328,5271,5272],{"class":504}," listener",[328,5274,554],{"class":512},[328,5276,5179],{"class":436},[328,5278,537],{"class":512},[328,5280,5281],{"class":504}," handleProgress\n",[328,5283,5284,5286,5288,5290],{"class":330,"line":374},[328,5285,890],{"class":504},[328,5287,591],{"class":512},[328,5289,4860],{"class":500},[328,5291,5292],{"class":504},"(listener)\n",[414,5294,5296],{"id":5295},"telemetry-integration","Telemetry Integration",[307,5298,5299,5300,5303,5304,5307],{},"For deeper observability — tool execution timing, success\u002Ffailure tracking, and total generation wall time — use ",[310,5301,5302],{},"createEvlogIntegration()",". It implements the AI SDK's ",[310,5305,5306],{},"TelemetryIntegration"," interface and captures data that middleware alone cannot see.",[1252,5309,5311],{"id":5310},"combined-with-middleware-recommended","Combined with middleware (recommended)",[307,5313,5314,5315,5317,5318,5321],{},"When passed an ",[310,5316,1111],{},", the integration shares its accumulator. Both paths write to the same ",[310,5319,5320],{},"ai.*"," field:",[318,5323,5325],{"className":483,"code":5324,"filename":2234,"language":486,"meta":324,"style":324},"import { generateText } from 'ai'\nimport { createAILogger, createEvlogIntegration } 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    tools: { getWeather, searchDB },\n    experimental_telemetry: {\n      isEnabled: true,\n      integrations: [createEvlogIntegration(ai)],\n    },\n  })\n\n  return { text: result.text }\n})\n",[310,5326,5327,5345,5368,5372,5394,5410,5426,5430,5446,5470,5488,5497,5508,5528,5532,5538,5542,5560],{"__ignoreMap":324},[328,5328,5329,5331,5333,5335,5337,5339,5341,5343],{"class":330,"line":331},[328,5330,615],{"class":493},[328,5332,618],{"class":512},[328,5334,2043],{"class":504},[328,5336,624],{"class":512},[328,5338,627],{"class":493},[328,5340,557],{"class":512},[328,5342,890],{"class":439},[328,5344,635],{"class":512},[328,5346,5347,5349,5351,5353,5355,5358,5360,5362,5364,5366],{"class":330,"line":337},[328,5348,615],{"class":493},[328,5350,618],{"class":512},[328,5352,644],{"class":504},[328,5354,1413],{"class":512},[328,5356,5357],{"class":504}," createEvlogIntegration",[328,5359,624],{"class":512},[328,5361,627],{"class":493},[328,5363,557],{"class":512},[328,5365,312],{"class":439},[328,5367,635],{"class":512},[328,5369,5370],{"class":330,"line":344},[328,5371,341],{"emptyLinePlaceholder":340},[328,5373,5374,5376,5378,5380,5382,5384,5386,5388,5390,5392],{"class":330,"line":350},[328,5375,494],{"class":493},[328,5377,497],{"class":493},[328,5379,501],{"class":500},[328,5381,505],{"class":504},[328,5383,509],{"class":508},[328,5385,513],{"class":512},[328,5387,517],{"class":516},[328,5389,520],{"class":512},[328,5391,523],{"class":508},[328,5393,526],{"class":512},[328,5395,5396,5398,5400,5402,5404,5406,5408],{"class":330,"line":356},[328,5397,531],{"class":508},[328,5399,687],{"class":504},[328,5401,537],{"class":512},[328,5403,621],{"class":500},[328,5405,505],{"class":543},[328,5407,517],{"class":504},[328,5409,581],{"class":543},[328,5411,5412,5414,5416,5418,5420,5422,5424],{"class":330,"line":362},[328,5413,531],{"class":508},[328,5415,704],{"class":504},[328,5417,537],{"class":512},[328,5419,644],{"class":500},[328,5421,505],{"class":543},[328,5423,713],{"class":504},[328,5425,581],{"class":543},[328,5427,5428],{"class":330,"line":368},[328,5429,341],{"emptyLinePlaceholder":340},[328,5431,5432,5434,5436,5438,5440,5442,5444],{"class":330,"line":374},[328,5433,531],{"class":508},[328,5435,534],{"class":504},[328,5437,537],{"class":512},[328,5439,1847],{"class":493},[328,5441,2043],{"class":500},[328,5443,505],{"class":543},[328,5445,546],{"class":512},[328,5447,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466,5468],{"class":330,"line":380},[328,5449,551],{"class":543},[328,5451,554],{"class":512},[328,5453,704],{"class":504},[328,5455,591],{"class":512},[328,5457,746],{"class":500},[328,5459,505],{"class":543},[328,5461,563],{"class":512},[328,5463,560],{"class":439},[328,5465,563],{"class":512},[328,5467,520],{"class":543},[328,5469,566],{"class":512},[328,5471,5472,5474,5476,5478,5481,5483,5486],{"class":330,"line":386},[328,5473,2457],{"class":543},[328,5475,554],{"class":512},[328,5477,618],{"class":512},[328,5479,5480],{"class":504}," getWeather",[328,5482,1413],{"class":512},[328,5484,5485],{"class":504}," searchDB",[328,5487,1678],{"class":512},[328,5489,5490,5493,5495],{"class":330,"line":392},[328,5491,5492],{"class":543},"    experimental_telemetry",[328,5494,554],{"class":512},[328,5496,526],{"class":512},[328,5498,5499,5502,5504,5506],{"class":330,"line":398},[328,5500,5501],{"class":543},"      isEnabled",[328,5503,554],{"class":512},[328,5505,1424],{"class":1423},[328,5507,566],{"class":512},[328,5509,5510,5513,5515,5517,5519,5521,5523,5526],{"class":330,"line":403},[328,5511,5512],{"class":543},"      integrations",[328,5514,554],{"class":512},[328,5516,2950],{"class":543},[328,5518,1243],{"class":500},[328,5520,505],{"class":543},[328,5522,890],{"class":504},[328,5524,5525],{"class":543},")]",[328,5527,566],{"class":512},[328,5529,5530],{"class":330,"line":409},[328,5531,1597],{"class":512},[328,5533,5534,5536],{"class":330,"line":1040},[328,5535,578],{"class":512},[328,5537,581],{"class":543},[328,5539,5540],{"class":330,"line":1057},[328,5541,341],{"emptyLinePlaceholder":340},[328,5543,5544,5546,5548,5550,5552,5554,5556,5558],{"class":330,"line":1074},[328,5545,586],{"class":493},[328,5547,618],{"class":512},[328,5549,1966],{"class":543},[328,5551,554],{"class":512},[328,5553,534],{"class":504},[328,5555,591],{"class":512},[328,5557,1988],{"class":504},[328,5559,1584],{"class":512},[328,5561,5562,5564],{"class":330,"line":1089},[328,5563,602],{"class":512},[328,5565,581],{"class":504},[307,5567,5568],{},"Your wide event now includes tool execution details:",[318,5570,5572],{"className":794,"code":5571,"filename":796,"language":797,"meta":324,"style":324},"{\n  \"ai\": {\n    \"calls\": 2,\n    \"steps\": 2,\n    \"model\": \"claude-sonnet-4.6\",\n    \"provider\": \"anthropic\",\n    \"inputTokens\": 3500,\n    \"outputTokens\": 800,\n    \"totalTokens\": 4300,\n    \"toolCalls\": [\"getWeather\", \"searchDB\"],\n    \"tools\": [\n      { \"name\": \"getWeather\", \"durationMs\": 150, \"success\": true },\n      { \"name\": \"searchDB\", \"durationMs\": 45, \"success\": true }\n    ],\n    \"totalDurationMs\": 2340,\n    \"msToFirstChunk\": 180,\n    \"msToFinish\": 2100,\n    \"tokensPerSecond\": 380\n  }\n}\n",[310,5573,5574,5578,5590,5604,5618,5636,5654,5669,5684,5699,5729,5742,5789,5834,5838,5854,5869,5884,5897,5901],{"__ignoreMap":324},[328,5575,5576],{"class":330,"line":331},[328,5577,546],{"class":512},[328,5579,5580,5582,5584,5586,5588],{"class":330,"line":337},[328,5581,808],{"class":512},[328,5583,890],{"class":508},[328,5585,814],{"class":512},[328,5587,554],{"class":512},[328,5589,526],{"class":512},[328,5591,5592,5594,5596,5598,5600,5602],{"class":330,"line":344},[328,5593,901],{"class":512},[328,5595,904],{"class":436},[328,5597,814],{"class":512},[328,5599,554],{"class":512},[328,5601,3847],{"class":860},[328,5603,566],{"class":512},[328,5605,5606,5608,5610,5612,5614,5616],{"class":330,"line":350},[328,5607,901],{"class":512},[328,5609,2584],{"class":436},[328,5611,814],{"class":512},[328,5613,554],{"class":512},[328,5615,3847],{"class":860},[328,5617,566],{"class":512},[328,5619,5620,5622,5624,5626,5628,5630,5632,5634],{"class":330,"line":356},[328,5621,901],{"class":512},[328,5623,920],{"class":436},[328,5625,814],{"class":512},[328,5627,554],{"class":512},[328,5629,819],{"class":512},[328,5631,929],{"class":439},[328,5633,814],{"class":512},[328,5635,566],{"class":512},[328,5637,5638,5640,5642,5644,5646,5648,5650,5652],{"class":330,"line":362},[328,5639,901],{"class":512},[328,5641,940],{"class":436},[328,5643,814],{"class":512},[328,5645,554],{"class":512},[328,5647,819],{"class":512},[328,5649,949],{"class":439},[328,5651,814],{"class":512},[328,5653,566],{"class":512},[328,5655,5656,5658,5660,5662,5664,5667],{"class":330,"line":368},[328,5657,901],{"class":512},[328,5659,960],{"class":436},[328,5661,814],{"class":512},[328,5663,554],{"class":512},[328,5665,5666],{"class":860}," 3500",[328,5668,566],{"class":512},[328,5670,5671,5673,5675,5677,5679,5682],{"class":330,"line":374},[328,5672,901],{"class":512},[328,5674,976],{"class":436},[328,5676,814],{"class":512},[328,5678,554],{"class":512},[328,5680,5681],{"class":860}," 800",[328,5683,566],{"class":512},[328,5685,5686,5688,5690,5692,5694,5697],{"class":330,"line":380},[328,5687,901],{"class":512},[328,5689,992],{"class":436},[328,5691,814],{"class":512},[328,5693,554],{"class":512},[328,5695,5696],{"class":860}," 4300",[328,5698,566],{"class":512},[328,5700,5701,5703,5705,5707,5709,5711,5713,5716,5718,5720,5722,5725,5727],{"class":330,"line":386},[328,5702,901],{"class":512},[328,5704,1297],{"class":436},[328,5706,814],{"class":512},[328,5708,554],{"class":512},[328,5710,2950],{"class":512},[328,5712,814],{"class":512},[328,5714,5715],{"class":439},"getWeather",[328,5717,814],{"class":512},[328,5719,1413],{"class":512},[328,5721,819],{"class":512},[328,5723,5724],{"class":439},"searchDB",[328,5726,814],{"class":512},[328,5728,3897],{"class":512},[328,5730,5731,5733,5736,5738,5740],{"class":330,"line":392},[328,5732,901],{"class":512},[328,5734,5735],{"class":436},"tools",[328,5737,814],{"class":512},[328,5739,554],{"class":512},[328,5741,2703],{"class":512},[328,5743,5744,5746,5748,5750,5752,5754,5756,5758,5760,5762,5764,5767,5769,5771,5774,5776,5778,5781,5783,5785,5787],{"class":330,"line":398},[328,5745,2708],{"class":512},[328,5747,819],{"class":512},[328,5749,2713],{"class":860},[328,5751,814],{"class":512},[328,5753,554],{"class":512},[328,5755,819],{"class":512},[328,5757,5715],{"class":439},[328,5759,814],{"class":512},[328,5761,1413],{"class":512},[328,5763,819],{"class":512},[328,5765,5766],{"class":860},"durationMs",[328,5768,814],{"class":512},[328,5770,554],{"class":512},[328,5772,5773],{"class":860}," 150",[328,5775,1413],{"class":512},[328,5777,819],{"class":512},[328,5779,5780],{"class":860},"success",[328,5782,814],{"class":512},[328,5784,554],{"class":512},[328,5786,1424],{"class":512},[328,5788,1678],{"class":512},[328,5790,5791,5793,5795,5797,5799,5801,5803,5805,5807,5809,5811,5813,5815,5817,5820,5822,5824,5826,5828,5830,5832],{"class":330,"line":403},[328,5792,2708],{"class":512},[328,5794,819],{"class":512},[328,5796,2713],{"class":860},[328,5798,814],{"class":512},[328,5800,554],{"class":512},[328,5802,819],{"class":512},[328,5804,5724],{"class":439},[328,5806,814],{"class":512},[328,5808,1413],{"class":512},[328,5810,819],{"class":512},[328,5812,5766],{"class":860},[328,5814,814],{"class":512},[328,5816,554],{"class":512},[328,5818,5819],{"class":860}," 45",[328,5821,1413],{"class":512},[328,5823,819],{"class":512},[328,5825,5780],{"class":860},[328,5827,814],{"class":512},[328,5829,554],{"class":512},[328,5831,1424],{"class":512},[328,5833,1584],{"class":512},[328,5835,5836],{"class":330,"line":409},[328,5837,2861],{"class":512},[328,5839,5840,5842,5845,5847,5849,5852],{"class":330,"line":1040},[328,5841,901],{"class":512},[328,5843,5844],{"class":436},"totalDurationMs",[328,5846,814],{"class":512},[328,5848,554],{"class":512},[328,5850,5851],{"class":860}," 2340",[328,5853,566],{"class":512},[328,5855,5856,5858,5860,5862,5864,5867],{"class":330,"line":1057},[328,5857,901],{"class":512},[328,5859,1045],{"class":436},[328,5861,814],{"class":512},[328,5863,554],{"class":512},[328,5865,5866],{"class":860}," 180",[328,5868,566],{"class":512},[328,5870,5871,5873,5875,5877,5879,5882],{"class":330,"line":1074},[328,5872,901],{"class":512},[328,5874,1062],{"class":436},[328,5876,814],{"class":512},[328,5878,554],{"class":512},[328,5880,5881],{"class":860}," 2100",[328,5883,566],{"class":512},[328,5885,5886,5888,5890,5892,5894],{"class":330,"line":1089},[328,5887,901],{"class":512},[328,5889,1079],{"class":436},[328,5891,814],{"class":512},[328,5893,554],{"class":512},[328,5895,5896],{"class":860}," 380\n",[328,5898,5899],{"class":330,"line":1095},[328,5900,1092],{"class":512},[328,5902,5903],{"class":330,"line":1636},[328,5904,1098],{"class":512},[1252,5906,5908],{"id":5907},"standalone-without-middleware","Standalone (without middleware)",[307,5910,5911],{},"If your model is already wrapped (e.g. by another middleware), pass the request logger directly:",[318,5913,5915],{"className":483,"code":5914,"filename":1386,"language":486,"meta":324,"style":324},"import { createEvlogIntegration } from 'evlog\u002Fai'\n\nconst integration = createEvlogIntegration(log)\n\nconst result = await generateText({\n  model: somePreWrappedModel,\n  experimental_telemetry: {\n    isEnabled: true,\n    integrations: [integration],\n  },\n})\n",[310,5916,5917,5935,5939,5952,5956,5973,5984,5993,6004,6016,6020],{"__ignoreMap":324},[328,5918,5919,5921,5923,5925,5927,5929,5931,5933],{"class":330,"line":331},[328,5920,615],{"class":493},[328,5922,618],{"class":512},[328,5924,5357],{"class":504},[328,5926,624],{"class":512},[328,5928,627],{"class":493},[328,5930,557],{"class":512},[328,5932,312],{"class":439},[328,5934,635],{"class":512},[328,5936,5937],{"class":330,"line":337},[328,5938,341],{"emptyLinePlaceholder":340},[328,5940,5941,5943,5946,5948,5950],{"class":330,"line":344},[328,5942,1399],{"class":508},[328,5944,5945],{"class":504}," integration ",[328,5947,1405],{"class":512},[328,5949,5357],{"class":500},[328,5951,3679],{"class":504},[328,5953,5954],{"class":330,"line":350},[328,5955,341],{"emptyLinePlaceholder":340},[328,5957,5958,5960,5963,5965,5967,5969,5971],{"class":330,"line":356},[328,5959,1399],{"class":508},[328,5961,5962],{"class":504}," result ",[328,5964,1405],{"class":512},[328,5966,1847],{"class":493},[328,5968,2043],{"class":500},[328,5970,505],{"class":504},[328,5972,546],{"class":512},[328,5974,5975,5977,5979,5982],{"class":330,"line":362},[328,5976,3562],{"class":543},[328,5978,554],{"class":512},[328,5980,5981],{"class":504}," somePreWrappedModel",[328,5983,566],{"class":512},[328,5985,5986,5989,5991],{"class":330,"line":368},[328,5987,5988],{"class":543},"  experimental_telemetry",[328,5990,554],{"class":512},[328,5992,526],{"class":512},[328,5994,5995,5998,6000,6002],{"class":330,"line":374},[328,5996,5997],{"class":543},"    isEnabled",[328,5999,554],{"class":512},[328,6001,1424],{"class":1423},[328,6003,566],{"class":512},[328,6005,6006,6009,6011,6014],{"class":330,"line":380},[328,6007,6008],{"class":543},"    integrations",[328,6010,554],{"class":512},[328,6012,6013],{"class":504}," [integration]",[328,6015,566],{"class":512},[328,6017,6018],{"class":330,"line":386},[328,6019,1602],{"class":512},[328,6021,6022,6024],{"class":330,"line":392},[328,6023,602],{"class":512},[328,6025,581],{"class":504},[1252,6027,6029],{"id":6028},"what-the-integration-captures","What the integration captures",[1114,6031,6032,6044],{},[1117,6033,6034],{},[1120,6035,6036,6039,6042],{},[1123,6037,6038],{},"Data",[1123,6040,6041],{},"Source",[1123,6043,1128],{},[1130,6045,6046,6071],{},[1120,6047,6048,6053,6058],{},[1135,6049,6050],{},[310,6051,6052],{},"ai.tools[]",[1135,6054,6055],{},[310,6056,6057],{},"onToolCallFinish",[1135,6059,6060,6061,1154,6063,1154,6065,1158,6067,6070],{},"Per-tool ",[310,6062,2713],{},[310,6064,5766],{},[310,6066,5780],{},[310,6068,6069],{},"error"," (if failed)",[1120,6072,6073,6078,6086],{},[1135,6074,6075],{},[310,6076,6077],{},"ai.totalDurationMs",[1135,6079,6080,6083,6084],{},[310,6081,6082],{},"onStart"," → ",[310,6085,1200],{},[1135,6087,6088],{},"Total wall time from generation start to completion",[307,6090,6091],{},"The middleware captures tokens, model info, and streaming metrics. The integration captures tool execution timing. Together, they give you complete AI observability.",[414,6093,5156],{"id":6094},"captured-data",[1114,6096,6097,6108],{},[1117,6098,6099],{},[1120,6100,6101,6104,6106],{},[1123,6102,6103],{},"Wide event field",[1123,6105,6041],{},[1123,6107,1128],{},[1130,6109,6110,6123,6138,6151,6175,6190,6205,6220,6235,6250,6265,6285,6308,6326,6339,6352,6365,6377,6389,6402,6421,6436,6453],{},[1120,6111,6112,6117,6120],{},[1135,6113,6114],{},[310,6115,6116],{},"ai.calls",[1135,6118,6119],{},"Call count",[1135,6121,6122],{},"Number of AI calls in this request",[1120,6124,6125,6130,6135],{},[1135,6126,6127],{},[310,6128,6129],{},"ai.model",[1135,6131,6132],{},[310,6133,6134],{},"response.modelId",[1135,6136,6137],{},"Model that served the response",[1120,6139,6140,6145,6148],{},[1135,6141,6142],{},[310,6143,6144],{},"ai.models",[1135,6146,6147],{},"All model IDs",[1135,6149,6150],{},"Array of all models used (only when > 1)",[1120,6152,6153,6158,6163],{},[1135,6154,6155],{},[310,6156,6157],{},"ai.provider",[1135,6159,6160],{},[310,6161,6162],{},"model.provider",[1135,6164,6165,6166,1154,6168,1154,6171,6174],{},"Provider (",[310,6167,949],{},[310,6169,6170],{},"openai",[310,6172,6173],{},"google",", etc.)",[1120,6176,6177,6182,6187],{},[1135,6178,6179],{},[310,6180,6181],{},"ai.inputTokens",[1135,6183,6184],{},[310,6185,6186],{},"usage.inputTokens.total",[1135,6188,6189],{},"Total input tokens across all calls",[1120,6191,6192,6197,6202],{},[1135,6193,6194],{},[310,6195,6196],{},"ai.outputTokens",[1135,6198,6199],{},[310,6200,6201],{},"usage.outputTokens.total",[1135,6203,6204],{},"Total output tokens across all calls",[1120,6206,6207,6212,6215],{},[1135,6208,6209],{},[310,6210,6211],{},"ai.totalTokens",[1135,6213,6214],{},"Computed",[1135,6216,6217],{},[310,6218,6219],{},"inputTokens + outputTokens",[1120,6221,6222,6227,6232],{},[1135,6223,6224],{},[310,6225,6226],{},"ai.cacheReadTokens",[1135,6228,6229],{},[310,6230,6231],{},"usage.inputTokens.cacheRead",[1135,6233,6234],{},"Tokens served from prompt cache",[1120,6236,6237,6242,6247],{},[1135,6238,6239],{},[310,6240,6241],{},"ai.cacheWriteTokens",[1135,6243,6244],{},[310,6245,6246],{},"usage.inputTokens.cacheWrite",[1135,6248,6249],{},"Tokens written to prompt cache",[1120,6251,6252,6257,6262],{},[1135,6253,6254],{},[310,6255,6256],{},"ai.reasoningTokens",[1135,6258,6259],{},[310,6260,6261],{},"usage.outputTokens.reasoning",[1135,6263,6264],{},"Reasoning tokens (extended thinking)",[1120,6266,6267,6272,6277],{},[1135,6268,6269],{},[310,6270,6271],{},"ai.finishReason",[1135,6273,6274],{},[310,6275,6276],{},"finishReason.unified",[1135,6278,6279,6280,1154,6282,6174],{},"Why generation ended (",[310,6281,1033],{},[310,6283,6284],{},"tool-calls",[1120,6286,6287,6292,6295],{},[1135,6288,6289],{},[310,6290,6291],{},"ai.toolCalls",[1135,6293,6294],{},"Content \u002F stream chunks",[1135,6296,6297,6300,6301,6304,6305,6307],{},[310,6298,6299],{},"string[]"," of tool names by default, or ",[310,6302,6303],{},"Array\u003C{ name, input }>"," when ",[310,6306,1281],{}," is enabled",[1120,6309,6310,6315,6320],{},[1135,6311,6312],{},[310,6313,6314],{},"ai.responseId",[1135,6316,6317],{},[310,6318,6319],{},"response.id",[1135,6321,6322,6323,520],{},"Provider-assigned response ID (e.g. Anthropic's ",[310,6324,6325],{},"msg_...",[1120,6327,6328,6333,6336],{},[1135,6329,6330],{},[310,6331,6332],{},"ai.steps",[1135,6334,6335],{},"Step count",[1135,6337,6338],{},"Number of LLM calls (only when > 1)",[1120,6340,6341,6346,6349],{},[1135,6342,6343],{},[310,6344,6345],{},"ai.stepsUsage",[1135,6347,6348],{},"Per-step accumulation",[1135,6350,6351],{},"Per-step token and tool call breakdown (only when > 1 step)",[1120,6353,6354,6359,6362],{},[1135,6355,6356],{},[310,6357,6358],{},"ai.msToFirstChunk",[1135,6360,6361],{},"Stream timing",[1135,6363,6364],{},"Time to first text chunk (streaming only)",[1120,6366,6367,6372,6374],{},[1135,6368,6369],{},[310,6370,6371],{},"ai.msToFinish",[1135,6373,6361],{},[1135,6375,6376],{},"Total stream duration (streaming only)",[1120,6378,6379,6384,6386],{},[1135,6380,6381],{},[310,6382,6383],{},"ai.tokensPerSecond",[1135,6385,6214],{},[1135,6387,6388],{},"Output tokens per second (streaming only)",[1120,6390,6391,6396,6399],{},[1135,6392,6393],{},[310,6394,6395],{},"ai.error",[1135,6397,6398],{},"Error capture",[1135,6400,6401],{},"Error message if a model call fails",[1120,6403,6404,6409,6413],{},[1135,6405,6406],{},[310,6407,6408],{},"ai.tools",[1135,6410,6411],{},[310,6412,5306],{},[1135,6414,6060,6415,6418,6419,520],{},[310,6416,6417],{},"{ name, durationMs, success, error? }"," (requires ",[310,6420,1243],{},[1120,6422,6423,6427,6431],{},[1135,6424,6425],{},[310,6426,6077],{},[1135,6428,6429],{},[310,6430,5306],{},[1135,6432,6433,6434,520],{},"Total generation wall time (requires ",[310,6435,1243],{},[1120,6437,6438,6443,6447],{},[1135,6439,6440],{},[310,6441,6442],{},"ai.embedding",[1135,6444,6445],{},[310,6446,1239],{},[1135,6448,6449,6452],{},[310,6450,6451],{},"{ model?, tokens, dimensions?, count? }"," — embedding metadata",[1120,6454,6455,6460,6462],{},[1135,6456,6457],{},[310,6458,6459],{},"ai.estimatedCost",[1135,6461,6214],{},[1135,6463,6464,6465,6467],{},"Estimated cost in dollars (requires ",[310,6466,1222],{}," option)",[414,6469,6471],{"id":6470},"composability","Composability",[307,6473,6474,6477,6478,554],{},[310,6475,6476],{},"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 ",[310,6479,6476],{},[318,6481,6483],{"className":483,"code":6482,"filename":1386,"language":486,"meta":324,"style":324},"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",[310,6484,6485,6503,6523,6542,6546,6568,6580,6602],{"__ignoreMap":324},[328,6486,6487,6489,6491,6493,6495,6497,6499,6501],{"class":330,"line":331},[328,6488,615],{"class":493},[328,6490,618],{"class":512},[328,6492,644],{"class":504},[328,6494,624],{"class":512},[328,6496,627],{"class":493},[328,6498,557],{"class":512},[328,6500,312],{"class":439},[328,6502,635],{"class":512},[328,6504,6505,6507,6509,6512,6514,6516,6518,6521],{"class":330,"line":337},[328,6506,615],{"class":493},[328,6508,618],{"class":512},[328,6510,6511],{"class":504}," withSupermemory",[328,6513,624],{"class":512},[328,6515,627],{"class":493},[328,6517,557],{"class":512},[328,6519,6520],{"class":439},"@supermemory\u002Ftools\u002Fai-sdk",[328,6522,635],{"class":512},[328,6524,6525,6527,6529,6532,6534,6536,6538,6540],{"class":330,"line":344},[328,6526,615],{"class":493},[328,6528,618],{"class":512},[328,6530,6531],{"class":504}," createGateway",[328,6533,624],{"class":512},[328,6535,627],{"class":493},[328,6537,557],{"class":512},[328,6539,890],{"class":439},[328,6541,635],{"class":512},[328,6543,6544],{"class":330,"line":350},[328,6545,341],{"emptyLinePlaceholder":340},[328,6547,6548,6550,6553,6555,6557,6559,6561,6564,6566],{"class":330,"line":356},[328,6549,1399],{"class":508},[328,6551,6552],{"class":504}," gateway ",[328,6554,1405],{"class":512},[328,6556,6531],{"class":500},[328,6558,505],{"class":504},[328,6560,1875],{"class":512},[328,6562,6563],{"class":512}," ...",[328,6565,624],{"class":512},[328,6567,581],{"class":504},[328,6569,6570,6572,6574,6576,6578],{"class":330,"line":362},[328,6571,1399],{"class":508},[328,6573,1402],{"class":504},[328,6575,1405],{"class":512},[328,6577,644],{"class":500},[328,6579,3679],{"class":504},[328,6581,6582,6584,6587,6589,6592,6594,6596,6598,6600],{"class":330,"line":368},[328,6583,1399],{"class":508},[328,6585,6586],{"class":504}," base ",[328,6588,1405],{"class":512},[328,6590,6591],{"class":500}," gateway",[328,6593,505],{"class":504},[328,6595,563],{"class":512},[328,6597,560],{"class":439},[328,6599,563],{"class":512},[328,6601,581],{"class":504},[328,6603,6604,6606,6608,6610,6612,6614,6616,6618,6621,6624,6626,6628,6631,6633,6635,6637,6640,6642,6644,6647,6649,6651],{"class":330,"line":374},[328,6605,1399],{"class":508},[328,6607,4011],{"class":504},[328,6609,1405],{"class":512},[328,6611,704],{"class":504},[328,6613,591],{"class":512},[328,6615,746],{"class":500},[328,6617,505],{"class":504},[328,6619,6620],{"class":500},"withSupermemory",[328,6622,6623],{"class":504},"(base",[328,6625,1413],{"class":512},[328,6627,557],{"class":512},[328,6629,6630],{"class":439},"your-org-id",[328,6632,563],{"class":512},[328,6634,1413],{"class":512},[328,6636,618],{"class":512},[328,6638,6639],{"class":543}," mode",[328,6641,554],{"class":512},[328,6643,557],{"class":512},[328,6645,6646],{"class":439},"full",[328,6648,563],{"class":512},[328,6650,624],{"class":512},[328,6652,4034],{"class":504},[307,6654,6655,6656,6659,6660,554],{},"For explicit middleware composition, use ",[310,6657,6658],{},"createAIMiddleware"," to get the raw middleware and compose it yourself via ",[310,6661,6662],{},"wrapLanguageModel",[318,6664,6666],{"className":483,"code":6665,"filename":1386,"language":486,"meta":324,"style":324},"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",[310,6667,6668,6687,6706,6710,6724,6735,6769],{"__ignoreMap":324},[328,6669,6670,6672,6674,6677,6679,6681,6683,6685],{"class":330,"line":331},[328,6671,615],{"class":493},[328,6673,618],{"class":512},[328,6675,6676],{"class":504}," createAIMiddleware",[328,6678,624],{"class":512},[328,6680,627],{"class":493},[328,6682,557],{"class":512},[328,6684,312],{"class":439},[328,6686,635],{"class":512},[328,6688,6689,6691,6693,6696,6698,6700,6702,6704],{"class":330,"line":337},[328,6690,615],{"class":493},[328,6692,618],{"class":512},[328,6694,6695],{"class":504}," wrapLanguageModel",[328,6697,624],{"class":512},[328,6699,627],{"class":493},[328,6701,557],{"class":512},[328,6703,890],{"class":439},[328,6705,635],{"class":512},[328,6707,6708],{"class":330,"line":344},[328,6709,341],{"emptyLinePlaceholder":340},[328,6711,6712,6714,6716,6718,6720,6722],{"class":330,"line":350},[328,6713,1399],{"class":508},[328,6715,4011],{"class":504},[328,6717,1405],{"class":512},[328,6719,6695],{"class":500},[328,6721,505],{"class":504},[328,6723,546],{"class":512},[328,6725,6726,6728,6730,6733],{"class":330,"line":356},[328,6727,3562],{"class":543},[328,6729,554],{"class":512},[328,6731,6732],{"class":504}," base",[328,6734,566],{"class":512},[328,6736,6737,6740,6742,6744,6746,6748,6750,6752,6754,6756,6758,6760,6762,6764,6767],{"class":330,"line":362},[328,6738,6739],{"class":543},"  middleware",[328,6741,554],{"class":512},[328,6743,2950],{"class":504},[328,6745,6658],{"class":500},[328,6747,1410],{"class":504},[328,6749,1413],{"class":512},[328,6751,618],{"class":512},[328,6753,1418],{"class":543},[328,6755,554],{"class":512},[328,6757,1424],{"class":1423},[328,6759,624],{"class":512},[328,6761,520],{"class":504},[328,6763,1413],{"class":512},[328,6765,6766],{"class":504}," otherMiddleware]",[328,6768,566],{"class":512},[328,6770,6771,6773],{"class":330,"line":368},[328,6772,602],{"class":512},[328,6774,581],{"class":504},[307,6776,6777,6779,6780,6783,6784,6786,6787,6789,6790,6792,6793,6795],{},[310,6778,6658],{}," returns the same middleware that ",[310,6781,6782],{},"createAILogger"," uses internally. The difference: ",[310,6785,6658],{}," does not include ",[310,6788,1239],{}," (embedding models don't use middleware). Use ",[310,6791,6782],{}," for the full API, ",[310,6794,6658],{}," when you need explicit middleware ordering.",[414,6797,6799],{"id":6798},"error-handling","Error Handling",[307,6801,6802],{},"If a model call fails, the middleware captures the error into the wide event before re-throwing:",[318,6804,6806],{"className":794,"code":6805,"filename":796,"language":797,"meta":324,"style":324},"{\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",[310,6807,6808,6812,6824,6838,6856,6874,6892,6910,6914],{"__ignoreMap":324},[328,6809,6810],{"class":330,"line":331},[328,6811,546],{"class":512},[328,6813,6814,6816,6818,6820,6822],{"class":330,"line":337},[328,6815,808],{"class":512},[328,6817,890],{"class":508},[328,6819,814],{"class":512},[328,6821,554],{"class":512},[328,6823,526],{"class":512},[328,6825,6826,6828,6830,6832,6834,6836],{"class":330,"line":344},[328,6827,901],{"class":512},[328,6829,904],{"class":436},[328,6831,814],{"class":512},[328,6833,554],{"class":512},[328,6835,911],{"class":860},[328,6837,566],{"class":512},[328,6839,6840,6842,6844,6846,6848,6850,6852,6854],{"class":330,"line":350},[328,6841,901],{"class":512},[328,6843,920],{"class":436},[328,6845,814],{"class":512},[328,6847,554],{"class":512},[328,6849,819],{"class":512},[328,6851,929],{"class":439},[328,6853,814],{"class":512},[328,6855,566],{"class":512},[328,6857,6858,6860,6862,6864,6866,6868,6870,6872],{"class":330,"line":356},[328,6859,901],{"class":512},[328,6861,940],{"class":436},[328,6863,814],{"class":512},[328,6865,554],{"class":512},[328,6867,819],{"class":512},[328,6869,949],{"class":439},[328,6871,814],{"class":512},[328,6873,566],{"class":512},[328,6875,6876,6878,6880,6882,6884,6886,6888,6890],{"class":330,"line":362},[328,6877,901],{"class":512},[328,6879,1024],{"class":436},[328,6881,814],{"class":512},[328,6883,554],{"class":512},[328,6885,819],{"class":512},[328,6887,6069],{"class":439},[328,6889,814],{"class":512},[328,6891,566],{"class":512},[328,6893,6894,6896,6898,6900,6902,6904,6907],{"class":330,"line":368},[328,6895,901],{"class":512},[328,6897,6069],{"class":436},[328,6899,814],{"class":512},[328,6901,554],{"class":512},[328,6903,819],{"class":512},[328,6905,6906],{"class":439},"API rate limit exceeded",[328,6908,6909],{"class":512},"\"\n",[328,6911,6912],{"class":330,"line":374},[328,6913,1092],{"class":512},[328,6915,6916],{"class":330,"line":380},[328,6917,1098],{"class":512},[307,6919,6920],{},"Stream errors (e.g. content filter) are also captured from the stream's error chunks.",[414,6922,6924],{"id":6923},"works-with-all-frameworks","Works With All Frameworks",[307,6926,6927,6929],{},[310,6928,312],{}," works with any framework that evlog supports:",[422,6931,6932,7003,7097,7192,7281,7351],{},[318,6933,6935],{"className":483,"code":6934,"filename":129,"language":486,"meta":324,"style":324},"import { useLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nconst log = useLogger(event)\nconst ai = createAILogger(log)\n",[310,6936,6937,6955,6973,6977,6991],{"__ignoreMap":324},[328,6938,6939,6941,6943,6945,6947,6949,6951,6953],{"class":330,"line":331},[328,6940,615],{"class":493},[328,6942,618],{"class":512},[328,6944,621],{"class":504},[328,6946,624],{"class":512},[328,6948,627],{"class":493},[328,6950,557],{"class":512},[328,6952,632],{"class":439},[328,6954,635],{"class":512},[328,6956,6957,6959,6961,6963,6965,6967,6969,6971],{"class":330,"line":337},[328,6958,615],{"class":493},[328,6960,618],{"class":512},[328,6962,644],{"class":504},[328,6964,624],{"class":512},[328,6966,627],{"class":493},[328,6968,557],{"class":512},[328,6970,312],{"class":439},[328,6972,635],{"class":512},[328,6974,6975],{"class":330,"line":344},[328,6976,341],{"emptyLinePlaceholder":340},[328,6978,6979,6981,6984,6986,6988],{"class":330,"line":350},[328,6980,1399],{"class":508},[328,6982,6983],{"class":504}," log ",[328,6985,1405],{"class":512},[328,6987,621],{"class":500},[328,6989,6990],{"class":504},"(event)\n",[328,6992,6993,6995,6997,6999,7001],{"class":330,"line":356},[328,6994,1399],{"class":508},[328,6996,1402],{"class":504},[328,6998,1405],{"class":512},[328,7000,644],{"class":500},[328,7002,3679],{"class":504},[318,7004,7006],{"className":483,"code":7005,"filename":159,"language":486,"meta":324,"style":324},"import { createAILogger } from 'evlog\u002Fai'\n\napp.post('\u002Fapi\u002Fchat', (req, res) => {\n  const ai = createAILogger(req.log)\n  \u002F\u002F ...\n})\n",[310,7007,7008,7026,7030,7066,7086,7091],{"__ignoreMap":324},[328,7009,7010,7012,7014,7016,7018,7020,7022,7024],{"class":330,"line":331},[328,7011,615],{"class":493},[328,7013,618],{"class":512},[328,7015,644],{"class":504},[328,7017,624],{"class":512},[328,7019,627],{"class":493},[328,7021,557],{"class":512},[328,7023,312],{"class":439},[328,7025,635],{"class":512},[328,7027,7028],{"class":330,"line":337},[328,7029,341],{"emptyLinePlaceholder":340},[328,7031,7032,7035,7037,7040,7042,7044,7046,7048,7050,7052,7055,7057,7060,7062,7064],{"class":330,"line":344},[328,7033,7034],{"class":504},"app",[328,7036,591],{"class":512},[328,7038,7039],{"class":500},"post",[328,7041,505],{"class":504},[328,7043,563],{"class":512},[328,7045,842],{"class":439},[328,7047,563],{"class":512},[328,7049,1413],{"class":512},[328,7051,513],{"class":512},[328,7053,7054],{"class":516},"req",[328,7056,1413],{"class":512},[328,7058,7059],{"class":516}," res",[328,7061,520],{"class":512},[328,7063,523],{"class":508},[328,7065,526],{"class":512},[328,7067,7068,7070,7072,7074,7076,7078,7080,7082,7084],{"class":330,"line":350},[328,7069,531],{"class":508},[328,7071,704],{"class":504},[328,7073,537],{"class":512},[328,7075,644],{"class":500},[328,7077,505],{"class":543},[328,7079,7054],{"class":504},[328,7081,591],{"class":512},[328,7083,713],{"class":504},[328,7085,581],{"class":543},[328,7087,7088],{"class":330,"line":356},[328,7089,7090],{"class":1393},"  \u002F\u002F ...\n",[328,7092,7093,7095],{"class":330,"line":362},[328,7094,602],{"class":512},[328,7096,581],{"class":504},[318,7098,7100],{"className":483,"code":7099,"filename":164,"language":486,"meta":324,"style":324},"import { createAILogger } from 'evlog\u002Fai'\n\napp.post('\u002Fapi\u002Fchat', (c) => {\n  const ai = createAILogger(c.get('log'))\n  \u002F\u002F ...\n})\n",[310,7101,7102,7120,7124,7153,7182,7186],{"__ignoreMap":324},[328,7103,7104,7106,7108,7110,7112,7114,7116,7118],{"class":330,"line":331},[328,7105,615],{"class":493},[328,7107,618],{"class":512},[328,7109,644],{"class":504},[328,7111,624],{"class":512},[328,7113,627],{"class":493},[328,7115,557],{"class":512},[328,7117,312],{"class":439},[328,7119,635],{"class":512},[328,7121,7122],{"class":330,"line":337},[328,7123,341],{"emptyLinePlaceholder":340},[328,7125,7126,7128,7130,7132,7134,7136,7138,7140,7142,7144,7147,7149,7151],{"class":330,"line":344},[328,7127,7034],{"class":504},[328,7129,591],{"class":512},[328,7131,7039],{"class":500},[328,7133,505],{"class":504},[328,7135,563],{"class":512},[328,7137,842],{"class":439},[328,7139,563],{"class":512},[328,7141,1413],{"class":512},[328,7143,513],{"class":512},[328,7145,7146],{"class":516},"c",[328,7148,520],{"class":512},[328,7150,523],{"class":508},[328,7152,526],{"class":512},[328,7154,7155,7157,7159,7161,7163,7165,7167,7169,7172,7174,7176,7178,7180],{"class":330,"line":350},[328,7156,531],{"class":508},[328,7158,704],{"class":504},[328,7160,537],{"class":512},[328,7162,644],{"class":500},[328,7164,505],{"class":543},[328,7166,7146],{"class":504},[328,7168,591],{"class":512},[328,7170,7171],{"class":500},"get",[328,7173,505],{"class":543},[328,7175,563],{"class":512},[328,7177,713],{"class":439},[328,7179,563],{"class":512},[328,7181,4034],{"class":543},[328,7183,7184],{"class":330,"line":356},[328,7185,7090],{"class":1393},[328,7187,7188,7190],{"class":330,"line":362},[328,7189,602],{"class":512},[328,7191,581],{"class":504},[318,7193,7195],{"className":483,"code":7194,"filename":169,"language":486,"meta":324,"style":324},"import { createAILogger } from 'evlog\u002Fai'\n\napp.post('\u002Fapi\u002Fchat', async (request) => {\n  const ai = createAILogger(request.log)\n  \u002F\u002F ...\n})\n",[310,7196,7197,7215,7219,7251,7271,7275],{"__ignoreMap":324},[328,7198,7199,7201,7203,7205,7207,7209,7211,7213],{"class":330,"line":331},[328,7200,615],{"class":493},[328,7202,618],{"class":512},[328,7204,644],{"class":504},[328,7206,624],{"class":512},[328,7208,627],{"class":493},[328,7210,557],{"class":512},[328,7212,312],{"class":439},[328,7214,635],{"class":512},[328,7216,7217],{"class":330,"line":337},[328,7218,341],{"emptyLinePlaceholder":340},[328,7220,7221,7223,7225,7227,7229,7231,7233,7235,7237,7240,7242,7245,7247,7249],{"class":330,"line":344},[328,7222,7034],{"class":504},[328,7224,591],{"class":512},[328,7226,7039],{"class":500},[328,7228,505],{"class":504},[328,7230,563],{"class":512},[328,7232,842],{"class":439},[328,7234,563],{"class":512},[328,7236,1413],{"class":512},[328,7238,7239],{"class":508}," async",[328,7241,513],{"class":512},[328,7243,7244],{"class":516},"request",[328,7246,520],{"class":512},[328,7248,523],{"class":508},[328,7250,526],{"class":512},[328,7252,7253,7255,7257,7259,7261,7263,7265,7267,7269],{"class":330,"line":350},[328,7254,531],{"class":508},[328,7256,704],{"class":504},[328,7258,537],{"class":512},[328,7260,644],{"class":500},[328,7262,505],{"class":543},[328,7264,7244],{"class":504},[328,7266,591],{"class":512},[328,7268,713],{"class":504},[328,7270,581],{"class":543},[328,7272,7273],{"class":330,"line":356},[328,7274,7090],{"class":1393},[328,7276,7277,7279],{"class":330,"line":362},[328,7278,602],{"class":512},[328,7280,581],{"class":504},[318,7282,7284],{"className":483,"code":7283,"filename":154,"language":486,"meta":324,"style":324},"import { useLogger } from 'evlog\u002Fnestjs'\nimport { createAILogger } from 'evlog\u002Fai'\n\nconst log = useLogger()\nconst ai = createAILogger(log)\n",[310,7285,7286,7305,7323,7327,7339],{"__ignoreMap":324},[328,7287,7288,7290,7292,7294,7296,7298,7300,7303],{"class":330,"line":331},[328,7289,615],{"class":493},[328,7291,618],{"class":512},[328,7293,621],{"class":504},[328,7295,624],{"class":512},[328,7297,627],{"class":493},[328,7299,557],{"class":512},[328,7301,7302],{"class":439},"evlog\u002Fnestjs",[328,7304,635],{"class":512},[328,7306,7307,7309,7311,7313,7315,7317,7319,7321],{"class":330,"line":337},[328,7308,615],{"class":493},[328,7310,618],{"class":512},[328,7312,644],{"class":504},[328,7314,624],{"class":512},[328,7316,627],{"class":493},[328,7318,557],{"class":512},[328,7320,312],{"class":439},[328,7322,635],{"class":512},[328,7324,7325],{"class":330,"line":344},[328,7326,341],{"emptyLinePlaceholder":340},[328,7328,7329,7331,7333,7335,7337],{"class":330,"line":350},[328,7330,1399],{"class":508},[328,7332,6983],{"class":504},[328,7334,1405],{"class":512},[328,7336,621],{"class":500},[328,7338,597],{"class":504},[328,7340,7341,7343,7345,7347,7349],{"class":330,"line":356},[328,7342,1399],{"class":508},[328,7344,1402],{"class":504},[328,7346,1405],{"class":512},[328,7348,644],{"class":500},[328,7350,3679],{"class":504},[318,7352,7354],{"className":483,"code":7353,"filename":189,"language":486,"meta":324,"style":324},"import { createLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nconst log = createLogger()\nconst ai = createAILogger(log)\n\u002F\u002F ...\nlog.emit()\n",[310,7355,7356,7375,7393,7397,7409,7421,7426],{"__ignoreMap":324},[328,7357,7358,7360,7362,7365,7367,7369,7371,7373],{"class":330,"line":331},[328,7359,615],{"class":493},[328,7361,618],{"class":512},[328,7363,7364],{"class":504}," createLogger",[328,7366,624],{"class":512},[328,7368,627],{"class":493},[328,7370,557],{"class":512},[328,7372,632],{"class":439},[328,7374,635],{"class":512},[328,7376,7377,7379,7381,7383,7385,7387,7389,7391],{"class":330,"line":337},[328,7378,615],{"class":493},[328,7380,618],{"class":512},[328,7382,644],{"class":504},[328,7384,624],{"class":512},[328,7386,627],{"class":493},[328,7388,557],{"class":512},[328,7390,312],{"class":439},[328,7392,635],{"class":512},[328,7394,7395],{"class":330,"line":344},[328,7396,341],{"emptyLinePlaceholder":340},[328,7398,7399,7401,7403,7405,7407],{"class":330,"line":350},[328,7400,1399],{"class":508},[328,7402,6983],{"class":504},[328,7404,1405],{"class":512},[328,7406,7364],{"class":500},[328,7408,597],{"class":504},[328,7410,7411,7413,7415,7417,7419],{"class":330,"line":356},[328,7412,1399],{"class":508},[328,7414,1402],{"class":504},[328,7416,1405],{"class":512},[328,7418,644],{"class":500},[328,7420,3679],{"class":504},[328,7422,7423],{"class":330,"line":362},[328,7424,7425],{"class":1393},"\u002F\u002F ...\n",[328,7427,7428,7430,7432,7435],{"class":330,"line":368},[328,7429,713],{"class":504},[328,7431,591],{"class":512},[328,7433,7434],{"class":500},"emit",[328,7436,597],{"class":504},[7438,7439,7440],"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":324,"searchDepth":337,"depth":337,"links":7442},[7443,7444,7445,7448,7456,7466,7471,7472,7473,7474],{"id":416,"depth":337,"text":417},{"id":475,"depth":337,"text":20},{"id":1101,"depth":337,"text":1102,"children":7446},[7447],{"id":1254,"depth":344,"text":1255},{"id":1725,"depth":337,"text":1726,"children":7449},[7450,7451,7452,7453,7454,7455],{"id":1729,"depth":344,"text":1157},{"id":2025,"depth":344,"text":1153},{"id":2226,"depth":344,"text":2227},{"id":3140,"depth":344,"text":3141},{"id":3648,"depth":344,"text":3649},{"id":3968,"depth":344,"text":3969},{"id":4037,"depth":337,"text":4038,"children":7457},[7458,7460,7462,7464],{"id":4049,"depth":344,"text":7459},"getMetadata() — final snapshot",{"id":4482,"depth":344,"text":7461},"getEstimatedCost() — quick cost check",{"id":4668,"depth":344,"text":7463},"onUpdate(callback) — incremental updates",{"id":5134,"depth":344,"text":7465},"AIMetadata shape",{"id":5295,"depth":337,"text":5296,"children":7467},[7468,7469,7470],{"id":5310,"depth":344,"text":5311},{"id":5907,"depth":344,"text":5908},{"id":6028,"depth":344,"text":6029},{"id":6094,"depth":337,"text":5156},{"id":6470,"depth":337,"text":6471},{"id":6798,"depth":337,"text":6799},{"id":6923,"depth":337,"text":6924},"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",[7478,7481],{"label":46,"icon":49,"to":47,"color":7479,"variant":7480},"neutral","subtle",{"label":208,"icon":7482,"to":213,"color":7479,"variant":7480},"i-lucide-plug",{},{"icon":64},{"title":61,"description":7475},"X0LSzCPbgFI_S96AD8mxJXMi_kyR7-v52-kJFUEBBXE",[7488,7490],{"title":56,"path":57,"stem":58,"description":7489,"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":66,"path":67,"stem":68,"description":7491,"icon":69,"children":-1},"Automatically identify users on every request. Every wide event includes who made the request — userId, user profile, and session metadata — with zero manual work.",1777048036770]