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