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