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