[{"data":1,"prerenderedAt":1205},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-ai-sdk-options":451,"-use-cases-ai-sdk-options-surround":1200},[4,30,80,245,365,420],{"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,358],{"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":284,"path":359,"stem":360,"children":361,"page":29},"\u002Fuse-cases\u002Ftelemetry","4.use-cases\u002F6.telemetry",[362],{"title":284,"path":363,"stem":364,"icon":315},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","4.use-cases\u002F6.telemetry\u002F01.overview",{"title":366,"path":367,"stem":368,"children":369,"page":29},"Extend","\u002Fextend","5.extend",[370,374,379,384,389,393,397,401,405,410,415],{"title":36,"path":371,"stem":372,"icon":373},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":375,"path":376,"stem":377,"icon":378},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":380,"path":381,"stem":382,"icon":383},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":385,"path":386,"stem":387,"icon":388},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":390,"stem":391,"icon":392},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":394,"path":395,"stem":396,"icon":373},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":398,"path":399,"stem":400,"icon":352},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":402,"path":403,"stem":404,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":406,"path":407,"stem":408,"icon":409},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":411,"path":412,"stem":413,"icon":414},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":416,"path":417,"stem":418,"icon":419},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":421,"path":422,"stem":423,"children":424,"page":29},"Reference","\u002Freference","6.reference",[425,430,433,438,442,447],{"title":426,"path":427,"stem":428,"icon":429},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":431,"stem":432,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":434,"path":435,"stem":436,"icon":437},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":439,"path":440,"stem":441,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":443,"path":444,"stem":445,"icon":446},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":448,"path":449,"stem":450,"icon":352},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":452,"title":274,"body":453,"description":1188,"extension":1189,"links":1190,"meta":1196,"navigation":1197,"path":275,"seo":1198,"stem":276,"__hash__":1199},"docs\u002F4.use-cases\u002F2.ai-sdk\u002F03.options.md",{"type":454,"value":455,"toc":1179},"minimark",[456,464,534,539,553,565,570,626,630,672,676,827,877,890,894,904,1010,1020,1027,1031,1034,1168,1175],[457,458,459,463],"p",{},[460,461,462],"code",{},"createAILogger(log, options?)"," accepts a single options bag. Every option is opt-in — defaults stay safe and quiet.",[465,466,467,486],"table",{},[468,469,470],"thead",{},[471,472,473,477,480,483],"tr",{},[474,475,476],"th",{},"Option",[474,478,479],{},"Type",[474,481,482],{},"Default",[474,484,485],{},"Description",[487,488,489,510],"tbody",{},[471,490,491,497,502,507],{},[492,493,494],"td",{},[460,495,496],{},"toolInputs",[492,498,499],{},[460,500,501],{},"boolean | ToolInputsOptions",[492,503,504],{},[460,505,506],{},"false",[492,508,509],{},"Capture tool call inputs alongside their names (off by default to avoid leaking sensitive data).",[471,511,512,517,522,527],{},[492,513,514],{},[460,515,516],{},"cost",[492,518,519],{},[460,520,521],{},"Record\u003Cstring, ModelCost>",[492,523,524],{},[460,525,526],{},"undefined",[492,528,529,530,533],{},"Pricing map. Keys are model IDs, values are ",[460,531,532],{},"{ input, output }"," in dollars per 1M tokens.",[535,536,538],"h2",{"id":537},"tool-inputs","Tool Inputs",[457,540,541,542,545,546,549,550,552],{},"By default, ",[460,543,544],{},"ai.toolCalls"," is a ",[460,547,548],{},"string[]"," of tool names. Enable ",[460,551,496],{}," to capture inputs too — useful for debugging agent behaviour or auditing what data the model reached for.",[554,555,556,557,560,561,564],"warning",{},"Tool inputs can be large and may contain sensitive data (SQL, API keys, customer PII). Use ",[460,558,559],{},"maxLength"," and ",[460,562,563],{},"transform"," rather than enabling raw capture in production.",[566,567,569],"h3",{"id":568},"capture-everything","Capture everything",[571,572,577],"pre",{"className":573,"code":574,"language":575,"meta":576,"style":576},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const ai = createAILogger(log, { toolInputs: true })\n","typescript","",[460,578,579],{"__ignoreMap":576},[580,581,584,588,592,596,600,603,606,609,613,616,620,623],"span",{"class":582,"line":583},"line",1,[580,585,587],{"class":586},"spNyl","const",[580,589,591],{"class":590},"sTEyZ"," ai ",[580,593,595],{"class":594},"sMK4o","=",[580,597,599],{"class":598},"s2Zo4"," createAILogger",[580,601,602],{"class":590},"(log",[580,604,605],{"class":594},",",[580,607,608],{"class":594}," {",[580,610,612],{"class":611},"swJcz"," toolInputs",[580,614,615],{"class":594},":",[580,617,619],{"class":618},"sfNiH"," true",[580,621,622],{"class":594}," }",[580,624,625],{"class":590},")\n",[566,627,629],{"id":628},"truncate-long-inputs","Truncate long inputs",[571,631,633],{"className":573,"code":632,"language":575,"meta":576,"style":576},"const ai = createAILogger(log, { toolInputs: { maxLength: 200 } })\n",[460,634,635],{"__ignoreMap":576},[580,636,637,639,641,643,645,647,649,651,653,655,657,660,662,666,668,670],{"class":582,"line":583},[580,638,587],{"class":586},[580,640,591],{"class":590},[580,642,595],{"class":594},[580,644,599],{"class":598},[580,646,602],{"class":590},[580,648,605],{"class":594},[580,650,608],{"class":594},[580,652,612],{"class":611},[580,654,615],{"class":594},[580,656,608],{"class":594},[580,658,659],{"class":611}," maxLength",[580,661,615],{"class":594},[580,663,665],{"class":664},"sbssI"," 200",[580,667,622],{"class":594},[580,669,622],{"class":594},[580,671,625],{"class":590},[566,673,675],{"id":674},"redact-sensitive-fields","Redact sensitive fields",[571,677,679],{"className":573,"code":678,"language":575,"meta":576,"style":576},"const 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",[460,680,681,698,708,722,750,798,807,813,819],{"__ignoreMap":576},[580,682,683,685,687,689,691,693,695],{"class":582,"line":583},[580,684,587],{"class":586},[580,686,591],{"class":590},[580,688,595],{"class":594},[580,690,599],{"class":598},[580,692,602],{"class":590},[580,694,605],{"class":594},[580,696,697],{"class":594}," {\n",[580,699,701,704,706],{"class":582,"line":700},2,[580,702,703],{"class":611},"  toolInputs",[580,705,615],{"class":594},[580,707,697],{"class":594},[580,709,711,714,716,719],{"class":582,"line":710},3,[580,712,713],{"class":611},"    maxLength",[580,715,615],{"class":594},[580,717,718],{"class":664}," 500",[580,720,721],{"class":594},",\n",[580,723,725,728,730,733,737,739,742,745,748],{"class":582,"line":724},4,[580,726,727],{"class":598},"    transform",[580,729,615],{"class":594},[580,731,732],{"class":594}," (",[580,734,736],{"class":735},"sHdIc","input",[580,738,605],{"class":594},[580,740,741],{"class":735}," toolName",[580,743,744],{"class":594},")",[580,746,747],{"class":586}," =>",[580,749,697],{"class":594},[580,751,753,757,759,762,765,768,772,775,778,781,783,786,788,790,793,795],{"class":582,"line":752},5,[580,754,756],{"class":755},"s7zQu","      if",[580,758,732],{"class":611},[580,760,761],{"class":590},"toolName",[580,763,764],{"class":594}," ===",[580,766,767],{"class":594}," '",[580,769,771],{"class":770},"sfazB","queryDB",[580,773,774],{"class":594},"'",[580,776,777],{"class":611},") ",[580,779,780],{"class":755},"return",[580,782,608],{"class":594},[580,784,785],{"class":611}," sql",[580,787,615],{"class":594},[580,789,767],{"class":594},[580,791,792],{"class":770},"***",[580,794,774],{"class":594},[580,796,797],{"class":594}," }\n",[580,799,801,804],{"class":582,"line":800},6,[580,802,803],{"class":755},"      return",[580,805,806],{"class":590}," input\n",[580,808,810],{"class":582,"line":809},7,[580,811,812],{"class":594},"    },\n",[580,814,816],{"class":582,"line":815},8,[580,817,818],{"class":594},"  },\n",[580,820,822,825],{"class":582,"line":821},9,[580,823,824],{"class":594},"}",[580,826,625],{"class":590},[465,828,829,840],{},[468,830,831],{},[471,832,833,836,838],{},[474,834,835],{},"Sub-option",[474,837,479],{},[474,839,485],{},[487,841,842,860],{},[471,843,844,848,853],{},[492,845,846],{},[460,847,559],{},[492,849,850],{},[460,851,852],{},"number",[492,854,855,856,859],{},"Truncate stringified inputs exceeding this character length (appends ",[460,857,858],{},"…",").",[471,861,862,866,871],{},[492,863,864],{},[460,865,563],{},[492,867,868],{},[460,869,870],{},"(input, toolName) => unknown",[492,872,873,874,876],{},"Custom transform applied before ",[460,875,559],{},". Use to redact fields or reshape data.",[457,878,879,880,882,883,885,886,889],{},"When ",[460,881,496],{}," is enabled, ",[460,884,544],{}," becomes an ",[460,887,888],{},"Array\u003C{ name, input }>"," instead of a plain string array.",[535,891,893],{"id":892},"cost-estimation","Cost Estimation",[457,895,896,897,899,900,903],{},"Pass a ",[460,898,516],{}," map to compute estimated dollar cost per call. The middleware multiplies token usage by the per-million rates and sets ",[460,901,902],{},"ai.estimatedCost"," on the wide event.",[571,905,907],{"className":573,"code":906,"language":575,"meta":576,"style":576},"const ai = createAILogger(log, {\n  cost: {\n    'claude-sonnet-4.6': { input: 3, output: 15 },\n    'gpt-4o': { input: 2.5, output: 10 },\n  },\n})\n",[460,908,909,925,934,969,1000,1004],{"__ignoreMap":576},[580,910,911,913,915,917,919,921,923],{"class":582,"line":583},[580,912,587],{"class":586},[580,914,591],{"class":590},[580,916,595],{"class":594},[580,918,599],{"class":598},[580,920,602],{"class":590},[580,922,605],{"class":594},[580,924,697],{"class":594},[580,926,927,930,932],{"class":582,"line":700},[580,928,929],{"class":611},"  cost",[580,931,615],{"class":594},[580,933,697],{"class":594},[580,935,936,939,942,944,946,948,951,953,956,958,961,963,966],{"class":582,"line":710},[580,937,938],{"class":594},"    '",[580,940,941],{"class":611},"claude-sonnet-4.6",[580,943,774],{"class":594},[580,945,615],{"class":594},[580,947,608],{"class":594},[580,949,950],{"class":611}," input",[580,952,615],{"class":594},[580,954,955],{"class":664}," 3",[580,957,605],{"class":594},[580,959,960],{"class":611}," output",[580,962,615],{"class":594},[580,964,965],{"class":664}," 15",[580,967,968],{"class":594}," },\n",[580,970,971,973,976,978,980,982,984,986,989,991,993,995,998],{"class":582,"line":724},[580,972,938],{"class":594},[580,974,975],{"class":611},"gpt-4o",[580,977,774],{"class":594},[580,979,615],{"class":594},[580,981,608],{"class":594},[580,983,950],{"class":611},[580,985,615],{"class":594},[580,987,988],{"class":664}," 2.5",[580,990,605],{"class":594},[580,992,960],{"class":611},[580,994,615],{"class":594},[580,996,997],{"class":664}," 10",[580,999,968],{"class":594},[580,1001,1002],{"class":582,"line":752},[580,1003,818],{"class":594},[580,1005,1006,1008],{"class":582,"line":800},[580,1007,824],{"class":594},[580,1009,625],{"class":590},[457,1011,1012,1013,1019],{},"Read the result from your handler with ",[1014,1015,1016],"a",{"href":280},[460,1017,1018],{},"ai.getEstimatedCost()"," — useful for billing dashboards or warning users before expensive calls.",[1021,1022,1023,1024,1026],"tip",{},"Keep your ",[460,1025,516],{}," map in one file alongside model selection so renaming a model in production also updates pricing. Avoid hardcoding per-route maps.",[535,1028,1030],{"id":1029},"error-handling","Error Handling",[457,1032,1033],{},"If a model call fails, the middleware captures the error into the wide event before re-throwing:",[571,1035,1040],{"className":1036,"code":1037,"filename":1038,"language":1039,"meta":576,"style":576},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\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","Wide Event","json",[460,1041,1042,1047,1062,1080,1100,1120,1140,1158,1163],{"__ignoreMap":576},[580,1043,1044],{"class":582,"line":583},[580,1045,1046],{"class":594},"{\n",[580,1048,1049,1052,1055,1058,1060],{"class":582,"line":700},[580,1050,1051],{"class":594},"  \"",[580,1053,1054],{"class":586},"ai",[580,1056,1057],{"class":594},"\"",[580,1059,615],{"class":594},[580,1061,697],{"class":594},[580,1063,1064,1067,1071,1073,1075,1078],{"class":582,"line":710},[580,1065,1066],{"class":594},"    \"",[580,1068,1070],{"class":1069},"sBMFI","calls",[580,1072,1057],{"class":594},[580,1074,615],{"class":594},[580,1076,1077],{"class":664}," 1",[580,1079,721],{"class":594},[580,1081,1082,1084,1087,1089,1091,1094,1096,1098],{"class":582,"line":724},[580,1083,1066],{"class":594},[580,1085,1086],{"class":1069},"model",[580,1088,1057],{"class":594},[580,1090,615],{"class":594},[580,1092,1093],{"class":594}," \"",[580,1095,941],{"class":770},[580,1097,1057],{"class":594},[580,1099,721],{"class":594},[580,1101,1102,1104,1107,1109,1111,1113,1116,1118],{"class":582,"line":752},[580,1103,1066],{"class":594},[580,1105,1106],{"class":1069},"provider",[580,1108,1057],{"class":594},[580,1110,615],{"class":594},[580,1112,1093],{"class":594},[580,1114,1115],{"class":770},"anthropic",[580,1117,1057],{"class":594},[580,1119,721],{"class":594},[580,1121,1122,1124,1127,1129,1131,1133,1136,1138],{"class":582,"line":800},[580,1123,1066],{"class":594},[580,1125,1126],{"class":1069},"finishReason",[580,1128,1057],{"class":594},[580,1130,615],{"class":594},[580,1132,1093],{"class":594},[580,1134,1135],{"class":770},"error",[580,1137,1057],{"class":594},[580,1139,721],{"class":594},[580,1141,1142,1144,1146,1148,1150,1152,1155],{"class":582,"line":809},[580,1143,1066],{"class":594},[580,1145,1135],{"class":1069},[580,1147,1057],{"class":594},[580,1149,615],{"class":594},[580,1151,1093],{"class":594},[580,1153,1154],{"class":770},"API rate limit exceeded",[580,1156,1157],{"class":594},"\"\n",[580,1159,1160],{"class":582,"line":815},[580,1161,1162],{"class":594},"  }\n",[580,1164,1165],{"class":582,"line":821},[580,1166,1167],{"class":594},"}\n",[457,1169,1170,1171,1174],{},"Stream errors (e.g. content filter) are also captured from the stream's error chunks. Your error-handling code (",[460,1172,1173],{},"try\u002Fcatch",", route-level error handlers) keeps working as usual — the middleware only observes.",[1176,1177,1178],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":576,"searchDepth":700,"depth":700,"links":1180},[1181,1186,1187],{"id":537,"depth":700,"text":538,"children":1182},[1183,1184,1185],{"id":568,"depth":710,"text":569},{"id":628,"depth":710,"text":629},{"id":674,"depth":710,"text":675},{"id":892,"depth":700,"text":893},{"id":1029,"depth":700,"text":1030},"Configure tool input capture (with redaction and truncation), enable cost estimation per model, and handle errors during AI calls.","md",[1191,1194],{"label":36,"icon":39,"to":266,"color":1192,"variant":1193},"neutral","subtle",{"label":1195,"icon":272,"to":270,"color":1192,"variant":1193},"Usage Patterns",{},{"title":274,"icon":277},{"title":274,"description":1188},"xoxicNRn-mxuaHTHGhoZYwtQS8UV5jdv8PnqlqWAgjc",[1201,1203],{"title":269,"path":270,"stem":271,"description":1202,"icon":272,"children":-1},"streamText, generateText, multi-step agents, RAG, and multiple models — every common AI SDK pattern wired into evlog.",{"title":279,"path":280,"stem":281,"description":1204,"icon":282,"children":-1},"Read AI metadata from your handler — persist it, surface it to end-users, bill against it, or stream incremental progress to the client.",1784142035767]