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