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