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