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