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