[{"data":1,"prerenderedAt":2286},["ShallowReactive",2],{"navigation_docs":3,"-logging-ai-sdk-metadata":454,"-logging-ai-sdk-metadata-surround":2281},[4,35,159,201,289,352,438],{"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,99,127],{"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},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,297,302,307,312,316,321,326,330,334,338,342,347],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"icon":301},"In-process stream","\u002Fbuild-on-top\u002Fin-process-stream","5.build-on-top\u002F1.in-process-stream","i-lucide-radio-tower",{"title":303,"path":304,"stem":305,"icon":306},"Fanout","\u002Fbuild-on-top\u002Ffanout-and-multi-drain","5.build-on-top\u002F10.fanout-and-multi-drain","i-lucide-share-2",{"title":308,"path":309,"stem":310,"icon":311},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F11.identity-headers","i-lucide-fingerprint",{"title":313,"path":314,"stem":315,"icon":288},"Custom framework","\u002Fbuild-on-top\u002Fcustom-framework","5.build-on-top\u002F12.custom-framework",{"title":317,"path":318,"stem":319,"icon":320},"Stream server","\u002Fbuild-on-top\u002Fstream-server","5.build-on-top\u002F2.stream-server","i-lucide-radio",{"title":322,"path":323,"stem":324,"icon":325},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F3.fs-reader","i-lucide-folder-search",{"title":156,"path":327,"stem":328,"icon":329},"\u002Fbuild-on-top\u002Fconsumer-recipes","5.build-on-top\u002F4.consumer-recipes","i-lucide-chef-hat",{"title":331,"path":332,"stem":333,"icon":288},"Plugins","\u002Fbuild-on-top\u002Fplugins","5.build-on-top\u002F5.plugins",{"title":335,"path":336,"stem":337,"icon":28},"Custom enrichers","\u002Fbuild-on-top\u002Fcustom-enrichers","5.build-on-top\u002F6.custom-enrichers",{"title":339,"path":340,"stem":341,"icon":178},"Tail sampling","\u002Fbuild-on-top\u002Ftail-sampling","5.build-on-top\u002F7.tail-sampling",{"title":343,"path":344,"stem":345,"icon":346},"Custom drains","\u002Fbuild-on-top\u002Fcustom-drains","5.build-on-top\u002F8.custom-drains","i-lucide-code-2",{"title":348,"path":349,"stem":350,"icon":351},"Drain pipeline","\u002Fbuild-on-top\u002Fdrain-pipeline","5.build-on-top\u002F9.drain-pipeline","i-lucide-workflow",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Adapters","\u002Fadapters","6.adapters",[357,360,400,415],{"title":41,"path":358,"stem":359,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":361,"path":362,"stem":363,"children":364,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[365,370,375,380,385,390,395],{"title":366,"path":367,"stem":368,"icon":369},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":371,"path":372,"stem":373,"icon":374},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":376,"path":377,"stem":378,"icon":379},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":381,"path":382,"stem":383,"icon":384},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":386,"path":387,"stem":388,"icon":389},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":391,"path":392,"stem":393,"icon":394},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":396,"path":397,"stem":398,"icon":399},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":401,"path":402,"stem":403,"children":404,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[405,410],{"title":406,"path":407,"stem":408,"icon":409},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":411,"path":412,"stem":413,"icon":414},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":416,"path":417,"stem":418,"children":419,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[420,424,429,433],{"title":421,"path":422,"stem":423,"icon":351},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline",{"title":425,"path":426,"stem":427,"icon":428},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":430,"path":431,"stem":432,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":434,"path":435,"stem":436,"icon":437},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":439,"path":440,"stem":441,"children":442,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[443,446,450],{"title":41,"path":444,"stem":445,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":447,"path":448,"stem":449,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":451,"path":452,"stem":453,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":455,"title":456,"body":457,"description":2270,"extension":2271,"links":2272,"meta":2277,"navigation":2278,"path":91,"seo":2279,"stem":92,"__hash__":2280},"docs\u002F2.logging\u002F6.ai-sdk\u002F04.metadata.md","Access Metadata",{"type":458,"value":459,"toc":2259},"minimark",[460,469,475,483,497,1010,1013,1020,1035,1211,1218,1221,1247,1250,1644,1647,1699,1705,1719,1857,1861,1867,2255],[461,462,463,464,468],"p",{},"The wide event already contains the full ",[465,466,467],"code",{},"ai"," metadata, 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.",[461,470,471,474],{},[465,472,473],{},"AILogger"," exposes three methods for that, with no need to touch internal state.",[476,477,479,482],"h2",{"id":478},"getmetadata-final-snapshot",[465,480,481],{},"getMetadata()"," — final snapshot",[461,484,485,486,489,490,492,493,496],{},"Returns a structured ",[465,487,488],{},"AIMetadata"," object that mirrors the ",[465,491,467],{}," field on the wide event. Safe to call at any point, including after the run completes or inside the AI SDK's ",[465,494,495],{},"onFinish",":",[498,499,505],"pre",{"className":500,"code":501,"filename":502,"language":503,"meta":504,"style":504},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","server\u002Fapi\u002Fchat.post.ts","typescript","",[465,506,507,540,561,581,588,624,646,668,714,722,727,740,770,787,794,799,819,824,846,869,885,902,919,936,953,970,977,982,1002],{"__ignoreMap":504},[508,509,512,516,520,524,527,530,533,537],"span",{"class":510,"line":511},"line",1,[508,513,515],{"class":514},"s7zQu","import",[508,517,519],{"class":518},"sMK4o"," {",[508,521,523],{"class":522},"sTEyZ"," useLogger",[508,525,526],{"class":518}," }",[508,528,529],{"class":514}," from",[508,531,532],{"class":518}," '",[508,534,536],{"class":535},"sfazB","evlog",[508,538,539],{"class":518},"'\n",[508,541,543,545,547,550,552,554,556,559],{"class":510,"line":542},2,[508,544,515],{"class":514},[508,546,519],{"class":518},[508,548,549],{"class":522}," createAILogger",[508,551,526],{"class":518},[508,553,529],{"class":514},[508,555,532],{"class":518},[508,557,558],{"class":535},"evlog\u002Fai",[508,560,539],{"class":518},[508,562,564,566,568,571,573,575,577,579],{"class":510,"line":563},3,[508,565,515],{"class":514},[508,567,519],{"class":518},[508,569,570],{"class":522}," generateText",[508,572,526],{"class":518},[508,574,529],{"class":514},[508,576,532],{"class":518},[508,578,467],{"class":535},[508,580,539],{"class":518},[508,582,584],{"class":510,"line":583},4,[508,585,587],{"emptyLinePlaceholder":586},true,"\n",[508,589,591,594,597,601,604,608,611,615,618,621],{"class":510,"line":590},5,[508,592,593],{"class":514},"export",[508,595,596],{"class":514}," default",[508,598,600],{"class":599},"s2Zo4"," defineEventHandler",[508,602,603],{"class":522},"(",[508,605,607],{"class":606},"spNyl","async",[508,609,610],{"class":518}," (",[508,612,614],{"class":613},"sHdIc","event",[508,616,617],{"class":518},")",[508,619,620],{"class":606}," =>",[508,622,623],{"class":518}," {\n",[508,625,627,630,633,636,638,641,643],{"class":510,"line":626},6,[508,628,629],{"class":606},"  const",[508,631,632],{"class":522}," log",[508,634,635],{"class":518}," =",[508,637,523],{"class":599},[508,639,603],{"class":640},"swJcz",[508,642,614],{"class":522},[508,644,645],{"class":640},")\n",[508,647,649,651,654,656,658,660,663,666],{"class":510,"line":648},7,[508,650,629],{"class":606},[508,652,653],{"class":522}," ai",[508,655,635],{"class":518},[508,657,549],{"class":599},[508,659,603],{"class":640},[508,661,662],{"class":522},"log",[508,664,665],{"class":518},",",[508,667,623],{"class":518},[508,669,671,674,676,678,680,683,686,688,690,693,695,699,701,704,706,709,711],{"class":510,"line":670},8,[508,672,673],{"class":640},"    cost",[508,675,496],{"class":518},[508,677,519],{"class":518},[508,679,532],{"class":518},[508,681,682],{"class":640},"claude-sonnet-4.6",[508,684,685],{"class":518},"'",[508,687,496],{"class":518},[508,689,519],{"class":518},[508,691,692],{"class":640}," input",[508,694,496],{"class":518},[508,696,698],{"class":697},"sbssI"," 3",[508,700,665],{"class":518},[508,702,703],{"class":640}," output",[508,705,496],{"class":518},[508,707,708],{"class":697}," 15",[508,710,526],{"class":518},[508,712,713],{"class":518}," },\n",[508,715,717,720],{"class":510,"line":716},9,[508,718,719],{"class":518},"  }",[508,721,645],{"class":640},[508,723,725],{"class":510,"line":724},10,[508,726,587],{"emptyLinePlaceholder":586},[508,728,730,733,735,737],{"class":510,"line":729},11,[508,731,732],{"class":514},"  await",[508,734,570],{"class":599},[508,736,603],{"class":640},[508,738,739],{"class":518},"{\n",[508,741,743,746,748,750,753,756,758,760,763,765,767],{"class":510,"line":742},12,[508,744,745],{"class":640},"    model",[508,747,496],{"class":518},[508,749,653],{"class":522},[508,751,752],{"class":518},".",[508,754,755],{"class":599},"wrap",[508,757,603],{"class":640},[508,759,685],{"class":518},[508,761,762],{"class":535},"anthropic\u002Fclaude-sonnet-4.6",[508,764,685],{"class":518},[508,766,617],{"class":640},[508,768,769],{"class":518},",\n",[508,771,773,776,778,780,783,785],{"class":510,"line":772},13,[508,774,775],{"class":640},"    prompt",[508,777,496],{"class":518},[508,779,532],{"class":518},[508,781,782],{"class":535},"Summarize this document",[508,784,685],{"class":518},[508,786,769],{"class":518},[508,788,790,792],{"class":510,"line":789},14,[508,791,719],{"class":518},[508,793,645],{"class":640},[508,795,797],{"class":510,"line":796},15,[508,798,587],{"emptyLinePlaceholder":586},[508,800,802,804,807,809,811,813,816],{"class":510,"line":801},16,[508,803,629],{"class":606},[508,805,806],{"class":522}," metadata",[508,808,635],{"class":518},[508,810,653],{"class":522},[508,812,752],{"class":518},[508,814,815],{"class":599},"getMetadata",[508,817,818],{"class":640},"()\n",[508,820,822],{"class":510,"line":821},17,[508,823,587],{"emptyLinePlaceholder":586},[508,825,827,829,832,834,837,839,842,844],{"class":510,"line":826},18,[508,828,732],{"class":514},[508,830,831],{"class":522}," db",[508,833,752],{"class":518},[508,835,836],{"class":522},"aiRuns",[508,838,752],{"class":518},[508,840,841],{"class":599},"insert",[508,843,603],{"class":640},[508,845,739],{"class":518},[508,847,849,852,854,857,859,862,864,867],{"class":510,"line":848},19,[508,850,851],{"class":640},"    userId",[508,853,496],{"class":518},[508,855,856],{"class":522}," event",[508,858,752],{"class":518},[508,860,861],{"class":522},"context",[508,863,752],{"class":518},[508,865,866],{"class":522},"userId",[508,868,769],{"class":518},[508,870,872,874,876,878,880,883],{"class":510,"line":871},20,[508,873,745],{"class":640},[508,875,496],{"class":518},[508,877,806],{"class":522},[508,879,752],{"class":518},[508,881,882],{"class":522},"model",[508,884,769],{"class":518},[508,886,888,891,893,895,897,900],{"class":510,"line":887},21,[508,889,890],{"class":640},"    inputTokens",[508,892,496],{"class":518},[508,894,806],{"class":522},[508,896,752],{"class":518},[508,898,899],{"class":522},"inputTokens",[508,901,769],{"class":518},[508,903,905,908,910,912,914,917],{"class":510,"line":904},22,[508,906,907],{"class":640},"    outputTokens",[508,909,496],{"class":518},[508,911,806],{"class":522},[508,913,752],{"class":518},[508,915,916],{"class":522},"outputTokens",[508,918,769],{"class":518},[508,920,922,925,927,929,931,934],{"class":510,"line":921},23,[508,923,924],{"class":640},"    estimatedCost",[508,926,496],{"class":518},[508,928,806],{"class":522},[508,930,752],{"class":518},[508,932,933],{"class":522},"estimatedCost",[508,935,769],{"class":518},[508,937,939,942,944,946,948,951],{"class":510,"line":938},24,[508,940,941],{"class":640},"    finishReason",[508,943,496],{"class":518},[508,945,806],{"class":522},[508,947,752],{"class":518},[508,949,950],{"class":522},"finishReason",[508,952,769],{"class":518},[508,954,956,959,961,963,965,968],{"class":510,"line":955},25,[508,957,958],{"class":640},"    responseId",[508,960,496],{"class":518},[508,962,806],{"class":522},[508,964,752],{"class":518},[508,966,967],{"class":522},"responseId",[508,969,769],{"class":518},[508,971,973,975],{"class":510,"line":972},26,[508,974,719],{"class":518},[508,976,645],{"class":640},[508,978,980],{"class":510,"line":979},27,[508,981,587],{"emptyLinePlaceholder":586},[508,983,985,988,990,993,995,999],{"class":510,"line":984},28,[508,986,987],{"class":514},"  return",[508,989,519],{"class":518},[508,991,992],{"class":640}," ok",[508,994,496],{"class":518},[508,996,998],{"class":997},"sfNiH"," true",[508,1000,1001],{"class":518}," }\n",[508,1003,1005,1008],{"class":510,"line":1004},29,[508,1006,1007],{"class":518},"}",[508,1009,645],{"class":522},[461,1011,1012],{},"The snapshot is a fresh copy: mutating it never affects the underlying state or subsequent calls.",[476,1014,1016,1019],{"id":1015},"getestimatedcost-quick-cost-check",[465,1017,1018],{},"getEstimatedCost()"," — quick cost check",[461,1021,1022,1023,1026,1027,1030,1031,1034],{},"Convenience for ",[465,1024,1025],{},"getMetadata().estimatedCost",". Returns the cost in dollars, or ",[465,1028,1029],{},"undefined"," if no ",[465,1032,1033],{},"cost"," map was provided or the model is not in the map.",[498,1036,1038],{"className":500,"code":1037,"language":503,"meta":504,"style":504},"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",[465,1039,1040,1060,1097,1103,1107,1149,1153,1171],{"__ignoreMap":504},[508,1041,1042,1045,1048,1051,1053,1056,1058],{"class":510,"line":511},[508,1043,1044],{"class":606},"const",[508,1046,1047],{"class":522}," ai ",[508,1049,1050],{"class":518},"=",[508,1052,549],{"class":599},[508,1054,1055],{"class":522},"(log",[508,1057,665],{"class":518},[508,1059,623],{"class":518},[508,1061,1062,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095],{"class":510,"line":542},[508,1063,1064],{"class":640},"  cost",[508,1066,496],{"class":518},[508,1068,519],{"class":518},[508,1070,532],{"class":518},[508,1072,682],{"class":640},[508,1074,685],{"class":518},[508,1076,496],{"class":518},[508,1078,519],{"class":518},[508,1080,692],{"class":640},[508,1082,496],{"class":518},[508,1084,698],{"class":697},[508,1086,665],{"class":518},[508,1088,703],{"class":640},[508,1090,496],{"class":518},[508,1092,708],{"class":697},[508,1094,526],{"class":518},[508,1096,713],{"class":518},[508,1098,1099,1101],{"class":510,"line":563},[508,1100,1007],{"class":518},[508,1102,645],{"class":522},[508,1104,1105],{"class":510,"line":583},[508,1106,587],{"emptyLinePlaceholder":586},[508,1108,1109,1112,1114,1116,1119,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1145,1147],{"class":510,"line":590},[508,1110,1111],{"class":514},"await",[508,1113,570],{"class":599},[508,1115,603],{"class":522},[508,1117,1118],{"class":518},"{",[508,1120,1121],{"class":640}," model",[508,1123,496],{"class":518},[508,1125,653],{"class":522},[508,1127,752],{"class":518},[508,1129,755],{"class":599},[508,1131,603],{"class":522},[508,1133,685],{"class":518},[508,1135,762],{"class":535},[508,1137,685],{"class":518},[508,1139,617],{"class":522},[508,1141,665],{"class":518},[508,1143,1144],{"class":522}," prompt ",[508,1146,1007],{"class":518},[508,1148,645],{"class":522},[508,1150,1151],{"class":510,"line":626},[508,1152,587],{"emptyLinePlaceholder":586},[508,1154,1155,1157,1160,1162,1164,1166,1169],{"class":510,"line":648},[508,1156,1044],{"class":606},[508,1158,1159],{"class":522}," cost ",[508,1161,1050],{"class":518},[508,1163,653],{"class":522},[508,1165,752],{"class":518},[508,1167,1168],{"class":599},"getEstimatedCost",[508,1170,818],{"class":522},[508,1172,1173,1176,1178,1180,1182,1185,1188,1191,1193,1196,1199,1201,1204,1206,1209],{"class":510,"line":670},[508,1174,1175],{"class":522},"console",[508,1177,752],{"class":518},[508,1179,662],{"class":599},[508,1181,603],{"class":522},[508,1183,1184],{"class":518},"`",[508,1186,1187],{"class":535},"This call cost $",[508,1189,1190],{"class":518},"${",[508,1192,1033],{"class":522},[508,1194,1195],{"class":518},"?.",[508,1197,1198],{"class":599},"toFixed",[508,1200,603],{"class":522},[508,1202,1203],{"class":697},"4",[508,1205,617],{"class":522},[508,1207,1208],{"class":518},"}`",[508,1210,645],{"class":522},[476,1212,1214,1217],{"id":1213},"onupdatecallback-incremental-updates",[465,1215,1216],{},"onUpdate(callback)"," — incremental updates",[461,1219,1220],{},"Subscribe to metadata updates. The callback fires every time the underlying state flushes:",[1222,1223,1224,1228,1235,1238],"ul",{},[1225,1226,1227],"li",{},"Once per step in multi-step agent runs",[1225,1229,1230,1231,1234],{},"Once per ",[465,1232,1233],{},"captureEmbed"," call",[1225,1236,1237],{},"On model errors",[1225,1239,1240,1241,1244,1245],{},"On ",[465,1242,1243],{},"createEvlogIntegration","'s ",[465,1246,495],{},[461,1248,1249],{},"Each invocation receives a fresh snapshot. Returns an unsubscribe function. Subscriber errors are isolated and never break the AI flow.",[498,1251,1254],{"className":500,"code":1252,"filename":1253,"language":503,"meta":504,"style":504},"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","server\u002Fapi\u002Fagent.post.ts",[465,1255,1256,1285,1303,1321,1325,1347,1363,1388,1404,1408,1431,1444,1460,1476,1492,1507,1514,1520,1524,1542,1566,1585,1603,1609,1613,1638],{"__ignoreMap":504},[508,1257,1258,1260,1262,1265,1267,1270,1272,1275,1277,1279,1281,1283],{"class":510,"line":511},[508,1259,515],{"class":514},[508,1261,519],{"class":518},[508,1263,1264],{"class":522}," ToolLoopAgent",[508,1266,665],{"class":518},[508,1268,1269],{"class":522}," createAgentUIStreamResponse",[508,1271,665],{"class":518},[508,1273,1274],{"class":522}," stepCountIs",[508,1276,526],{"class":518},[508,1278,529],{"class":514},[508,1280,532],{"class":518},[508,1282,467],{"class":535},[508,1284,539],{"class":518},[508,1286,1287,1289,1291,1293,1295,1297,1299,1301],{"class":510,"line":542},[508,1288,515],{"class":514},[508,1290,519],{"class":518},[508,1292,523],{"class":522},[508,1294,526],{"class":518},[508,1296,529],{"class":514},[508,1298,532],{"class":518},[508,1300,536],{"class":535},[508,1302,539],{"class":518},[508,1304,1305,1307,1309,1311,1313,1315,1317,1319],{"class":510,"line":563},[508,1306,515],{"class":514},[508,1308,519],{"class":518},[508,1310,549],{"class":522},[508,1312,526],{"class":518},[508,1314,529],{"class":514},[508,1316,532],{"class":518},[508,1318,558],{"class":535},[508,1320,539],{"class":518},[508,1322,1323],{"class":510,"line":583},[508,1324,587],{"emptyLinePlaceholder":586},[508,1326,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345],{"class":510,"line":590},[508,1328,593],{"class":514},[508,1330,596],{"class":514},[508,1332,600],{"class":599},[508,1334,603],{"class":522},[508,1336,607],{"class":606},[508,1338,610],{"class":518},[508,1340,614],{"class":613},[508,1342,617],{"class":518},[508,1344,620],{"class":606},[508,1346,623],{"class":518},[508,1348,1349,1351,1353,1355,1357,1359,1361],{"class":510,"line":626},[508,1350,629],{"class":606},[508,1352,632],{"class":522},[508,1354,635],{"class":518},[508,1356,523],{"class":599},[508,1358,603],{"class":640},[508,1360,614],{"class":522},[508,1362,645],{"class":640},[508,1364,1365,1367,1369,1372,1374,1376,1379,1382,1384,1386],{"class":510,"line":648},[508,1366,629],{"class":606},[508,1368,519],{"class":518},[508,1370,1371],{"class":522}," messages",[508,1373,526],{"class":518},[508,1375,635],{"class":518},[508,1377,1378],{"class":514}," await",[508,1380,1381],{"class":599}," readBody",[508,1383,603],{"class":640},[508,1385,614],{"class":522},[508,1387,645],{"class":640},[508,1389,1390,1392,1394,1396,1398,1400,1402],{"class":510,"line":670},[508,1391,629],{"class":606},[508,1393,653],{"class":522},[508,1395,635],{"class":518},[508,1397,549],{"class":599},[508,1399,603],{"class":640},[508,1401,662],{"class":522},[508,1403,645],{"class":640},[508,1405,1406],{"class":510,"line":716},[508,1407,587],{"emptyLinePlaceholder":586},[508,1409,1410,1413,1415,1418,1420,1422,1425,1427,1429],{"class":510,"line":724},[508,1411,1412],{"class":522},"  ai",[508,1414,752],{"class":518},[508,1416,1417],{"class":599},"onUpdate",[508,1419,603],{"class":640},[508,1421,603],{"class":518},[508,1423,1424],{"class":613},"metadata",[508,1426,617],{"class":518},[508,1428,620],{"class":606},[508,1430,623],{"class":518},[508,1432,1433,1436,1438,1440,1442],{"class":510,"line":729},[508,1434,1435],{"class":599},"    pushToClient",[508,1437,603],{"class":640},[508,1439,614],{"class":522},[508,1441,665],{"class":518},[508,1443,623],{"class":518},[508,1445,1446,1449,1451,1453,1456,1458],{"class":510,"line":742},[508,1447,1448],{"class":640},"      type",[508,1450,496],{"class":518},[508,1452,532],{"class":518},[508,1454,1455],{"class":535},"ai-progress",[508,1457,685],{"class":518},[508,1459,769],{"class":518},[508,1461,1462,1465,1467,1469,1471,1474],{"class":510,"line":772},[508,1463,1464],{"class":640},"      step",[508,1466,496],{"class":518},[508,1468,806],{"class":522},[508,1470,752],{"class":518},[508,1472,1473],{"class":522},"steps",[508,1475,769],{"class":518},[508,1477,1478,1481,1483,1485,1487,1490],{"class":510,"line":789},[508,1479,1480],{"class":640},"      tokens",[508,1482,496],{"class":518},[508,1484,806],{"class":522},[508,1486,752],{"class":518},[508,1488,1489],{"class":522},"totalTokens",[508,1491,769],{"class":518},[508,1493,1494,1497,1499,1501,1503,1505],{"class":510,"line":796},[508,1495,1496],{"class":640},"      cost",[508,1498,496],{"class":518},[508,1500,806],{"class":522},[508,1502,752],{"class":518},[508,1504,933],{"class":522},[508,1506,769],{"class":518},[508,1508,1509,1512],{"class":510,"line":801},[508,1510,1511],{"class":518},"    }",[508,1513,645],{"class":640},[508,1515,1516,1518],{"class":510,"line":821},[508,1517,719],{"class":518},[508,1519,645],{"class":640},[508,1521,1522],{"class":510,"line":826},[508,1523,587],{"emptyLinePlaceholder":586},[508,1525,1526,1528,1531,1533,1536,1538,1540],{"class":510,"line":848},[508,1527,629],{"class":606},[508,1529,1530],{"class":522}," agent",[508,1532,635],{"class":518},[508,1534,1535],{"class":518}," new",[508,1537,1264],{"class":599},[508,1539,603],{"class":640},[508,1541,739],{"class":518},[508,1543,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564],{"class":510,"line":871},[508,1545,745],{"class":640},[508,1547,496],{"class":518},[508,1549,653],{"class":522},[508,1551,752],{"class":518},[508,1553,755],{"class":599},[508,1555,603],{"class":640},[508,1557,685],{"class":518},[508,1559,762],{"class":535},[508,1561,685],{"class":518},[508,1563,617],{"class":640},[508,1565,769],{"class":518},[508,1567,1568,1571,1573,1575,1578,1580,1583],{"class":510,"line":887},[508,1569,1570],{"class":640},"    tools",[508,1572,496],{"class":518},[508,1574,519],{"class":518},[508,1576,1577],{"class":522}," searchWeb",[508,1579,665],{"class":518},[508,1581,1582],{"class":522}," queryDatabase",[508,1584,713],{"class":518},[508,1586,1587,1590,1592,1594,1596,1599,1601],{"class":510,"line":904},[508,1588,1589],{"class":640},"    stopWhen",[508,1591,496],{"class":518},[508,1593,1274],{"class":599},[508,1595,603],{"class":640},[508,1597,1598],{"class":697},"5",[508,1600,617],{"class":640},[508,1602,769],{"class":518},[508,1604,1605,1607],{"class":510,"line":921},[508,1606,719],{"class":518},[508,1608,645],{"class":640},[508,1610,1611],{"class":510,"line":938},[508,1612,587],{"emptyLinePlaceholder":586},[508,1614,1615,1617,1619,1621,1623,1625,1627,1630,1632,1634,1636],{"class":510,"line":955},[508,1616,987],{"class":514},[508,1618,1269],{"class":599},[508,1620,603],{"class":640},[508,1622,1118],{"class":518},[508,1624,1530],{"class":522},[508,1626,665],{"class":518},[508,1628,1629],{"class":640}," uiMessages",[508,1631,496],{"class":518},[508,1633,1371],{"class":522},[508,1635,526],{"class":518},[508,1637,645],{"class":640},[508,1639,1640,1642],{"class":510,"line":972},[508,1641,1007],{"class":518},[508,1643,645],{"class":522},[461,1645,1646],{},"For one-off cleanup:",[498,1648,1650],{"className":500,"code":1649,"language":503,"meta":504,"style":504},"const off = ai.onUpdate((metadata) => { \u002F* ... *\u002F })\n\u002F\u002F later\noff()\n",[465,1651,1652,1687,1692],{"__ignoreMap":504},[508,1653,1654,1656,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1683,1685],{"class":510,"line":511},[508,1655,1044],{"class":606},[508,1657,1658],{"class":522}," off ",[508,1660,1050],{"class":518},[508,1662,653],{"class":522},[508,1664,752],{"class":518},[508,1666,1417],{"class":599},[508,1668,603],{"class":522},[508,1670,603],{"class":518},[508,1672,1424],{"class":613},[508,1674,617],{"class":518},[508,1676,620],{"class":606},[508,1678,519],{"class":518},[508,1680,1682],{"class":1681},"sHwdD"," \u002F* ... *\u002F",[508,1684,526],{"class":518},[508,1686,645],{"class":522},[508,1688,1689],{"class":510,"line":542},[508,1690,1691],{"class":1681},"\u002F\u002F later\n",[508,1693,1694,1697],{"class":510,"line":563},[508,1695,1696],{"class":599},"off",[508,1698,818],{"class":522},[476,1700,1702,1704],{"id":1701},"aimetadata-shape",[465,1703,488],{}," shape",[461,1706,1707,1709,1710,1712,1713,1715,1716,1718],{},[465,1708,488],{}," is a public type alias for the snapshot returned by ",[465,1711,481],{}," and passed to ",[465,1714,1417],{}," listeners. It has the same shape as the ",[465,1717,467],{}," field on the wide event.",[498,1720,1722],{"className":500,"code":1721,"language":503,"meta":504,"style":504},"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",[465,1723,1724,1751,1755,1776,1821,1826,1830,1846],{"__ignoreMap":504},[508,1725,1726,1728,1731,1733,1736,1738,1741,1743,1745,1747,1749],{"class":510,"line":511},[508,1727,515],{"class":514},[508,1729,1730],{"class":514}," type",[508,1732,519],{"class":518},[508,1734,1735],{"class":522}," AIMetadata",[508,1737,665],{"class":518},[508,1739,1740],{"class":522}," AIMetadataListener",[508,1742,526],{"class":518},[508,1744,529],{"class":514},[508,1746,532],{"class":518},[508,1748,558],{"class":535},[508,1750,539],{"class":518},[508,1752,1753],{"class":510,"line":542},[508,1754,587],{"emptyLinePlaceholder":586},[508,1756,1757,1760,1763,1765,1767,1769,1772,1774],{"class":510,"line":563},[508,1758,1759],{"class":606},"function",[508,1761,1762],{"class":599}," handleProgress",[508,1764,603],{"class":518},[508,1766,1424],{"class":613},[508,1768,496],{"class":518},[508,1770,1735],{"class":1771},"sBMFI",[508,1773,617],{"class":518},[508,1775,623],{"class":518},[508,1777,1778,1781,1783,1785,1787,1790,1792,1794,1797,1799,1802,1804,1806,1808,1811,1814,1817,1819],{"class":510,"line":583},[508,1779,1780],{"class":522},"  console",[508,1782,752],{"class":518},[508,1784,662],{"class":599},[508,1786,603],{"class":640},[508,1788,1789],{"class":518},"`${",[508,1791,1424],{"class":522},[508,1793,752],{"class":518},[508,1795,1796],{"class":522},"calls",[508,1798,1007],{"class":518},[508,1800,1801],{"class":535}," calls, $",[508,1803,1190],{"class":518},[508,1805,1424],{"class":522},[508,1807,752],{"class":518},[508,1809,1810],{"class":522},"estimatedCost ",[508,1812,1813],{"class":518},"??",[508,1815,1816],{"class":697}," 0",[508,1818,1208],{"class":518},[508,1820,645],{"class":640},[508,1822,1823],{"class":510,"line":590},[508,1824,1825],{"class":518},"}\n",[508,1827,1828],{"class":510,"line":626},[508,1829,587],{"emptyLinePlaceholder":586},[508,1831,1832,1834,1837,1839,1841,1843],{"class":510,"line":648},[508,1833,1044],{"class":606},[508,1835,1836],{"class":522}," listener",[508,1838,496],{"class":518},[508,1840,1740],{"class":1771},[508,1842,635],{"class":518},[508,1844,1845],{"class":522}," handleProgress\n",[508,1847,1848,1850,1852,1854],{"class":510,"line":670},[508,1849,467],{"class":522},[508,1851,752],{"class":518},[508,1853,1417],{"class":599},[508,1855,1856],{"class":522},"(listener)\n",[476,1858,1860],{"id":1859},"captured-data-reference","Captured Data Reference",[461,1862,1863,1864,496],{},"Every field that may show up under ",[465,1865,1866],{},"ai.*",[1868,1869,1870,1886],"table",{},[1871,1872,1873],"thead",{},[1874,1875,1876,1880,1883],"tr",{},[1877,1878,1879],"th",{},"Wide event field",[1877,1881,1882],{},"Source",[1877,1884,1885],{},"Description",[1887,1888,1889,1903,1918,1931,1957,1972,1987,2002,2017,2032,2047,2068,2092,2110,2123,2136,2149,2161,2173,2186,2207,2223,2240],"tbody",{},[1874,1890,1891,1897,1900],{},[1892,1893,1894],"td",{},[465,1895,1896],{},"ai.calls",[1892,1898,1899],{},"Call count",[1892,1901,1902],{},"Number of AI calls in this request",[1874,1904,1905,1910,1915],{},[1892,1906,1907],{},[465,1908,1909],{},"ai.model",[1892,1911,1912],{},[465,1913,1914],{},"response.modelId",[1892,1916,1917],{},"Model that served the response",[1874,1919,1920,1925,1928],{},[1892,1921,1922],{},[465,1923,1924],{},"ai.models",[1892,1926,1927],{},"All model IDs",[1892,1929,1930],{},"Array of all models used (only when > 1)",[1874,1932,1933,1938,1943],{},[1892,1934,1935],{},[465,1936,1937],{},"ai.provider",[1892,1939,1940],{},[465,1941,1942],{},"model.provider",[1892,1944,1945,1946,1949,1950,1949,1953,1956],{},"Provider (",[465,1947,1948],{},"anthropic",", ",[465,1951,1952],{},"openai",[465,1954,1955],{},"google",", etc.)",[1874,1958,1959,1964,1969],{},[1892,1960,1961],{},[465,1962,1963],{},"ai.inputTokens",[1892,1965,1966],{},[465,1967,1968],{},"usage.inputTokens.total",[1892,1970,1971],{},"Total input tokens across all calls",[1874,1973,1974,1979,1984],{},[1892,1975,1976],{},[465,1977,1978],{},"ai.outputTokens",[1892,1980,1981],{},[465,1982,1983],{},"usage.outputTokens.total",[1892,1985,1986],{},"Total output tokens across all calls",[1874,1988,1989,1994,1997],{},[1892,1990,1991],{},[465,1992,1993],{},"ai.totalTokens",[1892,1995,1996],{},"Computed",[1892,1998,1999],{},[465,2000,2001],{},"inputTokens + outputTokens",[1874,2003,2004,2009,2014],{},[1892,2005,2006],{},[465,2007,2008],{},"ai.cacheReadTokens",[1892,2010,2011],{},[465,2012,2013],{},"usage.inputTokens.cacheRead",[1892,2015,2016],{},"Tokens served from prompt cache",[1874,2018,2019,2024,2029],{},[1892,2020,2021],{},[465,2022,2023],{},"ai.cacheWriteTokens",[1892,2025,2026],{},[465,2027,2028],{},"usage.inputTokens.cacheWrite",[1892,2030,2031],{},"Tokens written to prompt cache",[1874,2033,2034,2039,2044],{},[1892,2035,2036],{},[465,2037,2038],{},"ai.reasoningTokens",[1892,2040,2041],{},[465,2042,2043],{},"usage.outputTokens.reasoning",[1892,2045,2046],{},"Reasoning tokens (extended thinking)",[1874,2048,2049,2054,2059],{},[1892,2050,2051],{},[465,2052,2053],{},"ai.finishReason",[1892,2055,2056],{},[465,2057,2058],{},"finishReason.unified",[1892,2060,2061,2062,1949,2065,1956],{},"Why generation ended (",[465,2063,2064],{},"stop",[465,2066,2067],{},"tool-calls",[1874,2069,2070,2075,2078],{},[1892,2071,2072],{},[465,2073,2074],{},"ai.toolCalls",[1892,2076,2077],{},"Content \u002F stream chunks",[1892,2079,2080,2083,2084,2087,2088,2091],{},[465,2081,2082],{},"string[]"," of tool names by default, or ",[465,2085,2086],{},"Array\u003C{ name, input }>"," when ",[465,2089,2090],{},"toolInputs"," is enabled",[1874,2093,2094,2099,2104],{},[1892,2095,2096],{},[465,2097,2098],{},"ai.responseId",[1892,2100,2101],{},[465,2102,2103],{},"response.id",[1892,2105,2106,2107,617],{},"Provider-assigned response ID (e.g. Anthropic's ",[465,2108,2109],{},"msg_...",[1874,2111,2112,2117,2120],{},[1892,2113,2114],{},[465,2115,2116],{},"ai.steps",[1892,2118,2119],{},"Step count",[1892,2121,2122],{},"Number of LLM calls (only when > 1)",[1874,2124,2125,2130,2133],{},[1892,2126,2127],{},[465,2128,2129],{},"ai.stepsUsage",[1892,2131,2132],{},"Per-step accumulation",[1892,2134,2135],{},"Per-step token and tool call breakdown (only when > 1 step)",[1874,2137,2138,2143,2146],{},[1892,2139,2140],{},[465,2141,2142],{},"ai.msToFirstChunk",[1892,2144,2145],{},"Stream timing",[1892,2147,2148],{},"Time to first text chunk (streaming only)",[1874,2150,2151,2156,2158],{},[1892,2152,2153],{},[465,2154,2155],{},"ai.msToFinish",[1892,2157,2145],{},[1892,2159,2160],{},"Total stream duration (streaming only)",[1874,2162,2163,2168,2170],{},[1892,2164,2165],{},[465,2166,2167],{},"ai.tokensPerSecond",[1892,2169,1996],{},[1892,2171,2172],{},"Output tokens per second (streaming only)",[1874,2174,2175,2180,2183],{},[1892,2176,2177],{},[465,2178,2179],{},"ai.error",[1892,2181,2182],{},"Error capture",[1892,2184,2185],{},"Error message if a model call fails",[1874,2187,2188,2193,2198],{},[1892,2189,2190],{},[465,2191,2192],{},"ai.tools",[1892,2194,2195],{},[465,2196,2197],{},"TelemetryIntegration",[1892,2199,2200,2201,2204,2205,617],{},"Per-tool ",[465,2202,2203],{},"{ name, durationMs, success, error? }"," (requires ",[465,2206,1243],{},[1874,2208,2209,2214,2218],{},[1892,2210,2211],{},[465,2212,2213],{},"ai.totalDurationMs",[1892,2215,2216],{},[465,2217,2197],{},[1892,2219,2220,2221,617],{},"Total generation wall time (requires ",[465,2222,1243],{},[1874,2224,2225,2230,2234],{},[1892,2226,2227],{},[465,2228,2229],{},"ai.embedding",[1892,2231,2232],{},[465,2233,1233],{},[1892,2235,2236,2239],{},[465,2237,2238],{},"{ model?, tokens, dimensions?, count? }"," — embedding metadata",[1874,2241,2242,2247,2249],{},[1892,2243,2244],{},[465,2245,2246],{},"ai.estimatedCost",[1892,2248,1996],{},[1892,2250,2251,2252,2254],{},"Estimated cost in dollars (requires ",[465,2253,1033],{}," option)",[2256,2257,2258],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":504,"searchDepth":542,"depth":542,"links":2260},[2261,2263,2265,2267,2269],{"id":478,"depth":542,"text":2262},"getMetadata() — final snapshot",{"id":1015,"depth":542,"text":2264},"getEstimatedCost() — quick cost check",{"id":1213,"depth":542,"text":2266},"onUpdate(callback) — incremental updates",{"id":1701,"depth":542,"text":2268},"AIMetadata shape",{"id":1859,"depth":542,"text":1860},"Read AI metadata from your handler — persist it, surface it to end-users, bill against it, or stream incremental progress to the client.","md",[2273,2276],{"label":41,"icon":44,"to":77,"color":2274,"variant":2275},"neutral","subtle",{"label":85,"icon":88,"to":86,"color":2274,"variant":2275},{},{"title":90,"icon":93},{"title":456,"description":2270},"D5aVTIhpnrQCVoGy4Bqe5z3_b7NeWvqJ__TlGKTPV-Q",[2282,2284],{"title":85,"path":86,"stem":87,"description":2283,"icon":88,"children":-1},"Configure tool input capture (with redaction and truncation), enable cost estimation per model, and handle errors during AI calls.",{"title":95,"path":96,"stem":97,"description":2285,"icon":98,"children":-1},"Add tool execution timing and total wall time with createEvlogIntegration. Compose with other middleware like supermemory or guardrails.",1778340938569]