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