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