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