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