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