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