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