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