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