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