[{"data":1,"prerenderedAt":4980},["ShallowReactive",2],{"navigation_docs":3,"-logging-ai-sdk":282,"-logging-ai-sdk-surround":4975},[4,30,65,105,188,252,268],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"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",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[70,75,80,85,90,95,100],{"title":71,"path":72,"stem":73,"icon":74},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":76,"path":77,"stem":78,"icon":79},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":81,"path":82,"stem":83,"icon":84},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":86,"path":87,"stem":88,"icon":89},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":91,"path":92,"stem":93,"icon":94},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices","i-lucide-shield-check",{"title":96,"path":97,"stem":98,"icon":99},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":101,"path":102,"stem":103,"icon":104},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[110,114,119,124,129,134,139,144,149,154,159,164,169,174,178,183],{"title":36,"path":111,"stem":112,"icon":113},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":115,"path":116,"stem":117,"icon":118},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":120,"path":121,"stem":122,"icon":123},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":125,"path":126,"stem":127,"icon":128},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":130,"path":131,"stem":132,"icon":133},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":135,"path":136,"stem":137,"icon":138},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":140,"path":141,"stem":142,"icon":143},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":145,"path":146,"stem":147,"icon":148},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":150,"path":151,"stem":152,"icon":153},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":155,"path":156,"stem":157,"icon":158},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":160,"path":161,"stem":162,"icon":163},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":165,"path":166,"stem":167,"icon":168},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":170,"path":171,"stem":172,"icon":173},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":175,"path":176,"stem":177,"icon":89},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":179,"path":180,"stem":181,"icon":182},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":184,"path":185,"stem":186,"icon":187},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Adapters","\u002Fadapters","5.adapters",[193,197,202,207,212,217,222,227,232,237,242,247],{"title":36,"path":194,"stem":195,"icon":196},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":198,"path":199,"stem":200,"icon":201},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":203,"path":204,"stem":205,"icon":206},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":208,"path":209,"stem":210,"icon":211},"Browser","\u002Fadapters\u002Fbrowser","5.adapters\u002F12.browser","i-lucide-globe",{"title":213,"path":214,"stem":215,"icon":216},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":218,"path":219,"stem":220,"icon":221},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":223,"path":224,"stem":225,"icon":226},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":228,"path":229,"stem":230,"icon":231},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":233,"path":234,"stem":235,"icon":236},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":238,"path":239,"stem":240,"icon":241},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":243,"path":244,"stem":245,"icon":246},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":248,"path":249,"stem":250,"icon":251},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":253,"path":254,"stem":255,"children":256,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[257,260,264],{"title":36,"path":258,"stem":259,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":261,"path":262,"stem":263,"icon":187},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":265,"path":266,"stem":267,"icon":201},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":269,"path":270,"stem":271,"children":272,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[273,277],{"title":36,"path":274,"stem":275,"icon":276},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":278,"path":279,"stem":280,"icon":281},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":283,"title":61,"body":284,"description":4963,"extension":4964,"links":4965,"meta":4971,"navigation":4972,"path":62,"seo":4973,"stem":63,"__hash__":4974},"docs\u002F2.logging\u002F5.ai-sdk.md",{"type":285,"value":286,"toc":4944},"minimark",[287,295,382,387,390,442,445,448,759,762,1070,1074,1084,1158,1161,1166,1213,1220,1271,1497,1501,1504,1507,1799,1802,1805,2000,2004,2007,2318,2321,2919,2923,2930,3267,3271,3281,3588,3592,3598,3657,3661,3969,3973,3981,4154,4164,4277,4298,4302,4305,4421,4424,4428,4433,4940],[288,289,290,294],"p",{},[291,292,293],"code",{},"evlog\u002Fai"," gives you full AI observability by wrapping your model with middleware. Token usage, tool calls, streaming performance, cache hits, reasoning tokens, all captured into the wide event automatically.",[296,297,298],"code-collapse",{},[299,300,306],"pre",{"className":301,"code":302,"filename":303,"language":304,"meta":305,"style":305},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Add AI observability to my app with evlog.\n\n- Install the AI SDK: pnpm add ai\n- Import createAILogger from 'evlog\u002Fai'\n- Create an AI logger with createAILogger(log) where log is your request logger\n- Wrap your model with ai.wrap('anthropic\u002Fclaude-sonnet-4.6') and pass it to generateText, streamText, etc.\n- Token usage, tool calls, streaming metrics, and errors are captured automatically into the wide event\n- For embedding calls, use ai.captureEmbed({ usage }) after embed() or embedMany()\n- Works with all frameworks: Nuxt, Express, Hono, Fastify, NestJS, Elysia, standalone\n\nDocs: https:\u002F\u002Fwww.evlog.dev\u002Flogging\u002Fai-sdk\nAdapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n","Prompt","txt","",[291,307,308,316,323,329,335,341,347,353,359,365,370,376],{"__ignoreMap":305},[309,310,313],"span",{"class":311,"line":312},"line",1,[309,314,315],{},"Add AI observability to my app with evlog.\n",[309,317,319],{"class":311,"line":318},2,[309,320,322],{"emptyLinePlaceholder":321},true,"\n",[309,324,326],{"class":311,"line":325},3,[309,327,328],{},"- Install the AI SDK: pnpm add ai\n",[309,330,332],{"class":311,"line":331},4,[309,333,334],{},"- Import createAILogger from 'evlog\u002Fai'\n",[309,336,338],{"class":311,"line":337},5,[309,339,340],{},"- Create an AI logger with createAILogger(log) where log is your request logger\n",[309,342,344],{"class":311,"line":343},6,[309,345,346],{},"- Wrap your model with ai.wrap('anthropic\u002Fclaude-sonnet-4.6') and pass it to generateText, streamText, etc.\n",[309,348,350],{"class":311,"line":349},7,[309,351,352],{},"- Token usage, tool calls, streaming metrics, and errors are captured automatically into the wide event\n",[309,354,356],{"class":311,"line":355},8,[309,357,358],{},"- For embedding calls, use ai.captureEmbed({ usage }) after embed() or embedMany()\n",[309,360,362],{"class":311,"line":361},9,[309,363,364],{},"- Works with all frameworks: Nuxt, Express, Hono, Fastify, NestJS, Elysia, standalone\n",[309,366,368],{"class":311,"line":367},10,[309,369,322],{"emptyLinePlaceholder":321},[309,371,373],{"class":311,"line":372},11,[309,374,375],{},"Docs: https:\u002F\u002Fwww.evlog.dev\u002Flogging\u002Fai-sdk\n",[309,377,379],{"class":311,"line":378},12,[309,380,381],{},"Adapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n",[383,384,386],"h2",{"id":385},"install","Install",[288,388,389],{},"Add the AI SDK as a dependency:",[391,392,393,413,428],"code-group",{},[299,394,399],{"className":395,"code":396,"filename":397,"language":398,"meta":305,"style":305},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install ai\n","npm","bash",[291,400,401],{"__ignoreMap":305},[309,402,403,406,410],{"class":311,"line":312},[309,404,397],{"class":405},"sBMFI",[309,407,409],{"class":408},"sfazB"," install",[309,411,412],{"class":408}," ai\n",[299,414,417],{"className":395,"code":415,"filename":416,"language":398,"meta":305,"style":305},"bun add ai\n","bun",[291,418,419],{"__ignoreMap":305},[309,420,421,423,426],{"class":311,"line":312},[309,422,416],{"class":405},[309,424,425],{"class":408}," add",[309,427,412],{"class":408},[299,429,432],{"className":395,"code":430,"filename":431,"language":398,"meta":305,"style":305},"pnpm add ai\n","pnpm",[291,433,434],{"__ignoreMap":305},[309,435,436,438,440],{"class":311,"line":312},[309,437,431],{"class":405},[309,439,425],{"class":408},[309,441,412],{"class":408},[383,443,20],{"id":444},"quick-start",[288,446,447],{},"Two lines to add, one param to change:",[391,449,450,574],{},[299,451,456],{"className":452,"code":453,"filename":454,"language":455,"meta":305,"style":305},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineEventHandler(async (event) => {\n  const result = streamText({\n    model: 'anthropic\u002Fclaude-sonnet-4.6',\n    messages,\n  })\n  return result.toTextStreamResponse()\n})\n","Before","typescript",[291,457,458,496,516,536,543,551,567],{"__ignoreMap":305},[309,459,460,464,467,471,475,479,483,487,490,493],{"class":311,"line":312},[309,461,463],{"class":462},"s7zQu","export",[309,465,466],{"class":462}," default",[309,468,470],{"class":469},"s2Zo4"," defineEventHandler",[309,472,474],{"class":473},"sTEyZ","(",[309,476,478],{"class":477},"spNyl","async",[309,480,482],{"class":481},"sMK4o"," (",[309,484,486],{"class":485},"sHdIc","event",[309,488,489],{"class":481},")",[309,491,492],{"class":477}," =>",[309,494,495],{"class":481}," {\n",[309,497,498,501,504,507,510,513],{"class":311,"line":318},[309,499,500],{"class":477},"  const",[309,502,503],{"class":473}," result",[309,505,506],{"class":481}," =",[309,508,509],{"class":469}," streamText",[309,511,474],{"class":512},"swJcz",[309,514,515],{"class":481},"{\n",[309,517,518,521,524,527,530,533],{"class":311,"line":325},[309,519,520],{"class":512},"    model",[309,522,523],{"class":481},":",[309,525,526],{"class":481}," '",[309,528,529],{"class":408},"anthropic\u002Fclaude-sonnet-4.6",[309,531,532],{"class":481},"'",[309,534,535],{"class":481},",\n",[309,537,538,541],{"class":311,"line":331},[309,539,540],{"class":473},"    messages",[309,542,535],{"class":481},[309,544,545,548],{"class":311,"line":337},[309,546,547],{"class":481},"  }",[309,549,550],{"class":512},")\n",[309,552,553,556,558,561,564],{"class":311,"line":343},[309,554,555],{"class":462},"  return",[309,557,503],{"class":473},[309,559,560],{"class":481},".",[309,562,563],{"class":469},"toTextStreamResponse",[309,565,566],{"class":512},"()\n",[309,568,569,572],{"class":311,"line":349},[309,570,571],{"class":481},"}",[309,573,550],{"class":473},[299,575,578],{"className":452,"code":576,"filename":577,"language":455,"meta":305,"style":305},"import { useLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log)\n\n  const result = streamText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    messages,\n  })\n  return result.toTextStreamResponse()\n})\n","After",[291,579,580,605,624,628,650,667,685,689,703,728,734,740,752],{"__ignoreMap":305},[309,581,582,585,588,591,594,597,599,602],{"class":311,"line":312},[309,583,584],{"class":462},"import",[309,586,587],{"class":481}," {",[309,589,590],{"class":473}," useLogger",[309,592,593],{"class":481}," }",[309,595,596],{"class":462}," from",[309,598,526],{"class":481},[309,600,601],{"class":408},"evlog",[309,603,604],{"class":481},"'\n",[309,606,607,609,611,614,616,618,620,622],{"class":311,"line":318},[309,608,584],{"class":462},[309,610,587],{"class":481},[309,612,613],{"class":473}," createAILogger",[309,615,593],{"class":481},[309,617,596],{"class":462},[309,619,526],{"class":481},[309,621,293],{"class":408},[309,623,604],{"class":481},[309,625,626],{"class":311,"line":325},[309,627,322],{"emptyLinePlaceholder":321},[309,629,630,632,634,636,638,640,642,644,646,648],{"class":311,"line":331},[309,631,463],{"class":462},[309,633,466],{"class":462},[309,635,470],{"class":469},[309,637,474],{"class":473},[309,639,478],{"class":477},[309,641,482],{"class":481},[309,643,486],{"class":485},[309,645,489],{"class":481},[309,647,492],{"class":477},[309,649,495],{"class":481},[309,651,652,654,657,659,661,663,665],{"class":311,"line":337},[309,653,500],{"class":477},[309,655,656],{"class":473}," log",[309,658,506],{"class":481},[309,660,590],{"class":469},[309,662,474],{"class":512},[309,664,486],{"class":473},[309,666,550],{"class":512},[309,668,669,671,674,676,678,680,683],{"class":311,"line":343},[309,670,500],{"class":477},[309,672,673],{"class":473}," ai",[309,675,506],{"class":481},[309,677,613],{"class":469},[309,679,474],{"class":512},[309,681,682],{"class":473},"log",[309,684,550],{"class":512},[309,686,687],{"class":311,"line":349},[309,688,322],{"emptyLinePlaceholder":321},[309,690,691,693,695,697,699,701],{"class":311,"line":355},[309,692,500],{"class":477},[309,694,503],{"class":473},[309,696,506],{"class":481},[309,698,509],{"class":469},[309,700,474],{"class":512},[309,702,515],{"class":481},[309,704,705,707,709,711,713,716,718,720,722,724,726],{"class":311,"line":361},[309,706,520],{"class":512},[309,708,523],{"class":481},[309,710,673],{"class":473},[309,712,560],{"class":481},[309,714,715],{"class":469},"wrap",[309,717,474],{"class":512},[309,719,532],{"class":481},[309,721,529],{"class":408},[309,723,532],{"class":481},[309,725,489],{"class":512},[309,727,535],{"class":481},[309,729,730,732],{"class":311,"line":367},[309,731,540],{"class":473},[309,733,535],{"class":481},[309,735,736,738],{"class":311,"line":372},[309,737,547],{"class":481},[309,739,550],{"class":512},[309,741,742,744,746,748,750],{"class":311,"line":378},[309,743,555],{"class":462},[309,745,503],{"class":473},[309,747,560],{"class":481},[309,749,563],{"class":469},[309,751,566],{"class":512},[309,753,755,757],{"class":311,"line":754},13,[309,756,571],{"class":481},[309,758,550],{"class":473},[288,760,761],{},"Your wide event now includes:",[299,763,768],{"className":764,"code":765,"filename":766,"language":767,"meta":305,"style":305},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fchat\",\n  \"status\": 200,\n  \"duration\": \"4.5s\",\n  \"ai\": {\n    \"calls\": 1,\n    \"model\": \"claude-sonnet-4.6\",\n    \"provider\": \"anthropic\",\n    \"inputTokens\": 3312,\n    \"outputTokens\": 814,\n    \"totalTokens\": 4126,\n    \"reasoningTokens\": 225,\n    \"finishReason\": \"stop\",\n    \"msToFirstChunk\": 234,\n    \"msToFinish\": 4500,\n    \"tokensPerSecond\": 180\n  }\n}\n","Wide Event","json",[291,769,770,774,797,817,834,854,867,884,904,924,940,956,972,988,1009,1026,1043,1058,1064],{"__ignoreMap":305},[309,771,772],{"class":311,"line":312},[309,773,515],{"class":481},[309,775,776,779,782,785,787,790,793,795],{"class":311,"line":318},[309,777,778],{"class":481},"  \"",[309,780,781],{"class":477},"method",[309,783,784],{"class":481},"\"",[309,786,523],{"class":481},[309,788,789],{"class":481}," \"",[309,791,792],{"class":408},"POST",[309,794,784],{"class":481},[309,796,535],{"class":481},[309,798,799,801,804,806,808,810,813,815],{"class":311,"line":325},[309,800,778],{"class":481},[309,802,803],{"class":477},"path",[309,805,784],{"class":481},[309,807,523],{"class":481},[309,809,789],{"class":481},[309,811,812],{"class":408},"\u002Fapi\u002Fchat",[309,814,784],{"class":481},[309,816,535],{"class":481},[309,818,819,821,824,826,828,832],{"class":311,"line":331},[309,820,778],{"class":481},[309,822,823],{"class":477},"status",[309,825,784],{"class":481},[309,827,523],{"class":481},[309,829,831],{"class":830},"sbssI"," 200",[309,833,535],{"class":481},[309,835,836,838,841,843,845,847,850,852],{"class":311,"line":337},[309,837,778],{"class":481},[309,839,840],{"class":477},"duration",[309,842,784],{"class":481},[309,844,523],{"class":481},[309,846,789],{"class":481},[309,848,849],{"class":408},"4.5s",[309,851,784],{"class":481},[309,853,535],{"class":481},[309,855,856,858,861,863,865],{"class":311,"line":343},[309,857,778],{"class":481},[309,859,860],{"class":477},"ai",[309,862,784],{"class":481},[309,864,523],{"class":481},[309,866,495],{"class":481},[309,868,869,872,875,877,879,882],{"class":311,"line":349},[309,870,871],{"class":481},"    \"",[309,873,874],{"class":405},"calls",[309,876,784],{"class":481},[309,878,523],{"class":481},[309,880,881],{"class":830}," 1",[309,883,535],{"class":481},[309,885,886,888,891,893,895,897,900,902],{"class":311,"line":355},[309,887,871],{"class":481},[309,889,890],{"class":405},"model",[309,892,784],{"class":481},[309,894,523],{"class":481},[309,896,789],{"class":481},[309,898,899],{"class":408},"claude-sonnet-4.6",[309,901,784],{"class":481},[309,903,535],{"class":481},[309,905,906,908,911,913,915,917,920,922],{"class":311,"line":361},[309,907,871],{"class":481},[309,909,910],{"class":405},"provider",[309,912,784],{"class":481},[309,914,523],{"class":481},[309,916,789],{"class":481},[309,918,919],{"class":408},"anthropic",[309,921,784],{"class":481},[309,923,535],{"class":481},[309,925,926,928,931,933,935,938],{"class":311,"line":367},[309,927,871],{"class":481},[309,929,930],{"class":405},"inputTokens",[309,932,784],{"class":481},[309,934,523],{"class":481},[309,936,937],{"class":830}," 3312",[309,939,535],{"class":481},[309,941,942,944,947,949,951,954],{"class":311,"line":372},[309,943,871],{"class":481},[309,945,946],{"class":405},"outputTokens",[309,948,784],{"class":481},[309,950,523],{"class":481},[309,952,953],{"class":830}," 814",[309,955,535],{"class":481},[309,957,958,960,963,965,967,970],{"class":311,"line":378},[309,959,871],{"class":481},[309,961,962],{"class":405},"totalTokens",[309,964,784],{"class":481},[309,966,523],{"class":481},[309,968,969],{"class":830}," 4126",[309,971,535],{"class":481},[309,973,974,976,979,981,983,986],{"class":311,"line":754},[309,975,871],{"class":481},[309,977,978],{"class":405},"reasoningTokens",[309,980,784],{"class":481},[309,982,523],{"class":481},[309,984,985],{"class":830}," 225",[309,987,535],{"class":481},[309,989,991,993,996,998,1000,1002,1005,1007],{"class":311,"line":990},14,[309,992,871],{"class":481},[309,994,995],{"class":405},"finishReason",[309,997,784],{"class":481},[309,999,523],{"class":481},[309,1001,789],{"class":481},[309,1003,1004],{"class":408},"stop",[309,1006,784],{"class":481},[309,1008,535],{"class":481},[309,1010,1012,1014,1017,1019,1021,1024],{"class":311,"line":1011},15,[309,1013,871],{"class":481},[309,1015,1016],{"class":405},"msToFirstChunk",[309,1018,784],{"class":481},[309,1020,523],{"class":481},[309,1022,1023],{"class":830}," 234",[309,1025,535],{"class":481},[309,1027,1029,1031,1034,1036,1038,1041],{"class":311,"line":1028},16,[309,1030,871],{"class":481},[309,1032,1033],{"class":405},"msToFinish",[309,1035,784],{"class":481},[309,1037,523],{"class":481},[309,1039,1040],{"class":830}," 4500",[309,1042,535],{"class":481},[309,1044,1046,1048,1051,1053,1055],{"class":311,"line":1045},17,[309,1047,871],{"class":481},[309,1049,1050],{"class":405},"tokensPerSecond",[309,1052,784],{"class":481},[309,1054,523],{"class":481},[309,1056,1057],{"class":830}," 180\n",[309,1059,1061],{"class":311,"line":1060},18,[309,1062,1063],{"class":481},"  }\n",[309,1065,1067],{"class":311,"line":1066},19,[309,1068,1069],{"class":481},"}\n",[383,1071,1073],{"id":1072},"how-it-works","How It Works",[288,1075,1076,1079,1080,1083],{},[291,1077,1078],{},"createAILogger(log, options?)"," returns an ",[291,1081,1082],{},"AILogger"," with two methods:",[1085,1086,1087,1100],"table",{},[1088,1089,1090],"thead",{},[1091,1092,1093,1097],"tr",{},[1094,1095,1096],"th",{},"Method",[1094,1098,1099],{},"Description",[1101,1102,1103,1140],"tbody",{},[1091,1104,1105,1111],{},[1106,1107,1108],"td",{},[291,1109,1110],{},"wrap(model)",[1106,1112,1113,1114,1117,1118,1121,1122,1125,1126,1125,1129,1125,1132,1135,1136,1139],{},"Wraps a language model with middleware. Accepts a model string (e.g. ",[291,1115,1116],{},"'anthropic\u002Fclaude-sonnet-4.6'",") or a ",[291,1119,1120],{},"LanguageModelV3"," object. Works with ",[291,1123,1124],{},"generateText",", ",[291,1127,1128],{},"streamText",[291,1130,1131],{},"generateObject",[291,1133,1134],{},"streamObject",", and ",[291,1137,1138],{},"ToolLoopAgent",". Also works with pre-wrapped models (e.g. from supermemory).",[1091,1141,1142,1147],{},[1106,1143,1144],{},[291,1145,1146],{},"captureEmbed(result)",[1106,1148,1149,1150,1153,1154,1157],{},"Manually captures token usage from ",[291,1151,1152],{},"embed()"," or ",[291,1155,1156],{},"embedMany()"," results (embedding models use a different type).",[288,1159,1160],{},"The middleware intercepts calls at the provider level. It does not touch your callbacks, prompts, or responses. Captured data flows through the normal evlog pipeline (sampling, enrichers, drains) and ends up in Axiom, Better Stack, or wherever you drain to.",[1162,1163,1165],"h3",{"id":1164},"options","Options",[1085,1167,1168,1183],{},[1088,1169,1170],{},[1091,1171,1172,1175,1178,1181],{},[1094,1173,1174],{},"Option",[1094,1176,1177],{},"Type",[1094,1179,1180],{},"Default",[1094,1182,1099],{},[1101,1184,1185],{},[1091,1186,1187,1192,1197,1202],{},[1106,1188,1189],{},[291,1190,1191],{},"toolInputs",[1106,1193,1194],{},[291,1195,1196],{},"boolean | ToolInputsOptions",[1106,1198,1199],{},[291,1200,1201],{},"false",[1106,1203,1204,1205,1208,1209,1212],{},"When enabled, ",[291,1206,1207],{},"toolCalls"," contains ",[291,1210,1211],{},"{ name, input }"," objects instead of plain strings. Opt-in because inputs can be large and may contain sensitive data.",[288,1214,1215,1216,1219],{},"Pass ",[291,1217,1218],{},"true"," to capture all inputs as-is, or an options object for fine-grained control:",[1085,1221,1222,1233],{},[1088,1223,1224],{},[1091,1225,1226,1229,1231],{},[1094,1227,1228],{},"Sub-option",[1094,1230,1177],{},[1094,1232,1099],{},[1101,1234,1235,1253],{},[1091,1236,1237,1242,1247],{},[1106,1238,1239],{},[291,1240,1241],{},"maxLength",[1106,1243,1244],{},[291,1245,1246],{},"number",[1106,1248,1249,1250,489],{},"Truncate stringified inputs exceeding this character length (appends ",[291,1251,1252],{},"…",[1091,1254,1255,1260,1265],{},[1106,1256,1257],{},[291,1258,1259],{},"transform",[1106,1261,1262],{},[291,1263,1264],{},"(input, toolName) => unknown",[1106,1266,1267,1268,1270],{},"Custom transform applied before ",[291,1269,1241],{},". Use to redact fields or reshape data.",[299,1272,1275],{"className":452,"code":1273,"filename":1274,"language":455,"meta":305,"style":305},"\u002F\u002F Capture everything\nconst ai = createAILogger(log, { toolInputs: true })\n\n\u002F\u002F Truncate long inputs (e.g. SQL queries)\nconst ai = createAILogger(log, { toolInputs: { maxLength: 200 } })\n\n\u002F\u002F Redact sensitive tool inputs\nconst ai = createAILogger(log, {\n  toolInputs: {\n    maxLength: 500,\n    transform: (input, toolName) => {\n      if (toolName === 'queryDB') return { sql: '***' }\n      return input\n    },\n  },\n})\n","server\u002Fapi\u002Fchat.post.ts",[291,1276,1277,1283,1317,1321,1326,1361,1365,1370,1386,1395,1407,1430,1473,1481,1486,1491],{"__ignoreMap":305},[309,1278,1279],{"class":311,"line":312},[309,1280,1282],{"class":1281},"sHwdD","\u002F\u002F Capture everything\n",[309,1284,1285,1288,1291,1294,1296,1299,1302,1304,1307,1309,1313,1315],{"class":311,"line":318},[309,1286,1287],{"class":477},"const",[309,1289,1290],{"class":473}," ai ",[309,1292,1293],{"class":481},"=",[309,1295,613],{"class":469},[309,1297,1298],{"class":473},"(log",[309,1300,1301],{"class":481},",",[309,1303,587],{"class":481},[309,1305,1306],{"class":512}," toolInputs",[309,1308,523],{"class":481},[309,1310,1312],{"class":1311},"sfNiH"," true",[309,1314,593],{"class":481},[309,1316,550],{"class":473},[309,1318,1319],{"class":311,"line":325},[309,1320,322],{"emptyLinePlaceholder":321},[309,1322,1323],{"class":311,"line":331},[309,1324,1325],{"class":1281},"\u002F\u002F Truncate long inputs (e.g. SQL queries)\n",[309,1327,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1351,1353,1355,1357,1359],{"class":311,"line":337},[309,1329,1287],{"class":477},[309,1331,1290],{"class":473},[309,1333,1293],{"class":481},[309,1335,613],{"class":469},[309,1337,1298],{"class":473},[309,1339,1301],{"class":481},[309,1341,587],{"class":481},[309,1343,1306],{"class":512},[309,1345,523],{"class":481},[309,1347,587],{"class":481},[309,1349,1350],{"class":512}," maxLength",[309,1352,523],{"class":481},[309,1354,831],{"class":830},[309,1356,593],{"class":481},[309,1358,593],{"class":481},[309,1360,550],{"class":473},[309,1362,1363],{"class":311,"line":343},[309,1364,322],{"emptyLinePlaceholder":321},[309,1366,1367],{"class":311,"line":349},[309,1368,1369],{"class":1281},"\u002F\u002F Redact sensitive tool inputs\n",[309,1371,1372,1374,1376,1378,1380,1382,1384],{"class":311,"line":355},[309,1373,1287],{"class":477},[309,1375,1290],{"class":473},[309,1377,1293],{"class":481},[309,1379,613],{"class":469},[309,1381,1298],{"class":473},[309,1383,1301],{"class":481},[309,1385,495],{"class":481},[309,1387,1388,1391,1393],{"class":311,"line":361},[309,1389,1390],{"class":512},"  toolInputs",[309,1392,523],{"class":481},[309,1394,495],{"class":481},[309,1396,1397,1400,1402,1405],{"class":311,"line":367},[309,1398,1399],{"class":512},"    maxLength",[309,1401,523],{"class":481},[309,1403,1404],{"class":830}," 500",[309,1406,535],{"class":481},[309,1408,1409,1412,1414,1416,1419,1421,1424,1426,1428],{"class":311,"line":372},[309,1410,1411],{"class":469},"    transform",[309,1413,523],{"class":481},[309,1415,482],{"class":481},[309,1417,1418],{"class":485},"input",[309,1420,1301],{"class":481},[309,1422,1423],{"class":485}," toolName",[309,1425,489],{"class":481},[309,1427,492],{"class":477},[309,1429,495],{"class":481},[309,1431,1432,1435,1437,1440,1443,1445,1448,1450,1453,1456,1458,1461,1463,1465,1468,1470],{"class":311,"line":378},[309,1433,1434],{"class":462},"      if",[309,1436,482],{"class":512},[309,1438,1439],{"class":473},"toolName",[309,1441,1442],{"class":481}," ===",[309,1444,526],{"class":481},[309,1446,1447],{"class":408},"queryDB",[309,1449,532],{"class":481},[309,1451,1452],{"class":512},") ",[309,1454,1455],{"class":462},"return",[309,1457,587],{"class":481},[309,1459,1460],{"class":512}," sql",[309,1462,523],{"class":481},[309,1464,526],{"class":481},[309,1466,1467],{"class":408},"***",[309,1469,532],{"class":481},[309,1471,1472],{"class":481}," }\n",[309,1474,1475,1478],{"class":311,"line":754},[309,1476,1477],{"class":462},"      return",[309,1479,1480],{"class":473}," input\n",[309,1482,1483],{"class":311,"line":990},[309,1484,1485],{"class":481},"    },\n",[309,1487,1488],{"class":311,"line":1011},[309,1489,1490],{"class":481},"  },\n",[309,1492,1493,1495],{"class":311,"line":1028},[309,1494,571],{"class":481},[309,1496,550],{"class":473},[383,1498,1500],{"id":1499},"usage-patterns","Usage Patterns",[1162,1502,1128],{"id":1503},"streamtext",[288,1505,1506],{},"The most common pattern, streaming chat with full observability:",[299,1508,1510],{"className":452,"code":1509,"filename":1274,"language":455,"meta":305,"style":305},"import { streamText } from 'ai'\nimport { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log)\n  const { messages } = await readBody(event)\n\n  log.set({ action: 'chat', messagesCount: messages.length })\n\n  const result = streamText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    messages,\n    onFinish: ({ text }) => {\n      \u002F\u002F Your code, no conflict with evlog\n      saveConversation(text)\n    },\n  })\n\n  return result.toTextStreamResponse()\n})\n",[291,1511,1512,1530,1548,1552,1574,1590,1606,1631,1635,1680,1684,1698,1722,1728,1748,1753,1765,1769,1775,1779,1792],{"__ignoreMap":305},[309,1513,1514,1516,1518,1520,1522,1524,1526,1528],{"class":311,"line":312},[309,1515,584],{"class":462},[309,1517,587],{"class":481},[309,1519,509],{"class":473},[309,1521,593],{"class":481},[309,1523,596],{"class":462},[309,1525,526],{"class":481},[309,1527,860],{"class":408},[309,1529,604],{"class":481},[309,1531,1532,1534,1536,1538,1540,1542,1544,1546],{"class":311,"line":318},[309,1533,584],{"class":462},[309,1535,587],{"class":481},[309,1537,613],{"class":473},[309,1539,593],{"class":481},[309,1541,596],{"class":462},[309,1543,526],{"class":481},[309,1545,293],{"class":408},[309,1547,604],{"class":481},[309,1549,1550],{"class":311,"line":325},[309,1551,322],{"emptyLinePlaceholder":321},[309,1553,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572],{"class":311,"line":331},[309,1555,463],{"class":462},[309,1557,466],{"class":462},[309,1559,470],{"class":469},[309,1561,474],{"class":473},[309,1563,478],{"class":477},[309,1565,482],{"class":481},[309,1567,486],{"class":485},[309,1569,489],{"class":481},[309,1571,492],{"class":477},[309,1573,495],{"class":481},[309,1575,1576,1578,1580,1582,1584,1586,1588],{"class":311,"line":337},[309,1577,500],{"class":477},[309,1579,656],{"class":473},[309,1581,506],{"class":481},[309,1583,590],{"class":469},[309,1585,474],{"class":512},[309,1587,486],{"class":473},[309,1589,550],{"class":512},[309,1591,1592,1594,1596,1598,1600,1602,1604],{"class":311,"line":343},[309,1593,500],{"class":477},[309,1595,673],{"class":473},[309,1597,506],{"class":481},[309,1599,613],{"class":469},[309,1601,474],{"class":512},[309,1603,682],{"class":473},[309,1605,550],{"class":512},[309,1607,1608,1610,1612,1615,1617,1619,1622,1625,1627,1629],{"class":311,"line":349},[309,1609,500],{"class":477},[309,1611,587],{"class":481},[309,1613,1614],{"class":473}," messages",[309,1616,593],{"class":481},[309,1618,506],{"class":481},[309,1620,1621],{"class":462}," await",[309,1623,1624],{"class":469}," readBody",[309,1626,474],{"class":512},[309,1628,486],{"class":473},[309,1630,550],{"class":512},[309,1632,1633],{"class":311,"line":355},[309,1634,322],{"emptyLinePlaceholder":321},[309,1636,1637,1640,1642,1645,1647,1650,1653,1655,1657,1660,1662,1664,1667,1669,1671,1673,1676,1678],{"class":311,"line":361},[309,1638,1639],{"class":473},"  log",[309,1641,560],{"class":481},[309,1643,1644],{"class":469},"set",[309,1646,474],{"class":512},[309,1648,1649],{"class":481},"{",[309,1651,1652],{"class":512}," action",[309,1654,523],{"class":481},[309,1656,526],{"class":481},[309,1658,1659],{"class":408},"chat",[309,1661,532],{"class":481},[309,1663,1301],{"class":481},[309,1665,1666],{"class":512}," messagesCount",[309,1668,523],{"class":481},[309,1670,1614],{"class":473},[309,1672,560],{"class":481},[309,1674,1675],{"class":473},"length",[309,1677,593],{"class":481},[309,1679,550],{"class":512},[309,1681,1682],{"class":311,"line":367},[309,1683,322],{"emptyLinePlaceholder":321},[309,1685,1686,1688,1690,1692,1694,1696],{"class":311,"line":372},[309,1687,500],{"class":477},[309,1689,503],{"class":473},[309,1691,506],{"class":481},[309,1693,509],{"class":469},[309,1695,474],{"class":512},[309,1697,515],{"class":481},[309,1699,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720],{"class":311,"line":378},[309,1701,520],{"class":512},[309,1703,523],{"class":481},[309,1705,673],{"class":473},[309,1707,560],{"class":481},[309,1709,715],{"class":469},[309,1711,474],{"class":512},[309,1713,532],{"class":481},[309,1715,529],{"class":408},[309,1717,532],{"class":481},[309,1719,489],{"class":512},[309,1721,535],{"class":481},[309,1723,1724,1726],{"class":311,"line":754},[309,1725,540],{"class":473},[309,1727,535],{"class":481},[309,1729,1730,1733,1735,1738,1741,1744,1746],{"class":311,"line":990},[309,1731,1732],{"class":469},"    onFinish",[309,1734,523],{"class":481},[309,1736,1737],{"class":481}," ({",[309,1739,1740],{"class":485}," text",[309,1742,1743],{"class":481}," })",[309,1745,492],{"class":477},[309,1747,495],{"class":481},[309,1749,1750],{"class":311,"line":1011},[309,1751,1752],{"class":1281},"      \u002F\u002F Your code, no conflict with evlog\n",[309,1754,1755,1758,1760,1763],{"class":311,"line":1028},[309,1756,1757],{"class":469},"      saveConversation",[309,1759,474],{"class":512},[309,1761,1762],{"class":473},"text",[309,1764,550],{"class":512},[309,1766,1767],{"class":311,"line":1045},[309,1768,1485],{"class":481},[309,1770,1771,1773],{"class":311,"line":1060},[309,1772,547],{"class":481},[309,1774,550],{"class":512},[309,1776,1777],{"class":311,"line":1066},[309,1778,322],{"emptyLinePlaceholder":321},[309,1780,1782,1784,1786,1788,1790],{"class":311,"line":1781},20,[309,1783,555],{"class":462},[309,1785,503],{"class":473},[309,1787,560],{"class":481},[309,1789,563],{"class":469},[309,1791,566],{"class":512},[309,1793,1795,1797],{"class":311,"line":1794},21,[309,1796,571],{"class":481},[309,1798,550],{"class":473},[1162,1800,1124],{"id":1801},"generatetext",[288,1803,1804],{},"Synchronous generation, the middleware captures the result automatically:",[299,1806,1809],{"className":452,"code":1807,"filename":1808,"language":455,"meta":305,"style":305},"import { generateText } from 'ai'\nimport { createAILogger } 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    prompt: 'Summarize this document',\n  })\n\n  return { text: result.text }\n})\n","server\u002Fapi\u002Fsummarize.post.ts",[291,1810,1811,1830,1848,1852,1874,1890,1906,1910,1926,1950,1966,1972,1976,1994],{"__ignoreMap":305},[309,1812,1813,1815,1817,1820,1822,1824,1826,1828],{"class":311,"line":312},[309,1814,584],{"class":462},[309,1816,587],{"class":481},[309,1818,1819],{"class":473}," generateText",[309,1821,593],{"class":481},[309,1823,596],{"class":462},[309,1825,526],{"class":481},[309,1827,860],{"class":408},[309,1829,604],{"class":481},[309,1831,1832,1834,1836,1838,1840,1842,1844,1846],{"class":311,"line":318},[309,1833,584],{"class":462},[309,1835,587],{"class":481},[309,1837,613],{"class":473},[309,1839,593],{"class":481},[309,1841,596],{"class":462},[309,1843,526],{"class":481},[309,1845,293],{"class":408},[309,1847,604],{"class":481},[309,1849,1850],{"class":311,"line":325},[309,1851,322],{"emptyLinePlaceholder":321},[309,1853,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872],{"class":311,"line":331},[309,1855,463],{"class":462},[309,1857,466],{"class":462},[309,1859,470],{"class":469},[309,1861,474],{"class":473},[309,1863,478],{"class":477},[309,1865,482],{"class":481},[309,1867,486],{"class":485},[309,1869,489],{"class":481},[309,1871,492],{"class":477},[309,1873,495],{"class":481},[309,1875,1876,1878,1880,1882,1884,1886,1888],{"class":311,"line":337},[309,1877,500],{"class":477},[309,1879,656],{"class":473},[309,1881,506],{"class":481},[309,1883,590],{"class":469},[309,1885,474],{"class":512},[309,1887,486],{"class":473},[309,1889,550],{"class":512},[309,1891,1892,1894,1896,1898,1900,1902,1904],{"class":311,"line":343},[309,1893,500],{"class":477},[309,1895,673],{"class":473},[309,1897,506],{"class":481},[309,1899,613],{"class":469},[309,1901,474],{"class":512},[309,1903,682],{"class":473},[309,1905,550],{"class":512},[309,1907,1908],{"class":311,"line":349},[309,1909,322],{"emptyLinePlaceholder":321},[309,1911,1912,1914,1916,1918,1920,1922,1924],{"class":311,"line":355},[309,1913,500],{"class":477},[309,1915,503],{"class":473},[309,1917,506],{"class":481},[309,1919,1621],{"class":462},[309,1921,1819],{"class":469},[309,1923,474],{"class":512},[309,1925,515],{"class":481},[309,1927,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948],{"class":311,"line":361},[309,1929,520],{"class":512},[309,1931,523],{"class":481},[309,1933,673],{"class":473},[309,1935,560],{"class":481},[309,1937,715],{"class":469},[309,1939,474],{"class":512},[309,1941,532],{"class":481},[309,1943,529],{"class":408},[309,1945,532],{"class":481},[309,1947,489],{"class":512},[309,1949,535],{"class":481},[309,1951,1952,1955,1957,1959,1962,1964],{"class":311,"line":367},[309,1953,1954],{"class":512},"    prompt",[309,1956,523],{"class":481},[309,1958,526],{"class":481},[309,1960,1961],{"class":408},"Summarize this document",[309,1963,532],{"class":481},[309,1965,535],{"class":481},[309,1967,1968,1970],{"class":311,"line":372},[309,1969,547],{"class":481},[309,1971,550],{"class":512},[309,1973,1974],{"class":311,"line":378},[309,1975,322],{"emptyLinePlaceholder":321},[309,1977,1978,1980,1982,1984,1986,1988,1990,1992],{"class":311,"line":754},[309,1979,555],{"class":462},[309,1981,587],{"class":481},[309,1983,1740],{"class":512},[309,1985,523],{"class":481},[309,1987,503],{"class":473},[309,1989,560],{"class":481},[309,1991,1762],{"class":473},[309,1993,1472],{"class":481},[309,1995,1996,1998],{"class":311,"line":990},[309,1997,571],{"class":481},[309,1999,550],{"class":473},[1162,2001,2003],{"id":2002},"multi-step-agents","Multi-step agents",[288,2005,2006],{},"The middleware fires for each step automatically. Steps, tool calls, and tokens are all accumulated across the agent loop:",[299,2008,2011],{"className":452,"code":2009,"filename":2010,"language":455,"meta":305,"style":305},"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    toolInputs: { maxLength: 500 },\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({\n    agent,\n    uiMessages: messages,\n  })\n})\n","server\u002Fapi\u002Fagent.post.ts",[291,2012,2013,2042,2060,2078,2082,2104,2120,2142,2160,2178,2184,2188,2206,2230,2249,2267,2273,2277,2287,2294,2305,2311],{"__ignoreMap":305},[309,2014,2015,2017,2019,2022,2024,2027,2029,2032,2034,2036,2038,2040],{"class":311,"line":312},[309,2016,584],{"class":462},[309,2018,587],{"class":481},[309,2020,2021],{"class":473}," ToolLoopAgent",[309,2023,1301],{"class":481},[309,2025,2026],{"class":473}," createAgentUIStreamResponse",[309,2028,1301],{"class":481},[309,2030,2031],{"class":473}," stepCountIs",[309,2033,593],{"class":481},[309,2035,596],{"class":462},[309,2037,526],{"class":481},[309,2039,860],{"class":408},[309,2041,604],{"class":481},[309,2043,2044,2046,2048,2050,2052,2054,2056,2058],{"class":311,"line":318},[309,2045,584],{"class":462},[309,2047,587],{"class":481},[309,2049,590],{"class":473},[309,2051,593],{"class":481},[309,2053,596],{"class":462},[309,2055,526],{"class":481},[309,2057,601],{"class":408},[309,2059,604],{"class":481},[309,2061,2062,2064,2066,2068,2070,2072,2074,2076],{"class":311,"line":325},[309,2063,584],{"class":462},[309,2065,587],{"class":481},[309,2067,613],{"class":473},[309,2069,593],{"class":481},[309,2071,596],{"class":462},[309,2073,526],{"class":481},[309,2075,293],{"class":408},[309,2077,604],{"class":481},[309,2079,2080],{"class":311,"line":331},[309,2081,322],{"emptyLinePlaceholder":321},[309,2083,2084,2086,2088,2090,2092,2094,2096,2098,2100,2102],{"class":311,"line":337},[309,2085,463],{"class":462},[309,2087,466],{"class":462},[309,2089,470],{"class":469},[309,2091,474],{"class":473},[309,2093,478],{"class":477},[309,2095,482],{"class":481},[309,2097,486],{"class":485},[309,2099,489],{"class":481},[309,2101,492],{"class":477},[309,2103,495],{"class":481},[309,2105,2106,2108,2110,2112,2114,2116,2118],{"class":311,"line":343},[309,2107,500],{"class":477},[309,2109,656],{"class":473},[309,2111,506],{"class":481},[309,2113,590],{"class":469},[309,2115,474],{"class":512},[309,2117,486],{"class":473},[309,2119,550],{"class":512},[309,2121,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140],{"class":311,"line":349},[309,2123,500],{"class":477},[309,2125,587],{"class":481},[309,2127,1614],{"class":473},[309,2129,593],{"class":481},[309,2131,506],{"class":481},[309,2133,1621],{"class":462},[309,2135,1624],{"class":469},[309,2137,474],{"class":512},[309,2139,486],{"class":473},[309,2141,550],{"class":512},[309,2143,2144,2146,2148,2150,2152,2154,2156,2158],{"class":311,"line":355},[309,2145,500],{"class":477},[309,2147,673],{"class":473},[309,2149,506],{"class":481},[309,2151,613],{"class":469},[309,2153,474],{"class":512},[309,2155,682],{"class":473},[309,2157,1301],{"class":481},[309,2159,495],{"class":481},[309,2161,2162,2165,2167,2169,2171,2173,2175],{"class":311,"line":361},[309,2163,2164],{"class":512},"    toolInputs",[309,2166,523],{"class":481},[309,2168,587],{"class":481},[309,2170,1350],{"class":512},[309,2172,523],{"class":481},[309,2174,1404],{"class":830},[309,2176,2177],{"class":481}," },\n",[309,2179,2180,2182],{"class":311,"line":367},[309,2181,547],{"class":481},[309,2183,550],{"class":512},[309,2185,2186],{"class":311,"line":372},[309,2187,322],{"emptyLinePlaceholder":321},[309,2189,2190,2192,2195,2197,2200,2202,2204],{"class":311,"line":378},[309,2191,500],{"class":477},[309,2193,2194],{"class":473}," agent",[309,2196,506],{"class":481},[309,2198,2199],{"class":481}," new",[309,2201,2021],{"class":469},[309,2203,474],{"class":512},[309,2205,515],{"class":481},[309,2207,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228],{"class":311,"line":754},[309,2209,520],{"class":512},[309,2211,523],{"class":481},[309,2213,673],{"class":473},[309,2215,560],{"class":481},[309,2217,715],{"class":469},[309,2219,474],{"class":512},[309,2221,532],{"class":481},[309,2223,529],{"class":408},[309,2225,532],{"class":481},[309,2227,489],{"class":512},[309,2229,535],{"class":481},[309,2231,2232,2235,2237,2239,2242,2244,2247],{"class":311,"line":990},[309,2233,2234],{"class":512},"    tools",[309,2236,523],{"class":481},[309,2238,587],{"class":481},[309,2240,2241],{"class":473}," searchWeb",[309,2243,1301],{"class":481},[309,2245,2246],{"class":473}," queryDatabase",[309,2248,2177],{"class":481},[309,2250,2251,2254,2256,2258,2260,2263,2265],{"class":311,"line":1011},[309,2252,2253],{"class":512},"    stopWhen",[309,2255,523],{"class":481},[309,2257,2031],{"class":469},[309,2259,474],{"class":512},[309,2261,2262],{"class":830},"5",[309,2264,489],{"class":512},[309,2266,535],{"class":481},[309,2268,2269,2271],{"class":311,"line":1028},[309,2270,547],{"class":481},[309,2272,550],{"class":512},[309,2274,2275],{"class":311,"line":1045},[309,2276,322],{"emptyLinePlaceholder":321},[309,2278,2279,2281,2283,2285],{"class":311,"line":1060},[309,2280,555],{"class":462},[309,2282,2026],{"class":469},[309,2284,474],{"class":512},[309,2286,515],{"class":481},[309,2288,2289,2292],{"class":311,"line":1066},[309,2290,2291],{"class":473},"    agent",[309,2293,535],{"class":481},[309,2295,2296,2299,2301,2303],{"class":311,"line":1781},[309,2297,2298],{"class":512},"    uiMessages",[309,2300,523],{"class":481},[309,2302,1614],{"class":473},[309,2304,535],{"class":481},[309,2306,2307,2309],{"class":311,"line":1794},[309,2308,547],{"class":481},[309,2310,550],{"class":512},[309,2312,2314,2316],{"class":311,"line":2313},22,[309,2315,571],{"class":481},[309,2317,550],{"class":473},[288,2319,2320],{},"Wide event after a 3-step agent run:",[299,2322,2324],{"className":764,"code":2323,"filename":766,"language":767,"meta":305,"style":305},"{\n  \"ai\": {\n    \"calls\": 3,\n    \"steps\": 3,\n    \"model\": \"claude-sonnet-4.6\",\n    \"provider\": \"anthropic\",\n    \"inputTokens\": 4500,\n    \"outputTokens\": 1200,\n    \"totalTokens\": 5700,\n    \"finishReason\": \"stop\",\n    \"toolCalls\": [\n      { \"name\": \"searchWeb\", \"input\": { \"query\": \"TypeScript 6.0 features\" } },\n      { \"name\": \"queryDatabase\", \"input\": { \"sql\": \"SELECT * FROM docs WHERE topic = 'typescript'\" } },\n      { \"name\": \"searchWeb\", \"input\": { \"query\": \"TypeScript 6.0 release date\" } }\n    ],\n    \"responseId\": \"msg_01XFDUDYJgAACzvnptvVoYEL\",\n    \"stepsUsage\": [\n      { \"model\": \"claude-sonnet-4.6\", \"inputTokens\": 1200, \"outputTokens\": 300, \"toolCalls\": [\"searchWeb\"] },\n      { \"model\": \"claude-sonnet-4.6\", \"inputTokens\": 1500, \"outputTokens\": 400, \"toolCalls\": [\"queryDatabase\", \"searchWeb\"] },\n      { \"model\": \"claude-sonnet-4.6\", \"inputTokens\": 1800, \"outputTokens\": 500 }\n    ],\n    \"msToFirstChunk\": 312,\n    \"msToFinish\": 8200,\n    \"tokensPerSecond\": 146\n  }\n}\n",[291,2325,2326,2330,2342,2357,2372,2390,2408,2422,2437,2452,2470,2483,2536,2587,2636,2641,2661,2674,2741,2815,2860,2864,2879,2895,2909,2914],{"__ignoreMap":305},[309,2327,2328],{"class":311,"line":312},[309,2329,515],{"class":481},[309,2331,2332,2334,2336,2338,2340],{"class":311,"line":318},[309,2333,778],{"class":481},[309,2335,860],{"class":477},[309,2337,784],{"class":481},[309,2339,523],{"class":481},[309,2341,495],{"class":481},[309,2343,2344,2346,2348,2350,2352,2355],{"class":311,"line":325},[309,2345,871],{"class":481},[309,2347,874],{"class":405},[309,2349,784],{"class":481},[309,2351,523],{"class":481},[309,2353,2354],{"class":830}," 3",[309,2356,535],{"class":481},[309,2358,2359,2361,2364,2366,2368,2370],{"class":311,"line":331},[309,2360,871],{"class":481},[309,2362,2363],{"class":405},"steps",[309,2365,784],{"class":481},[309,2367,523],{"class":481},[309,2369,2354],{"class":830},[309,2371,535],{"class":481},[309,2373,2374,2376,2378,2380,2382,2384,2386,2388],{"class":311,"line":337},[309,2375,871],{"class":481},[309,2377,890],{"class":405},[309,2379,784],{"class":481},[309,2381,523],{"class":481},[309,2383,789],{"class":481},[309,2385,899],{"class":408},[309,2387,784],{"class":481},[309,2389,535],{"class":481},[309,2391,2392,2394,2396,2398,2400,2402,2404,2406],{"class":311,"line":343},[309,2393,871],{"class":481},[309,2395,910],{"class":405},[309,2397,784],{"class":481},[309,2399,523],{"class":481},[309,2401,789],{"class":481},[309,2403,919],{"class":408},[309,2405,784],{"class":481},[309,2407,535],{"class":481},[309,2409,2410,2412,2414,2416,2418,2420],{"class":311,"line":349},[309,2411,871],{"class":481},[309,2413,930],{"class":405},[309,2415,784],{"class":481},[309,2417,523],{"class":481},[309,2419,1040],{"class":830},[309,2421,535],{"class":481},[309,2423,2424,2426,2428,2430,2432,2435],{"class":311,"line":355},[309,2425,871],{"class":481},[309,2427,946],{"class":405},[309,2429,784],{"class":481},[309,2431,523],{"class":481},[309,2433,2434],{"class":830}," 1200",[309,2436,535],{"class":481},[309,2438,2439,2441,2443,2445,2447,2450],{"class":311,"line":361},[309,2440,871],{"class":481},[309,2442,962],{"class":405},[309,2444,784],{"class":481},[309,2446,523],{"class":481},[309,2448,2449],{"class":830}," 5700",[309,2451,535],{"class":481},[309,2453,2454,2456,2458,2460,2462,2464,2466,2468],{"class":311,"line":367},[309,2455,871],{"class":481},[309,2457,995],{"class":405},[309,2459,784],{"class":481},[309,2461,523],{"class":481},[309,2463,789],{"class":481},[309,2465,1004],{"class":408},[309,2467,784],{"class":481},[309,2469,535],{"class":481},[309,2471,2472,2474,2476,2478,2480],{"class":311,"line":372},[309,2473,871],{"class":481},[309,2475,1207],{"class":405},[309,2477,784],{"class":481},[309,2479,523],{"class":481},[309,2481,2482],{"class":481}," [\n",[309,2484,2485,2488,2490,2493,2495,2497,2499,2502,2504,2506,2508,2510,2512,2514,2516,2518,2521,2523,2525,2527,2530,2532,2534],{"class":311,"line":378},[309,2486,2487],{"class":481},"      {",[309,2489,789],{"class":481},[309,2491,2492],{"class":830},"name",[309,2494,784],{"class":481},[309,2496,523],{"class":481},[309,2498,789],{"class":481},[309,2500,2501],{"class":408},"searchWeb",[309,2503,784],{"class":481},[309,2505,1301],{"class":481},[309,2507,789],{"class":481},[309,2509,1418],{"class":830},[309,2511,784],{"class":481},[309,2513,523],{"class":481},[309,2515,587],{"class":481},[309,2517,789],{"class":481},[309,2519,2520],{"class":512},"query",[309,2522,784],{"class":481},[309,2524,523],{"class":481},[309,2526,789],{"class":481},[309,2528,2529],{"class":408},"TypeScript 6.0 features",[309,2531,784],{"class":481},[309,2533,593],{"class":481},[309,2535,2177],{"class":481},[309,2537,2538,2540,2542,2544,2546,2548,2550,2553,2555,2557,2559,2561,2563,2565,2567,2569,2572,2574,2576,2578,2581,2583,2585],{"class":311,"line":754},[309,2539,2487],{"class":481},[309,2541,789],{"class":481},[309,2543,2492],{"class":830},[309,2545,784],{"class":481},[309,2547,523],{"class":481},[309,2549,789],{"class":481},[309,2551,2552],{"class":408},"queryDatabase",[309,2554,784],{"class":481},[309,2556,1301],{"class":481},[309,2558,789],{"class":481},[309,2560,1418],{"class":830},[309,2562,784],{"class":481},[309,2564,523],{"class":481},[309,2566,587],{"class":481},[309,2568,789],{"class":481},[309,2570,2571],{"class":512},"sql",[309,2573,784],{"class":481},[309,2575,523],{"class":481},[309,2577,789],{"class":481},[309,2579,2580],{"class":408},"SELECT * FROM docs WHERE topic = 'typescript'",[309,2582,784],{"class":481},[309,2584,593],{"class":481},[309,2586,2177],{"class":481},[309,2588,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2630,2632,2634],{"class":311,"line":990},[309,2590,2487],{"class":481},[309,2592,789],{"class":481},[309,2594,2492],{"class":830},[309,2596,784],{"class":481},[309,2598,523],{"class":481},[309,2600,789],{"class":481},[309,2602,2501],{"class":408},[309,2604,784],{"class":481},[309,2606,1301],{"class":481},[309,2608,789],{"class":481},[309,2610,1418],{"class":830},[309,2612,784],{"class":481},[309,2614,523],{"class":481},[309,2616,587],{"class":481},[309,2618,789],{"class":481},[309,2620,2520],{"class":512},[309,2622,784],{"class":481},[309,2624,523],{"class":481},[309,2626,789],{"class":481},[309,2628,2629],{"class":408},"TypeScript 6.0 release date",[309,2631,784],{"class":481},[309,2633,593],{"class":481},[309,2635,1472],{"class":481},[309,2637,2638],{"class":311,"line":1011},[309,2639,2640],{"class":481},"    ],\n",[309,2642,2643,2645,2648,2650,2652,2654,2657,2659],{"class":311,"line":1028},[309,2644,871],{"class":481},[309,2646,2647],{"class":405},"responseId",[309,2649,784],{"class":481},[309,2651,523],{"class":481},[309,2653,789],{"class":481},[309,2655,2656],{"class":408},"msg_01XFDUDYJgAACzvnptvVoYEL",[309,2658,784],{"class":481},[309,2660,535],{"class":481},[309,2662,2663,2665,2668,2670,2672],{"class":311,"line":1045},[309,2664,871],{"class":481},[309,2666,2667],{"class":405},"stepsUsage",[309,2669,784],{"class":481},[309,2671,523],{"class":481},[309,2673,2482],{"class":481},[309,2675,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2704,2706,2708,2710,2712,2714,2717,2719,2721,2723,2725,2727,2730,2732,2734,2736,2739],{"class":311,"line":1060},[309,2677,2487],{"class":481},[309,2679,789],{"class":481},[309,2681,890],{"class":830},[309,2683,784],{"class":481},[309,2685,523],{"class":481},[309,2687,789],{"class":481},[309,2689,899],{"class":408},[309,2691,784],{"class":481},[309,2693,1301],{"class":481},[309,2695,789],{"class":481},[309,2697,930],{"class":830},[309,2699,784],{"class":481},[309,2701,523],{"class":481},[309,2703,2434],{"class":830},[309,2705,1301],{"class":481},[309,2707,789],{"class":481},[309,2709,946],{"class":830},[309,2711,784],{"class":481},[309,2713,523],{"class":481},[309,2715,2716],{"class":830}," 300",[309,2718,1301],{"class":481},[309,2720,789],{"class":481},[309,2722,1207],{"class":830},[309,2724,784],{"class":481},[309,2726,523],{"class":481},[309,2728,2729],{"class":481}," [",[309,2731,784],{"class":481},[309,2733,2501],{"class":408},[309,2735,784],{"class":481},[309,2737,2738],{"class":481},"]",[309,2740,2177],{"class":481},[309,2742,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2772,2774,2776,2778,2780,2782,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811,2813],{"class":311,"line":1066},[309,2744,2487],{"class":481},[309,2746,789],{"class":481},[309,2748,890],{"class":830},[309,2750,784],{"class":481},[309,2752,523],{"class":481},[309,2754,789],{"class":481},[309,2756,899],{"class":408},[309,2758,784],{"class":481},[309,2760,1301],{"class":481},[309,2762,789],{"class":481},[309,2764,930],{"class":830},[309,2766,784],{"class":481},[309,2768,523],{"class":481},[309,2770,2771],{"class":830}," 1500",[309,2773,1301],{"class":481},[309,2775,789],{"class":481},[309,2777,946],{"class":830},[309,2779,784],{"class":481},[309,2781,523],{"class":481},[309,2783,2784],{"class":830}," 400",[309,2786,1301],{"class":481},[309,2788,789],{"class":481},[309,2790,1207],{"class":830},[309,2792,784],{"class":481},[309,2794,523],{"class":481},[309,2796,2729],{"class":481},[309,2798,784],{"class":481},[309,2800,2552],{"class":408},[309,2802,784],{"class":481},[309,2804,1301],{"class":481},[309,2806,789],{"class":481},[309,2808,2501],{"class":408},[309,2810,784],{"class":481},[309,2812,2738],{"class":481},[309,2814,2177],{"class":481},[309,2816,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2846,2848,2850,2852,2854,2856,2858],{"class":311,"line":1781},[309,2818,2487],{"class":481},[309,2820,789],{"class":481},[309,2822,890],{"class":830},[309,2824,784],{"class":481},[309,2826,523],{"class":481},[309,2828,789],{"class":481},[309,2830,899],{"class":408},[309,2832,784],{"class":481},[309,2834,1301],{"class":481},[309,2836,789],{"class":481},[309,2838,930],{"class":830},[309,2840,784],{"class":481},[309,2842,523],{"class":481},[309,2844,2845],{"class":830}," 1800",[309,2847,1301],{"class":481},[309,2849,789],{"class":481},[309,2851,946],{"class":830},[309,2853,784],{"class":481},[309,2855,523],{"class":481},[309,2857,1404],{"class":830},[309,2859,1472],{"class":481},[309,2861,2862],{"class":311,"line":1794},[309,2863,2640],{"class":481},[309,2865,2866,2868,2870,2872,2874,2877],{"class":311,"line":2313},[309,2867,871],{"class":481},[309,2869,1016],{"class":405},[309,2871,784],{"class":481},[309,2873,523],{"class":481},[309,2875,2876],{"class":830}," 312",[309,2878,535],{"class":481},[309,2880,2882,2884,2886,2888,2890,2893],{"class":311,"line":2881},23,[309,2883,871],{"class":481},[309,2885,1033],{"class":405},[309,2887,784],{"class":481},[309,2889,523],{"class":481},[309,2891,2892],{"class":830}," 8200",[309,2894,535],{"class":481},[309,2896,2898,2900,2902,2904,2906],{"class":311,"line":2897},24,[309,2899,871],{"class":481},[309,2901,1050],{"class":405},[309,2903,784],{"class":481},[309,2905,523],{"class":481},[309,2907,2908],{"class":830}," 146\n",[309,2910,2912],{"class":311,"line":2911},25,[309,2913,1063],{"class":481},[309,2915,2917],{"class":311,"line":2916},26,[309,2918,1069],{"class":481},[1162,2920,2922],{"id":2921},"rag-embed-generate","RAG (embed + generate)",[288,2924,2925,2926,2929],{},"Use ",[291,2927,2928],{},"captureEmbed"," for embedding calls. They use a different model type that cannot be wrapped with middleware:",[299,2931,2934],{"className":452,"code":2932,"filename":2933,"language":455,"meta":305,"style":305},"import { embed, generateText } from 'ai'\nimport { useLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log)\n\n  const { embedding, usage } = await embed({\n    model: openai.embedding('text-embedding-3-small'),\n    value: query,\n  })\n  ai.captureEmbed({ usage })\n\n  const docs = await findSimilar(embedding)\n\n  const result = await generateText({\n    model: ai.wrap('anthropic\u002Fclaude-sonnet-4.6'),\n    prompt: buildPrompt(docs),\n  })\n\n  return { text: result.text }\n})\n","server\u002Fapi\u002Frag.post.ts",[291,2935,2936,2959,2977,2995,2999,3021,3037,3053,3057,3083,3110,3122,3128,3147,3151,3171,3175,3191,3215,3233,3239,3243,3261],{"__ignoreMap":305},[309,2937,2938,2940,2942,2945,2947,2949,2951,2953,2955,2957],{"class":311,"line":312},[309,2939,584],{"class":462},[309,2941,587],{"class":481},[309,2943,2944],{"class":473}," embed",[309,2946,1301],{"class":481},[309,2948,1819],{"class":473},[309,2950,593],{"class":481},[309,2952,596],{"class":462},[309,2954,526],{"class":481},[309,2956,860],{"class":408},[309,2958,604],{"class":481},[309,2960,2961,2963,2965,2967,2969,2971,2973,2975],{"class":311,"line":318},[309,2962,584],{"class":462},[309,2964,587],{"class":481},[309,2966,590],{"class":473},[309,2968,593],{"class":481},[309,2970,596],{"class":462},[309,2972,526],{"class":481},[309,2974,601],{"class":408},[309,2976,604],{"class":481},[309,2978,2979,2981,2983,2985,2987,2989,2991,2993],{"class":311,"line":325},[309,2980,584],{"class":462},[309,2982,587],{"class":481},[309,2984,613],{"class":473},[309,2986,593],{"class":481},[309,2988,596],{"class":462},[309,2990,526],{"class":481},[309,2992,293],{"class":408},[309,2994,604],{"class":481},[309,2996,2997],{"class":311,"line":331},[309,2998,322],{"emptyLinePlaceholder":321},[309,3000,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019],{"class":311,"line":337},[309,3002,463],{"class":462},[309,3004,466],{"class":462},[309,3006,470],{"class":469},[309,3008,474],{"class":473},[309,3010,478],{"class":477},[309,3012,482],{"class":481},[309,3014,486],{"class":485},[309,3016,489],{"class":481},[309,3018,492],{"class":477},[309,3020,495],{"class":481},[309,3022,3023,3025,3027,3029,3031,3033,3035],{"class":311,"line":343},[309,3024,500],{"class":477},[309,3026,656],{"class":473},[309,3028,506],{"class":481},[309,3030,590],{"class":469},[309,3032,474],{"class":512},[309,3034,486],{"class":473},[309,3036,550],{"class":512},[309,3038,3039,3041,3043,3045,3047,3049,3051],{"class":311,"line":349},[309,3040,500],{"class":477},[309,3042,673],{"class":473},[309,3044,506],{"class":481},[309,3046,613],{"class":469},[309,3048,474],{"class":512},[309,3050,682],{"class":473},[309,3052,550],{"class":512},[309,3054,3055],{"class":311,"line":355},[309,3056,322],{"emptyLinePlaceholder":321},[309,3058,3059,3061,3063,3066,3068,3071,3073,3075,3077,3079,3081],{"class":311,"line":361},[309,3060,500],{"class":477},[309,3062,587],{"class":481},[309,3064,3065],{"class":473}," embedding",[309,3067,1301],{"class":481},[309,3069,3070],{"class":473}," usage",[309,3072,593],{"class":481},[309,3074,506],{"class":481},[309,3076,1621],{"class":462},[309,3078,2944],{"class":469},[309,3080,474],{"class":512},[309,3082,515],{"class":481},[309,3084,3085,3087,3089,3092,3094,3097,3099,3101,3104,3106,3108],{"class":311,"line":367},[309,3086,520],{"class":512},[309,3088,523],{"class":481},[309,3090,3091],{"class":473}," openai",[309,3093,560],{"class":481},[309,3095,3096],{"class":469},"embedding",[309,3098,474],{"class":512},[309,3100,532],{"class":481},[309,3102,3103],{"class":408},"text-embedding-3-small",[309,3105,532],{"class":481},[309,3107,489],{"class":512},[309,3109,535],{"class":481},[309,3111,3112,3115,3117,3120],{"class":311,"line":372},[309,3113,3114],{"class":512},"    value",[309,3116,523],{"class":481},[309,3118,3119],{"class":473}," query",[309,3121,535],{"class":481},[309,3123,3124,3126],{"class":311,"line":378},[309,3125,547],{"class":481},[309,3127,550],{"class":512},[309,3129,3130,3133,3135,3137,3139,3141,3143,3145],{"class":311,"line":754},[309,3131,3132],{"class":473},"  ai",[309,3134,560],{"class":481},[309,3136,2928],{"class":469},[309,3138,474],{"class":512},[309,3140,1649],{"class":481},[309,3142,3070],{"class":473},[309,3144,593],{"class":481},[309,3146,550],{"class":512},[309,3148,3149],{"class":311,"line":990},[309,3150,322],{"emptyLinePlaceholder":321},[309,3152,3153,3155,3158,3160,3162,3165,3167,3169],{"class":311,"line":1011},[309,3154,500],{"class":477},[309,3156,3157],{"class":473}," docs",[309,3159,506],{"class":481},[309,3161,1621],{"class":462},[309,3163,3164],{"class":469}," findSimilar",[309,3166,474],{"class":512},[309,3168,3096],{"class":473},[309,3170,550],{"class":512},[309,3172,3173],{"class":311,"line":1028},[309,3174,322],{"emptyLinePlaceholder":321},[309,3176,3177,3179,3181,3183,3185,3187,3189],{"class":311,"line":1045},[309,3178,500],{"class":477},[309,3180,503],{"class":473},[309,3182,506],{"class":481},[309,3184,1621],{"class":462},[309,3186,1819],{"class":469},[309,3188,474],{"class":512},[309,3190,515],{"class":481},[309,3192,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213],{"class":311,"line":1060},[309,3194,520],{"class":512},[309,3196,523],{"class":481},[309,3198,673],{"class":473},[309,3200,560],{"class":481},[309,3202,715],{"class":469},[309,3204,474],{"class":512},[309,3206,532],{"class":481},[309,3208,529],{"class":408},[309,3210,532],{"class":481},[309,3212,489],{"class":512},[309,3214,535],{"class":481},[309,3216,3217,3219,3221,3224,3226,3229,3231],{"class":311,"line":1066},[309,3218,1954],{"class":512},[309,3220,523],{"class":481},[309,3222,3223],{"class":469}," buildPrompt",[309,3225,474],{"class":512},[309,3227,3228],{"class":473},"docs",[309,3230,489],{"class":512},[309,3232,535],{"class":481},[309,3234,3235,3237],{"class":311,"line":1781},[309,3236,547],{"class":481},[309,3238,550],{"class":512},[309,3240,3241],{"class":311,"line":1794},[309,3242,322],{"emptyLinePlaceholder":321},[309,3244,3245,3247,3249,3251,3253,3255,3257,3259],{"class":311,"line":2313},[309,3246,555],{"class":462},[309,3248,587],{"class":481},[309,3250,1740],{"class":512},[309,3252,523],{"class":481},[309,3254,503],{"class":473},[309,3256,560],{"class":481},[309,3258,1762],{"class":473},[309,3260,1472],{"class":481},[309,3262,3263,3265],{"class":311,"line":2881},[309,3264,571],{"class":481},[309,3266,550],{"class":473},[1162,3268,3270],{"id":3269},"multiple-models","Multiple models",[288,3272,3273,3274,3276,3277,3280],{},"Wrap each model separately, they share the same accumulator. When multiple models are used, the wide event includes both ",[291,3275,890],{}," (last model) and ",[291,3278,3279],{},"models"," (all unique models):",[391,3282,3283,3436],{},[299,3284,3286],{"className":452,"code":3285,"filename":1274,"language":455,"meta":305,"style":305},"const ai = createAILogger(log)\n\nconst fast = ai.wrap('anthropic\u002Fclaude-haiku-4.5')\nconst smart = ai.wrap('anthropic\u002Fclaude-sonnet-4.6')\n\nconst classification = await generateText({ model: fast, prompt: classifyPrompt })\nconst response = await generateText({ model: smart, prompt: detailedPrompt })\n",[291,3287,3288,3301,3305,3331,3356,3360,3399],{"__ignoreMap":305},[309,3289,3290,3292,3294,3296,3298],{"class":311,"line":312},[309,3291,1287],{"class":477},[309,3293,1290],{"class":473},[309,3295,1293],{"class":481},[309,3297,613],{"class":469},[309,3299,3300],{"class":473},"(log)\n",[309,3302,3303],{"class":311,"line":318},[309,3304,322],{"emptyLinePlaceholder":321},[309,3306,3307,3309,3312,3314,3316,3318,3320,3322,3324,3327,3329],{"class":311,"line":325},[309,3308,1287],{"class":477},[309,3310,3311],{"class":473}," fast ",[309,3313,1293],{"class":481},[309,3315,673],{"class":473},[309,3317,560],{"class":481},[309,3319,715],{"class":469},[309,3321,474],{"class":473},[309,3323,532],{"class":481},[309,3325,3326],{"class":408},"anthropic\u002Fclaude-haiku-4.5",[309,3328,532],{"class":481},[309,3330,550],{"class":473},[309,3332,3333,3335,3338,3340,3342,3344,3346,3348,3350,3352,3354],{"class":311,"line":331},[309,3334,1287],{"class":477},[309,3336,3337],{"class":473}," smart ",[309,3339,1293],{"class":481},[309,3341,673],{"class":473},[309,3343,560],{"class":481},[309,3345,715],{"class":469},[309,3347,474],{"class":473},[309,3349,532],{"class":481},[309,3351,529],{"class":408},[309,3353,532],{"class":481},[309,3355,550],{"class":473},[309,3357,3358],{"class":311,"line":337},[309,3359,322],{"emptyLinePlaceholder":321},[309,3361,3362,3364,3367,3369,3371,3373,3375,3377,3380,3382,3385,3387,3390,3392,3395,3397],{"class":311,"line":343},[309,3363,1287],{"class":477},[309,3365,3366],{"class":473}," classification ",[309,3368,1293],{"class":481},[309,3370,1621],{"class":462},[309,3372,1819],{"class":469},[309,3374,474],{"class":473},[309,3376,1649],{"class":481},[309,3378,3379],{"class":512}," model",[309,3381,523],{"class":481},[309,3383,3384],{"class":473}," fast",[309,3386,1301],{"class":481},[309,3388,3389],{"class":512}," prompt",[309,3391,523],{"class":481},[309,3393,3394],{"class":473}," classifyPrompt ",[309,3396,571],{"class":481},[309,3398,550],{"class":473},[309,3400,3401,3403,3406,3408,3410,3412,3414,3416,3418,3420,3423,3425,3427,3429,3432,3434],{"class":311,"line":349},[309,3402,1287],{"class":477},[309,3404,3405],{"class":473}," response ",[309,3407,1293],{"class":481},[309,3409,1621],{"class":462},[309,3411,1819],{"class":469},[309,3413,474],{"class":473},[309,3415,1649],{"class":481},[309,3417,3379],{"class":512},[309,3419,523],{"class":481},[309,3421,3422],{"class":473}," smart",[309,3424,1301],{"class":481},[309,3426,3389],{"class":512},[309,3428,523],{"class":481},[309,3430,3431],{"class":473}," detailedPrompt ",[309,3433,571],{"class":481},[309,3435,550],{"class":473},[299,3437,3439],{"className":764,"code":3438,"filename":766,"language":767,"meta":305,"style":305},"{\n  \"ai\": {\n    \"calls\": 2,\n    \"model\": \"claude-sonnet-4.6\",\n    \"models\": [\"claude-haiku-4.5\", \"claude-sonnet-4.6\"],\n    \"provider\": \"anthropic\",\n    \"inputTokens\": 450,\n    \"outputTokens\": 300,\n    \"totalTokens\": 750\n  }\n}\n",[291,3440,3441,3445,3457,3472,3490,3520,3538,3553,3567,3580,3584],{"__ignoreMap":305},[309,3442,3443],{"class":311,"line":312},[309,3444,515],{"class":481},[309,3446,3447,3449,3451,3453,3455],{"class":311,"line":318},[309,3448,778],{"class":481},[309,3450,860],{"class":477},[309,3452,784],{"class":481},[309,3454,523],{"class":481},[309,3456,495],{"class":481},[309,3458,3459,3461,3463,3465,3467,3470],{"class":311,"line":325},[309,3460,871],{"class":481},[309,3462,874],{"class":405},[309,3464,784],{"class":481},[309,3466,523],{"class":481},[309,3468,3469],{"class":830}," 2",[309,3471,535],{"class":481},[309,3473,3474,3476,3478,3480,3482,3484,3486,3488],{"class":311,"line":331},[309,3475,871],{"class":481},[309,3477,890],{"class":405},[309,3479,784],{"class":481},[309,3481,523],{"class":481},[309,3483,789],{"class":481},[309,3485,899],{"class":408},[309,3487,784],{"class":481},[309,3489,535],{"class":481},[309,3491,3492,3494,3496,3498,3500,3502,3504,3507,3509,3511,3513,3515,3517],{"class":311,"line":337},[309,3493,871],{"class":481},[309,3495,3279],{"class":405},[309,3497,784],{"class":481},[309,3499,523],{"class":481},[309,3501,2729],{"class":481},[309,3503,784],{"class":481},[309,3505,3506],{"class":408},"claude-haiku-4.5",[309,3508,784],{"class":481},[309,3510,1301],{"class":481},[309,3512,789],{"class":481},[309,3514,899],{"class":408},[309,3516,784],{"class":481},[309,3518,3519],{"class":481},"],\n",[309,3521,3522,3524,3526,3528,3530,3532,3534,3536],{"class":311,"line":343},[309,3523,871],{"class":481},[309,3525,910],{"class":405},[309,3527,784],{"class":481},[309,3529,523],{"class":481},[309,3531,789],{"class":481},[309,3533,919],{"class":408},[309,3535,784],{"class":481},[309,3537,535],{"class":481},[309,3539,3540,3542,3544,3546,3548,3551],{"class":311,"line":349},[309,3541,871],{"class":481},[309,3543,930],{"class":405},[309,3545,784],{"class":481},[309,3547,523],{"class":481},[309,3549,3550],{"class":830}," 450",[309,3552,535],{"class":481},[309,3554,3555,3557,3559,3561,3563,3565],{"class":311,"line":355},[309,3556,871],{"class":481},[309,3558,946],{"class":405},[309,3560,784],{"class":481},[309,3562,523],{"class":481},[309,3564,2716],{"class":830},[309,3566,535],{"class":481},[309,3568,3569,3571,3573,3575,3577],{"class":311,"line":361},[309,3570,871],{"class":481},[309,3572,962],{"class":405},[309,3574,784],{"class":481},[309,3576,523],{"class":481},[309,3578,3579],{"class":830}," 750\n",[309,3581,3582],{"class":311,"line":367},[309,3583,1063],{"class":481},[309,3585,3586],{"class":311,"line":372},[309,3587,1069],{"class":481},[1162,3589,3591],{"id":3590},"model-object-support","Model object support",[288,3593,3594,3597],{},[291,3595,3596],{},"wrap()"," also accepts model objects from provider SDKs if you prefer explicit imports:",[299,3599,3601],{"className":452,"code":3600,"filename":1274,"language":455,"meta":305,"style":305},"import { anthropic } from '@ai-sdk\u002Fanthropic'\n\nconst model = ai.wrap(anthropic('claude-sonnet-4.6'))\n",[291,3602,3603,3623,3627],{"__ignoreMap":305},[309,3604,3605,3607,3609,3612,3614,3616,3618,3621],{"class":311,"line":312},[309,3606,584],{"class":462},[309,3608,587],{"class":481},[309,3610,3611],{"class":473}," anthropic",[309,3613,593],{"class":481},[309,3615,596],{"class":462},[309,3617,526],{"class":481},[309,3619,3620],{"class":408},"@ai-sdk\u002Fanthropic",[309,3622,604],{"class":481},[309,3624,3625],{"class":311,"line":318},[309,3626,322],{"emptyLinePlaceholder":321},[309,3628,3629,3631,3634,3636,3638,3640,3642,3644,3646,3648,3650,3652,3654],{"class":311,"line":325},[309,3630,1287],{"class":477},[309,3632,3633],{"class":473}," model ",[309,3635,1293],{"class":481},[309,3637,673],{"class":473},[309,3639,560],{"class":481},[309,3641,715],{"class":469},[309,3643,474],{"class":473},[309,3645,919],{"class":469},[309,3647,474],{"class":473},[309,3649,532],{"class":481},[309,3651,899],{"class":408},[309,3653,532],{"class":481},[309,3655,3656],{"class":473},"))\n",[383,3658,3660],{"id":3659},"captured-data","Captured Data",[1085,3662,3663,3675],{},[1088,3664,3665],{},[1091,3666,3667,3670,3673],{},[1094,3668,3669],{},"Wide event field",[1094,3671,3672],{},"Source",[1094,3674,1099],{},[1101,3676,3677,3690,3705,3718,3742,3757,3772,3787,3802,3817,3832,3852,3875,3893,3906,3919,3932,3944,3956],{},[1091,3678,3679,3684,3687],{},[1106,3680,3681],{},[291,3682,3683],{},"ai.calls",[1106,3685,3686],{},"Call count",[1106,3688,3689],{},"Number of AI calls in this request",[1091,3691,3692,3697,3702],{},[1106,3693,3694],{},[291,3695,3696],{},"ai.model",[1106,3698,3699],{},[291,3700,3701],{},"response.modelId",[1106,3703,3704],{},"Model that served the response",[1091,3706,3707,3712,3715],{},[1106,3708,3709],{},[291,3710,3711],{},"ai.models",[1106,3713,3714],{},"All model IDs",[1106,3716,3717],{},"Array of all models used (only when > 1)",[1091,3719,3720,3725,3730],{},[1106,3721,3722],{},[291,3723,3724],{},"ai.provider",[1106,3726,3727],{},[291,3728,3729],{},"model.provider",[1106,3731,3732,3733,1125,3735,1125,3738,3741],{},"Provider (",[291,3734,919],{},[291,3736,3737],{},"openai",[291,3739,3740],{},"google",", etc.)",[1091,3743,3744,3749,3754],{},[1106,3745,3746],{},[291,3747,3748],{},"ai.inputTokens",[1106,3750,3751],{},[291,3752,3753],{},"usage.inputTokens.total",[1106,3755,3756],{},"Total input tokens across all calls",[1091,3758,3759,3764,3769],{},[1106,3760,3761],{},[291,3762,3763],{},"ai.outputTokens",[1106,3765,3766],{},[291,3767,3768],{},"usage.outputTokens.total",[1106,3770,3771],{},"Total output tokens across all calls",[1091,3773,3774,3779,3782],{},[1106,3775,3776],{},[291,3777,3778],{},"ai.totalTokens",[1106,3780,3781],{},"Computed",[1106,3783,3784],{},[291,3785,3786],{},"inputTokens + outputTokens",[1091,3788,3789,3794,3799],{},[1106,3790,3791],{},[291,3792,3793],{},"ai.cacheReadTokens",[1106,3795,3796],{},[291,3797,3798],{},"usage.inputTokens.cacheRead",[1106,3800,3801],{},"Tokens served from prompt cache",[1091,3803,3804,3809,3814],{},[1106,3805,3806],{},[291,3807,3808],{},"ai.cacheWriteTokens",[1106,3810,3811],{},[291,3812,3813],{},"usage.inputTokens.cacheWrite",[1106,3815,3816],{},"Tokens written to prompt cache",[1091,3818,3819,3824,3829],{},[1106,3820,3821],{},[291,3822,3823],{},"ai.reasoningTokens",[1106,3825,3826],{},[291,3827,3828],{},"usage.outputTokens.reasoning",[1106,3830,3831],{},"Reasoning tokens (extended thinking)",[1091,3833,3834,3839,3844],{},[1106,3835,3836],{},[291,3837,3838],{},"ai.finishReason",[1106,3840,3841],{},[291,3842,3843],{},"finishReason.unified",[1106,3845,3846,3847,1125,3849,3741],{},"Why generation ended (",[291,3848,1004],{},[291,3850,3851],{},"tool-calls",[1091,3853,3854,3859,3862],{},[1106,3855,3856],{},[291,3857,3858],{},"ai.toolCalls",[1106,3860,3861],{},"Content \u002F stream chunks",[1106,3863,3864,3867,3868,3871,3872,3874],{},[291,3865,3866],{},"string[]"," of tool names by default, or ",[291,3869,3870],{},"Array\u003C{ name, input }>"," when ",[291,3873,1191],{}," is enabled",[1091,3876,3877,3882,3887],{},[1106,3878,3879],{},[291,3880,3881],{},"ai.responseId",[1106,3883,3884],{},[291,3885,3886],{},"response.id",[1106,3888,3889,3890,489],{},"Provider-assigned response ID (e.g. Anthropic's ",[291,3891,3892],{},"msg_...",[1091,3894,3895,3900,3903],{},[1106,3896,3897],{},[291,3898,3899],{},"ai.steps",[1106,3901,3902],{},"Step count",[1106,3904,3905],{},"Number of LLM calls (only when > 1)",[1091,3907,3908,3913,3916],{},[1106,3909,3910],{},[291,3911,3912],{},"ai.stepsUsage",[1106,3914,3915],{},"Per-step accumulation",[1106,3917,3918],{},"Per-step token and tool call breakdown (only when > 1 step)",[1091,3920,3921,3926,3929],{},[1106,3922,3923],{},[291,3924,3925],{},"ai.msToFirstChunk",[1106,3927,3928],{},"Stream timing",[1106,3930,3931],{},"Time to first text chunk (streaming only)",[1091,3933,3934,3939,3941],{},[1106,3935,3936],{},[291,3937,3938],{},"ai.msToFinish",[1106,3940,3928],{},[1106,3942,3943],{},"Total stream duration (streaming only)",[1091,3945,3946,3951,3953],{},[1106,3947,3948],{},[291,3949,3950],{},"ai.tokensPerSecond",[1106,3952,3781],{},[1106,3954,3955],{},"Output tokens per second (streaming only)",[1091,3957,3958,3963,3966],{},[1106,3959,3960],{},[291,3961,3962],{},"ai.error",[1106,3964,3965],{},"Error capture",[1106,3967,3968],{},"Error message if a model call fails",[383,3970,3972],{"id":3971},"composability","Composability",[288,3974,3975,3978,3979,523],{},[291,3976,3977],{},"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 ",[291,3980,3977],{},[299,3982,3984],{"className":452,"code":3983,"filename":1274,"language":455,"meta":305,"style":305},"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",[291,3985,3986,4004,4024,4043,4047,4069,4081,4103],{"__ignoreMap":305},[309,3987,3988,3990,3992,3994,3996,3998,4000,4002],{"class":311,"line":312},[309,3989,584],{"class":462},[309,3991,587],{"class":481},[309,3993,613],{"class":473},[309,3995,593],{"class":481},[309,3997,596],{"class":462},[309,3999,526],{"class":481},[309,4001,293],{"class":408},[309,4003,604],{"class":481},[309,4005,4006,4008,4010,4013,4015,4017,4019,4022],{"class":311,"line":318},[309,4007,584],{"class":462},[309,4009,587],{"class":481},[309,4011,4012],{"class":473}," withSupermemory",[309,4014,593],{"class":481},[309,4016,596],{"class":462},[309,4018,526],{"class":481},[309,4020,4021],{"class":408},"@supermemory\u002Ftools\u002Fai-sdk",[309,4023,604],{"class":481},[309,4025,4026,4028,4030,4033,4035,4037,4039,4041],{"class":311,"line":325},[309,4027,584],{"class":462},[309,4029,587],{"class":481},[309,4031,4032],{"class":473}," createGateway",[309,4034,593],{"class":481},[309,4036,596],{"class":462},[309,4038,526],{"class":481},[309,4040,860],{"class":408},[309,4042,604],{"class":481},[309,4044,4045],{"class":311,"line":331},[309,4046,322],{"emptyLinePlaceholder":321},[309,4048,4049,4051,4054,4056,4058,4060,4062,4065,4067],{"class":311,"line":337},[309,4050,1287],{"class":477},[309,4052,4053],{"class":473}," gateway ",[309,4055,1293],{"class":481},[309,4057,4032],{"class":469},[309,4059,474],{"class":473},[309,4061,1649],{"class":481},[309,4063,4064],{"class":481}," ...",[309,4066,593],{"class":481},[309,4068,550],{"class":473},[309,4070,4071,4073,4075,4077,4079],{"class":311,"line":343},[309,4072,1287],{"class":477},[309,4074,1290],{"class":473},[309,4076,1293],{"class":481},[309,4078,613],{"class":469},[309,4080,3300],{"class":473},[309,4082,4083,4085,4088,4090,4093,4095,4097,4099,4101],{"class":311,"line":349},[309,4084,1287],{"class":477},[309,4086,4087],{"class":473}," base ",[309,4089,1293],{"class":481},[309,4091,4092],{"class":469}," gateway",[309,4094,474],{"class":473},[309,4096,532],{"class":481},[309,4098,529],{"class":408},[309,4100,532],{"class":481},[309,4102,550],{"class":473},[309,4104,4105,4107,4109,4111,4113,4115,4117,4119,4122,4125,4127,4129,4132,4134,4136,4138,4141,4143,4145,4148,4150,4152],{"class":311,"line":355},[309,4106,1287],{"class":477},[309,4108,3633],{"class":473},[309,4110,1293],{"class":481},[309,4112,673],{"class":473},[309,4114,560],{"class":481},[309,4116,715],{"class":469},[309,4118,474],{"class":473},[309,4120,4121],{"class":469},"withSupermemory",[309,4123,4124],{"class":473},"(base",[309,4126,1301],{"class":481},[309,4128,526],{"class":481},[309,4130,4131],{"class":408},"your-org-id",[309,4133,532],{"class":481},[309,4135,1301],{"class":481},[309,4137,587],{"class":481},[309,4139,4140],{"class":512}," mode",[309,4142,523],{"class":481},[309,4144,526],{"class":481},[309,4146,4147],{"class":408},"full",[309,4149,532],{"class":481},[309,4151,593],{"class":481},[309,4153,3656],{"class":473},[288,4155,4156,4157,4160,4161,523],{},"For explicit middleware composition, use ",[291,4158,4159],{},"createAIMiddleware"," to get the raw middleware and compose it yourself via ",[291,4162,4163],{},"wrapLanguageModel",[299,4165,4167],{"className":452,"code":4166,"filename":1274,"language":455,"meta":305,"style":305},"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",[291,4168,4169,4188,4207,4211,4225,4237,4271],{"__ignoreMap":305},[309,4170,4171,4173,4175,4178,4180,4182,4184,4186],{"class":311,"line":312},[309,4172,584],{"class":462},[309,4174,587],{"class":481},[309,4176,4177],{"class":473}," createAIMiddleware",[309,4179,593],{"class":481},[309,4181,596],{"class":462},[309,4183,526],{"class":481},[309,4185,293],{"class":408},[309,4187,604],{"class":481},[309,4189,4190,4192,4194,4197,4199,4201,4203,4205],{"class":311,"line":318},[309,4191,584],{"class":462},[309,4193,587],{"class":481},[309,4195,4196],{"class":473}," wrapLanguageModel",[309,4198,593],{"class":481},[309,4200,596],{"class":462},[309,4202,526],{"class":481},[309,4204,860],{"class":408},[309,4206,604],{"class":481},[309,4208,4209],{"class":311,"line":325},[309,4210,322],{"emptyLinePlaceholder":321},[309,4212,4213,4215,4217,4219,4221,4223],{"class":311,"line":331},[309,4214,1287],{"class":477},[309,4216,3633],{"class":473},[309,4218,1293],{"class":481},[309,4220,4196],{"class":469},[309,4222,474],{"class":473},[309,4224,515],{"class":481},[309,4226,4227,4230,4232,4235],{"class":311,"line":337},[309,4228,4229],{"class":512},"  model",[309,4231,523],{"class":481},[309,4233,4234],{"class":473}," base",[309,4236,535],{"class":481},[309,4238,4239,4242,4244,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264,4266,4269],{"class":311,"line":343},[309,4240,4241],{"class":512},"  middleware",[309,4243,523],{"class":481},[309,4245,2729],{"class":473},[309,4247,4159],{"class":469},[309,4249,1298],{"class":473},[309,4251,1301],{"class":481},[309,4253,587],{"class":481},[309,4255,1306],{"class":512},[309,4257,523],{"class":481},[309,4259,1312],{"class":1311},[309,4261,593],{"class":481},[309,4263,489],{"class":473},[309,4265,1301],{"class":481},[309,4267,4268],{"class":473}," otherMiddleware]",[309,4270,535],{"class":481},[309,4272,4273,4275],{"class":311,"line":349},[309,4274,571],{"class":481},[309,4276,550],{"class":473},[288,4278,4279,4281,4282,4285,4286,4288,4289,4291,4292,4294,4295,4297],{},[291,4280,4159],{}," returns the same middleware that ",[291,4283,4284],{},"createAILogger"," uses internally. The difference: ",[291,4287,4159],{}," does not include ",[291,4290,2928],{}," (embedding models don't use middleware). Use ",[291,4293,4284],{}," for the full API, ",[291,4296,4159],{}," when you need explicit middleware ordering.",[383,4299,4301],{"id":4300},"error-handling","Error Handling",[288,4303,4304],{},"If a model call fails, the middleware captures the error into the wide event before re-throwing:",[299,4306,4308],{"className":764,"code":4307,"filename":766,"language":767,"meta":305,"style":305},"{\n  \"ai\": {\n    \"calls\": 1,\n    \"model\": \"claude-sonnet-4.6\",\n    \"provider\": \"anthropic\",\n    \"finishReason\": \"error\",\n    \"error\": \"API rate limit exceeded\"\n  }\n}\n",[291,4309,4310,4314,4326,4340,4358,4376,4395,4413,4417],{"__ignoreMap":305},[309,4311,4312],{"class":311,"line":312},[309,4313,515],{"class":481},[309,4315,4316,4318,4320,4322,4324],{"class":311,"line":318},[309,4317,778],{"class":481},[309,4319,860],{"class":477},[309,4321,784],{"class":481},[309,4323,523],{"class":481},[309,4325,495],{"class":481},[309,4327,4328,4330,4332,4334,4336,4338],{"class":311,"line":325},[309,4329,871],{"class":481},[309,4331,874],{"class":405},[309,4333,784],{"class":481},[309,4335,523],{"class":481},[309,4337,881],{"class":830},[309,4339,535],{"class":481},[309,4341,4342,4344,4346,4348,4350,4352,4354,4356],{"class":311,"line":331},[309,4343,871],{"class":481},[309,4345,890],{"class":405},[309,4347,784],{"class":481},[309,4349,523],{"class":481},[309,4351,789],{"class":481},[309,4353,899],{"class":408},[309,4355,784],{"class":481},[309,4357,535],{"class":481},[309,4359,4360,4362,4364,4366,4368,4370,4372,4374],{"class":311,"line":337},[309,4361,871],{"class":481},[309,4363,910],{"class":405},[309,4365,784],{"class":481},[309,4367,523],{"class":481},[309,4369,789],{"class":481},[309,4371,919],{"class":408},[309,4373,784],{"class":481},[309,4375,535],{"class":481},[309,4377,4378,4380,4382,4384,4386,4388,4391,4393],{"class":311,"line":343},[309,4379,871],{"class":481},[309,4381,995],{"class":405},[309,4383,784],{"class":481},[309,4385,523],{"class":481},[309,4387,789],{"class":481},[309,4389,4390],{"class":408},"error",[309,4392,784],{"class":481},[309,4394,535],{"class":481},[309,4396,4397,4399,4401,4403,4405,4407,4410],{"class":311,"line":349},[309,4398,871],{"class":481},[309,4400,4390],{"class":405},[309,4402,784],{"class":481},[309,4404,523],{"class":481},[309,4406,789],{"class":481},[309,4408,4409],{"class":408},"API rate limit exceeded",[309,4411,4412],{"class":481},"\"\n",[309,4414,4415],{"class":311,"line":355},[309,4416,1063],{"class":481},[309,4418,4419],{"class":311,"line":361},[309,4420,1069],{"class":481},[288,4422,4423],{},"Stream errors (e.g. content filter) are also captured from the stream's error chunks.",[383,4425,4427],{"id":4426},"works-with-all-frameworks","Works With All Frameworks",[288,4429,4430,4432],{},[291,4431,293],{}," works with any framework that evlog supports:",[391,4434,4435,4506,4600,4695,4784,4854],{},[299,4436,4438],{"className":452,"code":4437,"filename":115,"language":455,"meta":305,"style":305},"import { useLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nconst log = useLogger(event)\nconst ai = createAILogger(log)\n",[291,4439,4440,4458,4476,4480,4494],{"__ignoreMap":305},[309,4441,4442,4444,4446,4448,4450,4452,4454,4456],{"class":311,"line":312},[309,4443,584],{"class":462},[309,4445,587],{"class":481},[309,4447,590],{"class":473},[309,4449,593],{"class":481},[309,4451,596],{"class":462},[309,4453,526],{"class":481},[309,4455,601],{"class":408},[309,4457,604],{"class":481},[309,4459,4460,4462,4464,4466,4468,4470,4472,4474],{"class":311,"line":318},[309,4461,584],{"class":462},[309,4463,587],{"class":481},[309,4465,613],{"class":473},[309,4467,593],{"class":481},[309,4469,596],{"class":462},[309,4471,526],{"class":481},[309,4473,293],{"class":408},[309,4475,604],{"class":481},[309,4477,4478],{"class":311,"line":325},[309,4479,322],{"emptyLinePlaceholder":321},[309,4481,4482,4484,4487,4489,4491],{"class":311,"line":331},[309,4483,1287],{"class":477},[309,4485,4486],{"class":473}," log ",[309,4488,1293],{"class":481},[309,4490,590],{"class":469},[309,4492,4493],{"class":473},"(event)\n",[309,4495,4496,4498,4500,4502,4504],{"class":311,"line":337},[309,4497,1287],{"class":477},[309,4499,1290],{"class":473},[309,4501,1293],{"class":481},[309,4503,613],{"class":469},[309,4505,3300],{"class":473},[299,4507,4509],{"className":452,"code":4508,"filename":145,"language":455,"meta":305,"style":305},"import { createAILogger } from 'evlog\u002Fai'\n\napp.post('\u002Fapi\u002Fchat', (req, res) => {\n  const ai = createAILogger(req.log)\n  \u002F\u002F ...\n})\n",[291,4510,4511,4529,4533,4569,4589,4594],{"__ignoreMap":305},[309,4512,4513,4515,4517,4519,4521,4523,4525,4527],{"class":311,"line":312},[309,4514,584],{"class":462},[309,4516,587],{"class":481},[309,4518,613],{"class":473},[309,4520,593],{"class":481},[309,4522,596],{"class":462},[309,4524,526],{"class":481},[309,4526,293],{"class":408},[309,4528,604],{"class":481},[309,4530,4531],{"class":311,"line":318},[309,4532,322],{"emptyLinePlaceholder":321},[309,4534,4535,4538,4540,4543,4545,4547,4549,4551,4553,4555,4558,4560,4563,4565,4567],{"class":311,"line":325},[309,4536,4537],{"class":473},"app",[309,4539,560],{"class":481},[309,4541,4542],{"class":469},"post",[309,4544,474],{"class":473},[309,4546,532],{"class":481},[309,4548,812],{"class":408},[309,4550,532],{"class":481},[309,4552,1301],{"class":481},[309,4554,482],{"class":481},[309,4556,4557],{"class":485},"req",[309,4559,1301],{"class":481},[309,4561,4562],{"class":485}," res",[309,4564,489],{"class":481},[309,4566,492],{"class":477},[309,4568,495],{"class":481},[309,4570,4571,4573,4575,4577,4579,4581,4583,4585,4587],{"class":311,"line":331},[309,4572,500],{"class":477},[309,4574,673],{"class":473},[309,4576,506],{"class":481},[309,4578,613],{"class":469},[309,4580,474],{"class":512},[309,4582,4557],{"class":473},[309,4584,560],{"class":481},[309,4586,682],{"class":473},[309,4588,550],{"class":512},[309,4590,4591],{"class":311,"line":337},[309,4592,4593],{"class":1281},"  \u002F\u002F ...\n",[309,4595,4596,4598],{"class":311,"line":343},[309,4597,571],{"class":481},[309,4599,550],{"class":473},[299,4601,4603],{"className":452,"code":4602,"filename":150,"language":455,"meta":305,"style":305},"import { createAILogger } from 'evlog\u002Fai'\n\napp.post('\u002Fapi\u002Fchat', (c) => {\n  const ai = createAILogger(c.get('log'))\n  \u002F\u002F ...\n})\n",[291,4604,4605,4623,4627,4656,4685,4689],{"__ignoreMap":305},[309,4606,4607,4609,4611,4613,4615,4617,4619,4621],{"class":311,"line":312},[309,4608,584],{"class":462},[309,4610,587],{"class":481},[309,4612,613],{"class":473},[309,4614,593],{"class":481},[309,4616,596],{"class":462},[309,4618,526],{"class":481},[309,4620,293],{"class":408},[309,4622,604],{"class":481},[309,4624,4625],{"class":311,"line":318},[309,4626,322],{"emptyLinePlaceholder":321},[309,4628,4629,4631,4633,4635,4637,4639,4641,4643,4645,4647,4650,4652,4654],{"class":311,"line":325},[309,4630,4537],{"class":473},[309,4632,560],{"class":481},[309,4634,4542],{"class":469},[309,4636,474],{"class":473},[309,4638,532],{"class":481},[309,4640,812],{"class":408},[309,4642,532],{"class":481},[309,4644,1301],{"class":481},[309,4646,482],{"class":481},[309,4648,4649],{"class":485},"c",[309,4651,489],{"class":481},[309,4653,492],{"class":477},[309,4655,495],{"class":481},[309,4657,4658,4660,4662,4664,4666,4668,4670,4672,4675,4677,4679,4681,4683],{"class":311,"line":331},[309,4659,500],{"class":477},[309,4661,673],{"class":473},[309,4663,506],{"class":481},[309,4665,613],{"class":469},[309,4667,474],{"class":512},[309,4669,4649],{"class":473},[309,4671,560],{"class":481},[309,4673,4674],{"class":469},"get",[309,4676,474],{"class":512},[309,4678,532],{"class":481},[309,4680,682],{"class":408},[309,4682,532],{"class":481},[309,4684,3656],{"class":512},[309,4686,4687],{"class":311,"line":337},[309,4688,4593],{"class":1281},[309,4690,4691,4693],{"class":311,"line":343},[309,4692,571],{"class":481},[309,4694,550],{"class":473},[299,4696,4698],{"className":452,"code":4697,"filename":155,"language":455,"meta":305,"style":305},"import { createAILogger } from 'evlog\u002Fai'\n\napp.post('\u002Fapi\u002Fchat', async (request) => {\n  const ai = createAILogger(request.log)\n  \u002F\u002F ...\n})\n",[291,4699,4700,4718,4722,4754,4774,4778],{"__ignoreMap":305},[309,4701,4702,4704,4706,4708,4710,4712,4714,4716],{"class":311,"line":312},[309,4703,584],{"class":462},[309,4705,587],{"class":481},[309,4707,613],{"class":473},[309,4709,593],{"class":481},[309,4711,596],{"class":462},[309,4713,526],{"class":481},[309,4715,293],{"class":408},[309,4717,604],{"class":481},[309,4719,4720],{"class":311,"line":318},[309,4721,322],{"emptyLinePlaceholder":321},[309,4723,4724,4726,4728,4730,4732,4734,4736,4738,4740,4743,4745,4748,4750,4752],{"class":311,"line":325},[309,4725,4537],{"class":473},[309,4727,560],{"class":481},[309,4729,4542],{"class":469},[309,4731,474],{"class":473},[309,4733,532],{"class":481},[309,4735,812],{"class":408},[309,4737,532],{"class":481},[309,4739,1301],{"class":481},[309,4741,4742],{"class":477}," async",[309,4744,482],{"class":481},[309,4746,4747],{"class":485},"request",[309,4749,489],{"class":481},[309,4751,492],{"class":477},[309,4753,495],{"class":481},[309,4755,4756,4758,4760,4762,4764,4766,4768,4770,4772],{"class":311,"line":331},[309,4757,500],{"class":477},[309,4759,673],{"class":473},[309,4761,506],{"class":481},[309,4763,613],{"class":469},[309,4765,474],{"class":512},[309,4767,4747],{"class":473},[309,4769,560],{"class":481},[309,4771,682],{"class":473},[309,4773,550],{"class":512},[309,4775,4776],{"class":311,"line":337},[309,4777,4593],{"class":1281},[309,4779,4780,4782],{"class":311,"line":343},[309,4781,571],{"class":481},[309,4783,550],{"class":473},[299,4785,4787],{"className":452,"code":4786,"filename":140,"language":455,"meta":305,"style":305},"import { useLogger } from 'evlog\u002Fnestjs'\nimport { createAILogger } from 'evlog\u002Fai'\n\nconst log = useLogger()\nconst ai = createAILogger(log)\n",[291,4788,4789,4808,4826,4830,4842],{"__ignoreMap":305},[309,4790,4791,4793,4795,4797,4799,4801,4803,4806],{"class":311,"line":312},[309,4792,584],{"class":462},[309,4794,587],{"class":481},[309,4796,590],{"class":473},[309,4798,593],{"class":481},[309,4800,596],{"class":462},[309,4802,526],{"class":481},[309,4804,4805],{"class":408},"evlog\u002Fnestjs",[309,4807,604],{"class":481},[309,4809,4810,4812,4814,4816,4818,4820,4822,4824],{"class":311,"line":318},[309,4811,584],{"class":462},[309,4813,587],{"class":481},[309,4815,613],{"class":473},[309,4817,593],{"class":481},[309,4819,596],{"class":462},[309,4821,526],{"class":481},[309,4823,293],{"class":408},[309,4825,604],{"class":481},[309,4827,4828],{"class":311,"line":325},[309,4829,322],{"emptyLinePlaceholder":321},[309,4831,4832,4834,4836,4838,4840],{"class":311,"line":331},[309,4833,1287],{"class":477},[309,4835,4486],{"class":473},[309,4837,1293],{"class":481},[309,4839,590],{"class":469},[309,4841,566],{"class":473},[309,4843,4844,4846,4848,4850,4852],{"class":311,"line":337},[309,4845,1287],{"class":477},[309,4847,1290],{"class":473},[309,4849,1293],{"class":481},[309,4851,613],{"class":469},[309,4853,3300],{"class":473},[299,4855,4857],{"className":452,"code":4856,"filename":175,"language":455,"meta":305,"style":305},"import { createLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nconst log = createLogger()\nconst ai = createAILogger(log)\n\u002F\u002F ...\nlog.emit()\n",[291,4858,4859,4878,4896,4900,4912,4924,4929],{"__ignoreMap":305},[309,4860,4861,4863,4865,4868,4870,4872,4874,4876],{"class":311,"line":312},[309,4862,584],{"class":462},[309,4864,587],{"class":481},[309,4866,4867],{"class":473}," createLogger",[309,4869,593],{"class":481},[309,4871,596],{"class":462},[309,4873,526],{"class":481},[309,4875,601],{"class":408},[309,4877,604],{"class":481},[309,4879,4880,4882,4884,4886,4888,4890,4892,4894],{"class":311,"line":318},[309,4881,584],{"class":462},[309,4883,587],{"class":481},[309,4885,613],{"class":473},[309,4887,593],{"class":481},[309,4889,596],{"class":462},[309,4891,526],{"class":481},[309,4893,293],{"class":408},[309,4895,604],{"class":481},[309,4897,4898],{"class":311,"line":325},[309,4899,322],{"emptyLinePlaceholder":321},[309,4901,4902,4904,4906,4908,4910],{"class":311,"line":331},[309,4903,1287],{"class":477},[309,4905,4486],{"class":473},[309,4907,1293],{"class":481},[309,4909,4867],{"class":469},[309,4911,566],{"class":473},[309,4913,4914,4916,4918,4920,4922],{"class":311,"line":337},[309,4915,1287],{"class":477},[309,4917,1290],{"class":473},[309,4919,1293],{"class":481},[309,4921,613],{"class":469},[309,4923,3300],{"class":473},[309,4925,4926],{"class":311,"line":343},[309,4927,4928],{"class":1281},"\u002F\u002F ...\n",[309,4930,4931,4933,4935,4938],{"class":311,"line":349},[309,4932,682],{"class":473},[309,4934,560],{"class":481},[309,4936,4937],{"class":469},"emit",[309,4939,566],{"class":473},[4941,4942,4943],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":305,"searchDepth":318,"depth":318,"links":4945},[4946,4947,4948,4951,4959,4960,4961,4962],{"id":385,"depth":318,"text":386},{"id":444,"depth":318,"text":20},{"id":1072,"depth":318,"text":1073,"children":4949},[4950],{"id":1164,"depth":325,"text":1165},{"id":1499,"depth":318,"text":1500,"children":4952},[4953,4954,4955,4956,4957,4958],{"id":1503,"depth":325,"text":1128},{"id":1801,"depth":325,"text":1124},{"id":2002,"depth":325,"text":2003},{"id":2921,"depth":325,"text":2922},{"id":3269,"depth":325,"text":3270},{"id":3590,"depth":325,"text":3591},{"id":3659,"depth":318,"text":3660},{"id":3971,"depth":318,"text":3972},{"id":4300,"depth":318,"text":4301},{"id":4426,"depth":318,"text":4427},"Capture token usage, tool calls, model info, and streaming metrics from the Vercel AI SDK into wide events. Wrap your model and get full AI observability.","md",[4966,4969],{"label":46,"icon":49,"to":47,"color":4967,"variant":4968},"neutral","subtle",{"label":189,"icon":4970,"to":194,"color":4967,"variant":4968},"i-lucide-plug",{},{"icon":64},{"title":61,"description":4963},"NmuvXC_sp-MwFjjU7QAtRX80ozfUTd3YaMldSXE5-3Y",[4976,4978],{"title":56,"path":57,"stem":58,"description":4977,"icon":59,"children":-1},"Capture browser events with structured logging. Same API as the server, with automatic console styling, user identity context, and optional server transport.",{"title":71,"path":72,"stem":73,"description":4979,"icon":74,"children":-1},"Understand the full lifecycle of an evlog event, from creation to drain. Covers all three modes (simple logging, wide events, request logging), sampling, enrichment, and delivery.",1775319536326]