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