[{"data":1,"prerenderedAt":1710},["ShallowReactive",2],{"navigation_docs":3,"-logging-ai-sdk-telemetry":407,"-logging-ai-sdk-telemetry-surround":1705},[4,35,159,201,289,304,391],{"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,299],{"title":295,"path":296,"stem":297,"icon":298},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F1.identity-headers","i-lucide-fingerprint",{"title":300,"path":301,"stem":302,"icon":303},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F4.fs-reader","i-lucide-folder-search",{"title":305,"path":306,"stem":307,"children":308,"page":34},"Adapters","\u002Fadapters","6.adapters",[309,312,352,367],{"title":41,"path":310,"stem":311,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":313,"path":314,"stem":315,"children":316,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[317,322,327,332,337,342,347],{"title":318,"path":319,"stem":320,"icon":321},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":323,"path":324,"stem":325,"icon":326},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":328,"path":329,"stem":330,"icon":331},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":333,"path":334,"stem":335,"icon":336},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":338,"path":339,"stem":340,"icon":341},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":343,"path":344,"stem":345,"icon":346},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":348,"path":349,"stem":350,"icon":351},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[357,362],{"title":358,"path":359,"stem":360,"icon":361},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":363,"path":364,"stem":365,"icon":366},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":368,"path":369,"stem":370,"children":371,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[372,377,382,386],{"title":373,"path":374,"stem":375,"icon":376},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":378,"path":379,"stem":380,"icon":381},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":383,"path":384,"stem":385,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":387,"path":388,"stem":389,"icon":390},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":392,"path":393,"stem":394,"children":395,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[396,399,403],{"title":41,"path":397,"stem":398,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":400,"path":401,"stem":402,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":404,"path":405,"stem":406,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":408,"title":409,"body":410,"description":1693,"extension":1694,"links":1695,"meta":1701,"navigation":1702,"path":96,"seo":1703,"stem":97,"__hash__":1704},"docs\u002F2.logging\u002F6.ai-sdk\u002F05.telemetry.md","Deeper Telemetry",{"type":411,"value":412,"toc":1687},"minimark",[413,429,434,445,775,778,1146,1150,1153,1273,1277,1346,1349,1353,1361,1538,1548,1662,1683],[414,415,416,420,421,424,425,428],"p",{},[417,418,419],"code",{},"createAILogger"," covers tokens, model info, and streaming metrics. For deeper observability — per-tool execution timing, success\u002Ffailure tracking, and total generation wall time — add ",[417,422,423],{},"createEvlogIntegration()"," on top. It implements the AI SDK's ",[417,426,427],{},"TelemetryIntegration"," interface and captures data middleware alone cannot see.",[430,431,433],"h2",{"id":432},"combined-with-middleware-recommended","Combined with middleware (recommended)",[414,435,436,437,440,441,444],{},"When passed an ",[417,438,439],{},"AILogger",", the integration shares its accumulator. Both paths write to the same ",[417,442,443],{},"ai.*"," field:",[446,447,453],"pre",{"className":448,"code":449,"filename":450,"language":451,"meta":452,"style":452},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { generateText } from 'ai'\nimport { createAILogger, createEvlogIntegration } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log)\n\n  const result = await generateText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    tools: { getWeather, searchDB },\n    experimental_telemetry: {\n      isEnabled: true,\n      integrations: [createEvlogIntegration(ai)],\n    },\n  })\n\n  return { text: result.text }\n})\n","server\u002Fapi\u002Fagent.post.ts","typescript","",[417,454,455,488,515,522,558,581,600,605,625,657,678,688,702,725,731,739,744,767],{"__ignoreMap":452},[456,457,460,464,468,472,475,478,481,485],"span",{"class":458,"line":459},"line",1,[456,461,463],{"class":462},"s7zQu","import",[456,465,467],{"class":466},"sMK4o"," {",[456,469,471],{"class":470},"sTEyZ"," generateText",[456,473,474],{"class":466}," }",[456,476,477],{"class":462}," from",[456,479,480],{"class":466}," '",[456,482,484],{"class":483},"sfazB","ai",[456,486,487],{"class":466},"'\n",[456,489,491,493,495,498,501,504,506,508,510,513],{"class":458,"line":490},2,[456,492,463],{"class":462},[456,494,467],{"class":466},[456,496,497],{"class":470}," createAILogger",[456,499,500],{"class":466},",",[456,502,503],{"class":470}," createEvlogIntegration",[456,505,474],{"class":466},[456,507,477],{"class":462},[456,509,480],{"class":466},[456,511,512],{"class":483},"evlog\u002Fai",[456,514,487],{"class":466},[456,516,518],{"class":458,"line":517},3,[456,519,521],{"emptyLinePlaceholder":520},true,"\n",[456,523,525,528,531,535,538,542,545,549,552,555],{"class":458,"line":524},4,[456,526,527],{"class":462},"export",[456,529,530],{"class":462}," default",[456,532,534],{"class":533},"s2Zo4"," defineEventHandler",[456,536,537],{"class":470},"(",[456,539,541],{"class":540},"spNyl","async",[456,543,544],{"class":466}," (",[456,546,548],{"class":547},"sHdIc","event",[456,550,551],{"class":466},")",[456,553,554],{"class":540}," =>",[456,556,557],{"class":466}," {\n",[456,559,561,564,567,570,573,576,578],{"class":458,"line":560},5,[456,562,563],{"class":540},"  const",[456,565,566],{"class":470}," log",[456,568,569],{"class":466}," =",[456,571,572],{"class":533}," useLogger",[456,574,537],{"class":575},"swJcz",[456,577,548],{"class":470},[456,579,580],{"class":575},")\n",[456,582,584,586,589,591,593,595,598],{"class":458,"line":583},6,[456,585,563],{"class":540},[456,587,588],{"class":470}," ai",[456,590,569],{"class":466},[456,592,497],{"class":533},[456,594,537],{"class":575},[456,596,597],{"class":470},"log",[456,599,580],{"class":575},[456,601,603],{"class":458,"line":602},7,[456,604,521],{"emptyLinePlaceholder":520},[456,606,608,610,613,615,618,620,622],{"class":458,"line":607},8,[456,609,563],{"class":540},[456,611,612],{"class":470}," result",[456,614,569],{"class":466},[456,616,617],{"class":462}," await",[456,619,471],{"class":533},[456,621,537],{"class":575},[456,623,624],{"class":466},"{\n",[456,626,628,631,634,636,639,642,644,647,650,652,654],{"class":458,"line":627},9,[456,629,630],{"class":575},"    model",[456,632,633],{"class":466},":",[456,635,588],{"class":470},[456,637,638],{"class":466},".",[456,640,641],{"class":533},"wrap",[456,643,537],{"class":575},[456,645,646],{"class":466},"'",[456,648,649],{"class":483},"anthropic\u002Fclaude-sonnet-4.6",[456,651,646],{"class":466},[456,653,551],{"class":575},[456,655,656],{"class":466},",\n",[456,658,660,663,665,667,670,672,675],{"class":458,"line":659},10,[456,661,662],{"class":575},"    tools",[456,664,633],{"class":466},[456,666,467],{"class":466},[456,668,669],{"class":470}," getWeather",[456,671,500],{"class":466},[456,673,674],{"class":470}," searchDB",[456,676,677],{"class":466}," },\n",[456,679,681,684,686],{"class":458,"line":680},11,[456,682,683],{"class":575},"    experimental_telemetry",[456,685,633],{"class":466},[456,687,557],{"class":466},[456,689,691,694,696,700],{"class":458,"line":690},12,[456,692,693],{"class":575},"      isEnabled",[456,695,633],{"class":466},[456,697,699],{"class":698},"sfNiH"," true",[456,701,656],{"class":466},[456,703,705,708,710,713,716,718,720,723],{"class":458,"line":704},13,[456,706,707],{"class":575},"      integrations",[456,709,633],{"class":466},[456,711,712],{"class":575}," [",[456,714,715],{"class":533},"createEvlogIntegration",[456,717,537],{"class":575},[456,719,484],{"class":470},[456,721,722],{"class":575},")]",[456,724,656],{"class":466},[456,726,728],{"class":458,"line":727},14,[456,729,730],{"class":466},"    },\n",[456,732,734,737],{"class":458,"line":733},15,[456,735,736],{"class":466},"  }",[456,738,580],{"class":575},[456,740,742],{"class":458,"line":741},16,[456,743,521],{"emptyLinePlaceholder":520},[456,745,747,750,752,755,757,759,761,764],{"class":458,"line":746},17,[456,748,749],{"class":462},"  return",[456,751,467],{"class":466},[456,753,754],{"class":575}," text",[456,756,633],{"class":466},[456,758,612],{"class":470},[456,760,638],{"class":466},[456,762,763],{"class":470},"text",[456,765,766],{"class":466}," }\n",[456,768,770,773],{"class":458,"line":769},18,[456,771,772],{"class":466},"}",[456,774,580],{"class":470},[414,776,777],{},"Your wide event now includes per-tool timing:",[446,779,784],{"className":780,"code":781,"filename":782,"language":783,"meta":452,"style":452},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"ai\": {\n    \"calls\": 2,\n    \"steps\": 2,\n    \"model\": \"claude-sonnet-4.6\",\n    \"provider\": \"anthropic\",\n    \"inputTokens\": 3500,\n    \"outputTokens\": 800,\n    \"totalTokens\": 4300,\n    \"toolCalls\": [\"getWeather\", \"searchDB\"],\n    \"tools\": [\n      { \"name\": \"getWeather\", \"durationMs\": 150, \"success\": true },\n      { \"name\": \"searchDB\", \"durationMs\": 45, \"success\": true }\n    ],\n    \"totalDurationMs\": 2340,\n    \"msToFirstChunk\": 180,\n    \"msToFinish\": 2100,\n    \"tokensPerSecond\": 380\n  }\n}\n","Wide Event","json",[417,785,786,790,804,823,838,859,879,895,911,927,959,973,1022,1067,1072,1088,1104,1120,1134,1140],{"__ignoreMap":452},[456,787,788],{"class":458,"line":459},[456,789,624],{"class":466},[456,791,792,795,797,800,802],{"class":458,"line":490},[456,793,794],{"class":466},"  \"",[456,796,484],{"class":540},[456,798,799],{"class":466},"\"",[456,801,633],{"class":466},[456,803,557],{"class":466},[456,805,806,809,813,815,817,821],{"class":458,"line":517},[456,807,808],{"class":466},"    \"",[456,810,812],{"class":811},"sBMFI","calls",[456,814,799],{"class":466},[456,816,633],{"class":466},[456,818,820],{"class":819},"sbssI"," 2",[456,822,656],{"class":466},[456,824,825,827,830,832,834,836],{"class":458,"line":524},[456,826,808],{"class":466},[456,828,829],{"class":811},"steps",[456,831,799],{"class":466},[456,833,633],{"class":466},[456,835,820],{"class":819},[456,837,656],{"class":466},[456,839,840,842,845,847,849,852,855,857],{"class":458,"line":560},[456,841,808],{"class":466},[456,843,844],{"class":811},"model",[456,846,799],{"class":466},[456,848,633],{"class":466},[456,850,851],{"class":466}," \"",[456,853,854],{"class":483},"claude-sonnet-4.6",[456,856,799],{"class":466},[456,858,656],{"class":466},[456,860,861,863,866,868,870,872,875,877],{"class":458,"line":583},[456,862,808],{"class":466},[456,864,865],{"class":811},"provider",[456,867,799],{"class":466},[456,869,633],{"class":466},[456,871,851],{"class":466},[456,873,874],{"class":483},"anthropic",[456,876,799],{"class":466},[456,878,656],{"class":466},[456,880,881,883,886,888,890,893],{"class":458,"line":602},[456,882,808],{"class":466},[456,884,885],{"class":811},"inputTokens",[456,887,799],{"class":466},[456,889,633],{"class":466},[456,891,892],{"class":819}," 3500",[456,894,656],{"class":466},[456,896,897,899,902,904,906,909],{"class":458,"line":607},[456,898,808],{"class":466},[456,900,901],{"class":811},"outputTokens",[456,903,799],{"class":466},[456,905,633],{"class":466},[456,907,908],{"class":819}," 800",[456,910,656],{"class":466},[456,912,913,915,918,920,922,925],{"class":458,"line":627},[456,914,808],{"class":466},[456,916,917],{"class":811},"totalTokens",[456,919,799],{"class":466},[456,921,633],{"class":466},[456,923,924],{"class":819}," 4300",[456,926,656],{"class":466},[456,928,929,931,934,936,938,940,942,945,947,949,951,954,956],{"class":458,"line":659},[456,930,808],{"class":466},[456,932,933],{"class":811},"toolCalls",[456,935,799],{"class":466},[456,937,633],{"class":466},[456,939,712],{"class":466},[456,941,799],{"class":466},[456,943,944],{"class":483},"getWeather",[456,946,799],{"class":466},[456,948,500],{"class":466},[456,950,851],{"class":466},[456,952,953],{"class":483},"searchDB",[456,955,799],{"class":466},[456,957,958],{"class":466},"],\n",[456,960,961,963,966,968,970],{"class":458,"line":680},[456,962,808],{"class":466},[456,964,965],{"class":811},"tools",[456,967,799],{"class":466},[456,969,633],{"class":466},[456,971,972],{"class":466}," [\n",[456,974,975,978,980,983,985,987,989,991,993,995,997,1000,1002,1004,1007,1009,1011,1014,1016,1018,1020],{"class":458,"line":690},[456,976,977],{"class":466},"      {",[456,979,851],{"class":466},[456,981,982],{"class":819},"name",[456,984,799],{"class":466},[456,986,633],{"class":466},[456,988,851],{"class":466},[456,990,944],{"class":483},[456,992,799],{"class":466},[456,994,500],{"class":466},[456,996,851],{"class":466},[456,998,999],{"class":819},"durationMs",[456,1001,799],{"class":466},[456,1003,633],{"class":466},[456,1005,1006],{"class":819}," 150",[456,1008,500],{"class":466},[456,1010,851],{"class":466},[456,1012,1013],{"class":819},"success",[456,1015,799],{"class":466},[456,1017,633],{"class":466},[456,1019,699],{"class":466},[456,1021,677],{"class":466},[456,1023,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046,1048,1050,1053,1055,1057,1059,1061,1063,1065],{"class":458,"line":704},[456,1025,977],{"class":466},[456,1027,851],{"class":466},[456,1029,982],{"class":819},[456,1031,799],{"class":466},[456,1033,633],{"class":466},[456,1035,851],{"class":466},[456,1037,953],{"class":483},[456,1039,799],{"class":466},[456,1041,500],{"class":466},[456,1043,851],{"class":466},[456,1045,999],{"class":819},[456,1047,799],{"class":466},[456,1049,633],{"class":466},[456,1051,1052],{"class":819}," 45",[456,1054,500],{"class":466},[456,1056,851],{"class":466},[456,1058,1013],{"class":819},[456,1060,799],{"class":466},[456,1062,633],{"class":466},[456,1064,699],{"class":466},[456,1066,766],{"class":466},[456,1068,1069],{"class":458,"line":727},[456,1070,1071],{"class":466},"    ],\n",[456,1073,1074,1076,1079,1081,1083,1086],{"class":458,"line":733},[456,1075,808],{"class":466},[456,1077,1078],{"class":811},"totalDurationMs",[456,1080,799],{"class":466},[456,1082,633],{"class":466},[456,1084,1085],{"class":819}," 2340",[456,1087,656],{"class":466},[456,1089,1090,1092,1095,1097,1099,1102],{"class":458,"line":741},[456,1091,808],{"class":466},[456,1093,1094],{"class":811},"msToFirstChunk",[456,1096,799],{"class":466},[456,1098,633],{"class":466},[456,1100,1101],{"class":819}," 180",[456,1103,656],{"class":466},[456,1105,1106,1108,1111,1113,1115,1118],{"class":458,"line":746},[456,1107,808],{"class":466},[456,1109,1110],{"class":811},"msToFinish",[456,1112,799],{"class":466},[456,1114,633],{"class":466},[456,1116,1117],{"class":819}," 2100",[456,1119,656],{"class":466},[456,1121,1122,1124,1127,1129,1131],{"class":458,"line":769},[456,1123,808],{"class":466},[456,1125,1126],{"class":811},"tokensPerSecond",[456,1128,799],{"class":466},[456,1130,633],{"class":466},[456,1132,1133],{"class":819}," 380\n",[456,1135,1137],{"class":458,"line":1136},19,[456,1138,1139],{"class":466},"  }\n",[456,1141,1143],{"class":458,"line":1142},20,[456,1144,1145],{"class":466},"}\n",[430,1147,1149],{"id":1148},"standalone-without-middleware","Standalone (without middleware)",[414,1151,1152],{},"If your model is already wrapped (e.g. by another middleware), pass the request logger directly:",[446,1154,1157],{"className":448,"code":1155,"filename":1156,"language":451,"meta":452,"style":452},"import { createEvlogIntegration } from 'evlog\u002Fai'\n\nconst integration = createEvlogIntegration(log)\n\nconst result = await generateText({\n  model: somePreWrappedModel,\n  experimental_telemetry: {\n    isEnabled: true,\n    integrations: [integration],\n  },\n})\n","server\u002Fapi\u002Fchat.post.ts",[417,1158,1159,1177,1181,1197,1201,1218,1230,1239,1250,1262,1267],{"__ignoreMap":452},[456,1160,1161,1163,1165,1167,1169,1171,1173,1175],{"class":458,"line":459},[456,1162,463],{"class":462},[456,1164,467],{"class":466},[456,1166,503],{"class":470},[456,1168,474],{"class":466},[456,1170,477],{"class":462},[456,1172,480],{"class":466},[456,1174,512],{"class":483},[456,1176,487],{"class":466},[456,1178,1179],{"class":458,"line":490},[456,1180,521],{"emptyLinePlaceholder":520},[456,1182,1183,1186,1189,1192,1194],{"class":458,"line":517},[456,1184,1185],{"class":540},"const",[456,1187,1188],{"class":470}," integration ",[456,1190,1191],{"class":466},"=",[456,1193,503],{"class":533},[456,1195,1196],{"class":470},"(log)\n",[456,1198,1199],{"class":458,"line":524},[456,1200,521],{"emptyLinePlaceholder":520},[456,1202,1203,1205,1208,1210,1212,1214,1216],{"class":458,"line":560},[456,1204,1185],{"class":540},[456,1206,1207],{"class":470}," result ",[456,1209,1191],{"class":466},[456,1211,617],{"class":462},[456,1213,471],{"class":533},[456,1215,537],{"class":470},[456,1217,624],{"class":466},[456,1219,1220,1223,1225,1228],{"class":458,"line":583},[456,1221,1222],{"class":575},"  model",[456,1224,633],{"class":466},[456,1226,1227],{"class":470}," somePreWrappedModel",[456,1229,656],{"class":466},[456,1231,1232,1235,1237],{"class":458,"line":602},[456,1233,1234],{"class":575},"  experimental_telemetry",[456,1236,633],{"class":466},[456,1238,557],{"class":466},[456,1240,1241,1244,1246,1248],{"class":458,"line":607},[456,1242,1243],{"class":575},"    isEnabled",[456,1245,633],{"class":466},[456,1247,699],{"class":698},[456,1249,656],{"class":466},[456,1251,1252,1255,1257,1260],{"class":458,"line":627},[456,1253,1254],{"class":575},"    integrations",[456,1256,633],{"class":466},[456,1258,1259],{"class":470}," [integration]",[456,1261,656],{"class":466},[456,1263,1264],{"class":458,"line":659},[456,1265,1266],{"class":466},"  },\n",[456,1268,1269,1271],{"class":458,"line":680},[456,1270,772],{"class":466},[456,1272,580],{"class":470},[430,1274,1276],{"id":1275},"what-the-integration-captures","What the integration captures",[1278,1279,1280,1296],"table",{},[1281,1282,1283],"thead",{},[1284,1285,1286,1290,1293],"tr",{},[1287,1288,1289],"th",{},"Data",[1287,1291,1292],{},"Source",[1287,1294,1295],{},"Description",[1297,1298,1299,1327],"tbody",{},[1284,1300,1301,1307,1312],{},[1302,1303,1304],"td",{},[417,1305,1306],{},"ai.tools[]",[1302,1308,1309],{},[417,1310,1311],{},"onToolCallFinish",[1302,1313,1314,1315,1317,1318,1317,1320,1322,1323,1326],{},"Per-tool ",[417,1316,982],{},", ",[417,1319,999],{},[417,1321,1013],{},", and ",[417,1324,1325],{},"error"," (if failed)",[1284,1328,1329,1334,1343],{},[1302,1330,1331],{},[417,1332,1333],{},"ai.totalDurationMs",[1302,1335,1336,1339,1340],{},[417,1337,1338],{},"onStart"," → ",[417,1341,1342],{},"onFinish",[1302,1344,1345],{},"Total wall time from generation start to completion",[414,1347,1348],{},"The middleware captures tokens, model info, and streaming metrics. The integration captures tool execution timing. Together, they give you complete AI observability.",[430,1350,1352],{"id":1351},"composability","Composability",[414,1354,1355,1358,1359,633],{},[417,1356,1357],{},"ai.wrap()"," works with models that are already wrapped by other tools. If you use supermemory, guardrails middleware, or any other model wrapper, pass the wrapped model to ",[417,1360,1357],{},[446,1362,1364],{"className":448,"code":1363,"filename":1156,"language":451,"meta":452,"style":452},"import { createAILogger } from 'evlog\u002Fai'\nimport { withSupermemory } from '@supermemory\u002Ftools\u002Fai-sdk'\nimport { createGateway } from 'ai'\n\nconst gateway = createGateway({ ... })\nconst ai = createAILogger(log)\nconst base = gateway('anthropic\u002Fclaude-sonnet-4.6')\nconst model = ai.wrap(withSupermemory(base, 'your-org-id', { mode: 'full' }))\n",[417,1365,1366,1384,1404,1423,1427,1450,1463,1485],{"__ignoreMap":452},[456,1367,1368,1370,1372,1374,1376,1378,1380,1382],{"class":458,"line":459},[456,1369,463],{"class":462},[456,1371,467],{"class":466},[456,1373,497],{"class":470},[456,1375,474],{"class":466},[456,1377,477],{"class":462},[456,1379,480],{"class":466},[456,1381,512],{"class":483},[456,1383,487],{"class":466},[456,1385,1386,1388,1390,1393,1395,1397,1399,1402],{"class":458,"line":490},[456,1387,463],{"class":462},[456,1389,467],{"class":466},[456,1391,1392],{"class":470}," withSupermemory",[456,1394,474],{"class":466},[456,1396,477],{"class":462},[456,1398,480],{"class":466},[456,1400,1401],{"class":483},"@supermemory\u002Ftools\u002Fai-sdk",[456,1403,487],{"class":466},[456,1405,1406,1408,1410,1413,1415,1417,1419,1421],{"class":458,"line":517},[456,1407,463],{"class":462},[456,1409,467],{"class":466},[456,1411,1412],{"class":470}," createGateway",[456,1414,474],{"class":466},[456,1416,477],{"class":462},[456,1418,480],{"class":466},[456,1420,484],{"class":483},[456,1422,487],{"class":466},[456,1424,1425],{"class":458,"line":524},[456,1426,521],{"emptyLinePlaceholder":520},[456,1428,1429,1431,1434,1436,1438,1440,1443,1446,1448],{"class":458,"line":560},[456,1430,1185],{"class":540},[456,1432,1433],{"class":470}," gateway ",[456,1435,1191],{"class":466},[456,1437,1412],{"class":533},[456,1439,537],{"class":470},[456,1441,1442],{"class":466},"{",[456,1444,1445],{"class":466}," ...",[456,1447,474],{"class":466},[456,1449,580],{"class":470},[456,1451,1452,1454,1457,1459,1461],{"class":458,"line":583},[456,1453,1185],{"class":540},[456,1455,1456],{"class":470}," ai ",[456,1458,1191],{"class":466},[456,1460,497],{"class":533},[456,1462,1196],{"class":470},[456,1464,1465,1467,1470,1472,1475,1477,1479,1481,1483],{"class":458,"line":602},[456,1466,1185],{"class":540},[456,1468,1469],{"class":470}," base ",[456,1471,1191],{"class":466},[456,1473,1474],{"class":533}," gateway",[456,1476,537],{"class":470},[456,1478,646],{"class":466},[456,1480,649],{"class":483},[456,1482,646],{"class":466},[456,1484,580],{"class":470},[456,1486,1487,1489,1492,1494,1496,1498,1500,1502,1505,1508,1510,1512,1515,1517,1519,1521,1524,1526,1528,1531,1533,1535],{"class":458,"line":607},[456,1488,1185],{"class":540},[456,1490,1491],{"class":470}," model ",[456,1493,1191],{"class":466},[456,1495,588],{"class":470},[456,1497,638],{"class":466},[456,1499,641],{"class":533},[456,1501,537],{"class":470},[456,1503,1504],{"class":533},"withSupermemory",[456,1506,1507],{"class":470},"(base",[456,1509,500],{"class":466},[456,1511,480],{"class":466},[456,1513,1514],{"class":483},"your-org-id",[456,1516,646],{"class":466},[456,1518,500],{"class":466},[456,1520,467],{"class":466},[456,1522,1523],{"class":575}," mode",[456,1525,633],{"class":466},[456,1527,480],{"class":466},[456,1529,1530],{"class":483},"full",[456,1532,646],{"class":466},[456,1534,474],{"class":466},[456,1536,1537],{"class":470},"))\n",[414,1539,1540,1541,1544,1545,633],{},"For explicit middleware composition, use ",[417,1542,1543],{},"createAIMiddleware"," to get the raw middleware and compose it yourself via ",[417,1546,1547],{},"wrapLanguageModel",[446,1549,1551],{"className":448,"code":1550,"filename":1156,"language":451,"meta":452,"style":452},"import { createAIMiddleware } from 'evlog\u002Fai'\nimport { wrapLanguageModel } from 'ai'\n\nconst model = wrapLanguageModel({\n  model: base,\n  middleware: [createAIMiddleware(log, { toolInputs: true }), otherMiddleware],\n})\n",[417,1552,1553,1572,1591,1595,1609,1620,1656],{"__ignoreMap":452},[456,1554,1555,1557,1559,1562,1564,1566,1568,1570],{"class":458,"line":459},[456,1556,463],{"class":462},[456,1558,467],{"class":466},[456,1560,1561],{"class":470}," createAIMiddleware",[456,1563,474],{"class":466},[456,1565,477],{"class":462},[456,1567,480],{"class":466},[456,1569,512],{"class":483},[456,1571,487],{"class":466},[456,1573,1574,1576,1578,1581,1583,1585,1587,1589],{"class":458,"line":490},[456,1575,463],{"class":462},[456,1577,467],{"class":466},[456,1579,1580],{"class":470}," wrapLanguageModel",[456,1582,474],{"class":466},[456,1584,477],{"class":462},[456,1586,480],{"class":466},[456,1588,484],{"class":483},[456,1590,487],{"class":466},[456,1592,1593],{"class":458,"line":517},[456,1594,521],{"emptyLinePlaceholder":520},[456,1596,1597,1599,1601,1603,1605,1607],{"class":458,"line":524},[456,1598,1185],{"class":540},[456,1600,1491],{"class":470},[456,1602,1191],{"class":466},[456,1604,1580],{"class":533},[456,1606,537],{"class":470},[456,1608,624],{"class":466},[456,1610,1611,1613,1615,1618],{"class":458,"line":560},[456,1612,1222],{"class":575},[456,1614,633],{"class":466},[456,1616,1617],{"class":470}," base",[456,1619,656],{"class":466},[456,1621,1622,1625,1627,1629,1631,1634,1636,1638,1641,1643,1645,1647,1649,1651,1654],{"class":458,"line":583},[456,1623,1624],{"class":575},"  middleware",[456,1626,633],{"class":466},[456,1628,712],{"class":470},[456,1630,1543],{"class":533},[456,1632,1633],{"class":470},"(log",[456,1635,500],{"class":466},[456,1637,467],{"class":466},[456,1639,1640],{"class":575}," toolInputs",[456,1642,633],{"class":466},[456,1644,699],{"class":698},[456,1646,474],{"class":466},[456,1648,551],{"class":470},[456,1650,500],{"class":466},[456,1652,1653],{"class":470}," otherMiddleware]",[456,1655,656],{"class":466},[456,1657,1658,1660],{"class":458,"line":602},[456,1659,772],{"class":466},[456,1661,580],{"class":470},[414,1663,1664,1666,1667,1669,1670,1672,1673,1676,1677,1679,1680,1682],{},[417,1665,1543],{}," returns the same middleware that ",[417,1668,419],{}," uses internally. The difference: ",[417,1671,1543],{}," does not include ",[417,1674,1675],{},"captureEmbed"," (embedding models don't use middleware). Use ",[417,1678,419],{}," for the full API, ",[417,1681,1543],{}," when you need explicit middleware ordering.",[1684,1685,1686],"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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":452,"searchDepth":490,"depth":490,"links":1688},[1689,1690,1691,1692],{"id":432,"depth":490,"text":433},{"id":1148,"depth":490,"text":1149},{"id":1275,"depth":490,"text":1276},{"id":1351,"depth":490,"text":1352},"Add tool execution timing and total wall time with createEvlogIntegration. Compose with other middleware like supermemory or guardrails.","md",[1696,1699],{"label":41,"icon":44,"to":77,"color":1697,"variant":1698},"neutral","subtle",{"label":1700,"icon":83,"to":81,"color":1697,"variant":1698},"Usage Patterns",{},{"title":95,"icon":98},{"title":409,"description":1693},"WhbBRzREyxKmgO14d6e8TZxaYaYlecS7spxQ6m5kUtw",[1706,1708],{"title":90,"path":91,"stem":92,"description":1707,"icon":93,"children":-1},"Read AI metadata from your handler — persist it, surface it to end-users, bill against it, or stream incremental progress to the client.",{"title":41,"path":106,"stem":107,"description":1709,"icon":44,"children":-1},"Automatically identify users on every request. Every wide event includes who made the request — userId, user profile, and session metadata — with zero manual work.",1778327128962]