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