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