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