[{"data":1,"prerenderedAt":1188},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-ai-sdk-options":434,"-use-cases-ai-sdk-options-surround":1183},[4,30,80,240,348,403],{"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,152],{"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],{"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,"children":156,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[157,161,166,171,176,181,186,191,196,201,206,211,216,221,225,230,235],{"title":36,"path":158,"stem":159,"icon":160},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":162,"path":163,"stem":164,"icon":165},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":167,"path":168,"stem":169,"icon":170},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":172,"path":173,"stem":174,"icon":175},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":177,"path":178,"stem":179,"icon":180},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":182,"path":183,"stem":184,"icon":185},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":187,"path":188,"stem":189,"icon":190},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":192,"path":193,"stem":194,"icon":195},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":197,"path":198,"stem":199,"icon":200},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":202,"path":203,"stem":204,"icon":205},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":207,"path":208,"stem":209,"icon":210},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":212,"path":213,"stem":214,"icon":215},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":217,"path":218,"stem":219,"icon":220},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":222,"path":223,"stem":224,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":226,"path":227,"stem":228,"icon":229},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":231,"path":232,"stem":233,"icon":234},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":236,"path":237,"stem":238,"icon":239},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":241,"path":242,"stem":243,"children":244,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[245,249,254,283,311,343],{"title":36,"path":246,"stem":247,"icon":248},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":250,"path":251,"stem":252,"icon":253},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":255,"icon":256,"path":257,"stem":258,"children":259,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[260,263,268,273,278],{"title":36,"path":261,"stem":262,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":264,"path":265,"stem":266,"icon":267},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":269,"path":270,"stem":271,"icon":272},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":274,"path":275,"stem":276,"icon":277},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":279,"path":280,"stem":281,"icon":282},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":284,"icon":285,"path":286,"stem":287,"children":288,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[289,292,297,302,306],{"title":36,"path":290,"stem":291,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":293,"path":294,"stem":295,"icon":296},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":298,"path":299,"stem":300,"icon":301},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":303,"path":304,"stem":305,"icon":253},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":307,"path":308,"stem":309,"icon":310},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":312,"icon":313,"path":314,"stem":315,"children":316,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[317,320,325,330,335,339],{"title":36,"path":318,"stem":319,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":321,"path":322,"stem":323,"icon":324},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":326,"path":327,"stem":328,"icon":329},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":331,"path":332,"stem":333,"icon":334},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":336,"path":337,"stem":338,"icon":313},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":340,"path":341,"stem":342,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":344,"path":345,"stem":346,"icon":347},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":349,"path":350,"stem":351,"children":352,"page":29},"Extend","\u002Fextend","5.extend",[353,357,362,367,372,376,380,384,388,393,398],{"title":36,"path":354,"stem":355,"icon":356},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":358,"path":359,"stem":360,"icon":361},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":363,"path":364,"stem":365,"icon":366},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":368,"path":369,"stem":370,"icon":371},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":340,"path":373,"stem":374,"icon":375},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":377,"path":378,"stem":379,"icon":356},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":381,"path":382,"stem":383,"icon":347},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":385,"path":386,"stem":387,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":389,"path":390,"stem":391,"icon":392},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":394,"path":395,"stem":396,"icon":397},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":399,"path":400,"stem":401,"icon":402},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":404,"path":405,"stem":406,"children":407,"page":29},"Reference","\u002Freference","6.reference",[408,413,416,421,425,430],{"title":409,"path":410,"stem":411,"icon":412},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":307,"path":414,"stem":415,"icon":310},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":417,"path":418,"stem":419,"icon":420},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":422,"path":423,"stem":424,"icon":313},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":426,"path":427,"stem":428,"icon":429},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":431,"path":432,"stem":433,"icon":347},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":435,"title":269,"body":436,"description":1171,"extension":1172,"links":1173,"meta":1179,"navigation":1180,"path":270,"seo":1181,"stem":271,"__hash__":1182},"docs\u002F4.use-cases\u002F2.ai-sdk\u002F03.options.md",{"type":437,"value":438,"toc":1162},"minimark",[439,447,517,522,536,548,553,609,613,655,659,810,860,873,877,887,993,1003,1010,1014,1017,1151,1158],[440,441,442,446],"p",{},[443,444,445],"code",{},"createAILogger(log, options?)"," accepts a single options bag. Every option is opt-in — defaults stay safe and quiet.",[448,449,450,469],"table",{},[451,452,453],"thead",{},[454,455,456,460,463,466],"tr",{},[457,458,459],"th",{},"Option",[457,461,462],{},"Type",[457,464,465],{},"Default",[457,467,468],{},"Description",[470,471,472,493],"tbody",{},[454,473,474,480,485,490],{},[475,476,477],"td",{},[443,478,479],{},"toolInputs",[475,481,482],{},[443,483,484],{},"boolean | ToolInputsOptions",[475,486,487],{},[443,488,489],{},"false",[475,491,492],{},"Capture tool call inputs alongside their names (off by default to avoid leaking sensitive data).",[454,494,495,500,505,510],{},[475,496,497],{},[443,498,499],{},"cost",[475,501,502],{},[443,503,504],{},"Record\u003Cstring, ModelCost>",[475,506,507],{},[443,508,509],{},"undefined",[475,511,512,513,516],{},"Pricing map. Keys are model IDs, values are ",[443,514,515],{},"{ input, output }"," in dollars per 1M tokens.",[518,519,521],"h2",{"id":520},"tool-inputs","Tool Inputs",[440,523,524,525,528,529,532,533,535],{},"By default, ",[443,526,527],{},"ai.toolCalls"," is a ",[443,530,531],{},"string[]"," of tool names. Enable ",[443,534,479],{}," to capture inputs too — useful for debugging agent behaviour or auditing what data the model reached for.",[537,538,539,540,543,544,547],"warning",{},"Tool inputs can be large and may contain sensitive data (SQL, API keys, customer PII). Use ",[443,541,542],{},"maxLength"," and ",[443,545,546],{},"transform"," rather than enabling raw capture in production.",[549,550,552],"h3",{"id":551},"capture-everything","Capture everything",[554,555,560],"pre",{"className":556,"code":557,"language":558,"meta":559,"style":559},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const ai = createAILogger(log, { toolInputs: true })\n","typescript","",[443,561,562],{"__ignoreMap":559},[563,564,567,571,575,579,583,586,589,592,596,599,603,606],"span",{"class":565,"line":566},"line",1,[563,568,570],{"class":569},"spNyl","const",[563,572,574],{"class":573},"sTEyZ"," ai ",[563,576,578],{"class":577},"sMK4o","=",[563,580,582],{"class":581},"s2Zo4"," createAILogger",[563,584,585],{"class":573},"(log",[563,587,588],{"class":577},",",[563,590,591],{"class":577}," {",[563,593,595],{"class":594},"swJcz"," toolInputs",[563,597,598],{"class":577},":",[563,600,602],{"class":601},"sfNiH"," true",[563,604,605],{"class":577}," }",[563,607,608],{"class":573},")\n",[549,610,612],{"id":611},"truncate-long-inputs","Truncate long inputs",[554,614,616],{"className":556,"code":615,"language":558,"meta":559,"style":559},"const ai = createAILogger(log, { toolInputs: { maxLength: 200 } })\n",[443,617,618],{"__ignoreMap":559},[563,619,620,622,624,626,628,630,632,634,636,638,640,643,645,649,651,653],{"class":565,"line":566},[563,621,570],{"class":569},[563,623,574],{"class":573},[563,625,578],{"class":577},[563,627,582],{"class":581},[563,629,585],{"class":573},[563,631,588],{"class":577},[563,633,591],{"class":577},[563,635,595],{"class":594},[563,637,598],{"class":577},[563,639,591],{"class":577},[563,641,642],{"class":594}," maxLength",[563,644,598],{"class":577},[563,646,648],{"class":647},"sbssI"," 200",[563,650,605],{"class":577},[563,652,605],{"class":577},[563,654,608],{"class":573},[549,656,658],{"id":657},"redact-sensitive-fields","Redact sensitive fields",[554,660,662],{"className":556,"code":661,"language":558,"meta":559,"style":559},"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",[443,663,664,681,691,705,733,781,790,796,802],{"__ignoreMap":559},[563,665,666,668,670,672,674,676,678],{"class":565,"line":566},[563,667,570],{"class":569},[563,669,574],{"class":573},[563,671,578],{"class":577},[563,673,582],{"class":581},[563,675,585],{"class":573},[563,677,588],{"class":577},[563,679,680],{"class":577}," {\n",[563,682,684,687,689],{"class":565,"line":683},2,[563,685,686],{"class":594},"  toolInputs",[563,688,598],{"class":577},[563,690,680],{"class":577},[563,692,694,697,699,702],{"class":565,"line":693},3,[563,695,696],{"class":594},"    maxLength",[563,698,598],{"class":577},[563,700,701],{"class":647}," 500",[563,703,704],{"class":577},",\n",[563,706,708,711,713,716,720,722,725,728,731],{"class":565,"line":707},4,[563,709,710],{"class":581},"    transform",[563,712,598],{"class":577},[563,714,715],{"class":577}," (",[563,717,719],{"class":718},"sHdIc","input",[563,721,588],{"class":577},[563,723,724],{"class":718}," toolName",[563,726,727],{"class":577},")",[563,729,730],{"class":569}," =>",[563,732,680],{"class":577},[563,734,736,740,742,745,748,751,755,758,761,764,766,769,771,773,776,778],{"class":565,"line":735},5,[563,737,739],{"class":738},"s7zQu","      if",[563,741,715],{"class":594},[563,743,744],{"class":573},"toolName",[563,746,747],{"class":577}," ===",[563,749,750],{"class":577}," '",[563,752,754],{"class":753},"sfazB","queryDB",[563,756,757],{"class":577},"'",[563,759,760],{"class":594},") ",[563,762,763],{"class":738},"return",[563,765,591],{"class":577},[563,767,768],{"class":594}," sql",[563,770,598],{"class":577},[563,772,750],{"class":577},[563,774,775],{"class":753},"***",[563,777,757],{"class":577},[563,779,780],{"class":577}," }\n",[563,782,784,787],{"class":565,"line":783},6,[563,785,786],{"class":738},"      return",[563,788,789],{"class":573}," input\n",[563,791,793],{"class":565,"line":792},7,[563,794,795],{"class":577},"    },\n",[563,797,799],{"class":565,"line":798},8,[563,800,801],{"class":577},"  },\n",[563,803,805,808],{"class":565,"line":804},9,[563,806,807],{"class":577},"}",[563,809,608],{"class":573},[448,811,812,823],{},[451,813,814],{},[454,815,816,819,821],{},[457,817,818],{},"Sub-option",[457,820,462],{},[457,822,468],{},[470,824,825,843],{},[454,826,827,831,836],{},[475,828,829],{},[443,830,542],{},[475,832,833],{},[443,834,835],{},"number",[475,837,838,839,842],{},"Truncate stringified inputs exceeding this character length (appends ",[443,840,841],{},"…",").",[454,844,845,849,854],{},[475,846,847],{},[443,848,546],{},[475,850,851],{},[443,852,853],{},"(input, toolName) => unknown",[475,855,856,857,859],{},"Custom transform applied before ",[443,858,542],{},". Use to redact fields or reshape data.",[440,861,862,863,865,866,868,869,872],{},"When ",[443,864,479],{}," is enabled, ",[443,867,527],{}," becomes an ",[443,870,871],{},"Array\u003C{ name, input }>"," instead of a plain string array.",[518,874,876],{"id":875},"cost-estimation","Cost Estimation",[440,878,879,880,882,883,886],{},"Pass a ",[443,881,499],{}," map to compute estimated dollar cost per call. The middleware multiplies token usage by the per-million rates and sets ",[443,884,885],{},"ai.estimatedCost"," on the wide event.",[554,888,890],{"className":556,"code":889,"language":558,"meta":559,"style":559},"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",[443,891,892,908,917,952,983,987],{"__ignoreMap":559},[563,893,894,896,898,900,902,904,906],{"class":565,"line":566},[563,895,570],{"class":569},[563,897,574],{"class":573},[563,899,578],{"class":577},[563,901,582],{"class":581},[563,903,585],{"class":573},[563,905,588],{"class":577},[563,907,680],{"class":577},[563,909,910,913,915],{"class":565,"line":683},[563,911,912],{"class":594},"  cost",[563,914,598],{"class":577},[563,916,680],{"class":577},[563,918,919,922,925,927,929,931,934,936,939,941,944,946,949],{"class":565,"line":693},[563,920,921],{"class":577},"    '",[563,923,924],{"class":594},"claude-sonnet-4.6",[563,926,757],{"class":577},[563,928,598],{"class":577},[563,930,591],{"class":577},[563,932,933],{"class":594}," input",[563,935,598],{"class":577},[563,937,938],{"class":647}," 3",[563,940,588],{"class":577},[563,942,943],{"class":594}," output",[563,945,598],{"class":577},[563,947,948],{"class":647}," 15",[563,950,951],{"class":577}," },\n",[563,953,954,956,959,961,963,965,967,969,972,974,976,978,981],{"class":565,"line":707},[563,955,921],{"class":577},[563,957,958],{"class":594},"gpt-4o",[563,960,757],{"class":577},[563,962,598],{"class":577},[563,964,591],{"class":577},[563,966,933],{"class":594},[563,968,598],{"class":577},[563,970,971],{"class":647}," 2.5",[563,973,588],{"class":577},[563,975,943],{"class":594},[563,977,598],{"class":577},[563,979,980],{"class":647}," 10",[563,982,951],{"class":577},[563,984,985],{"class":565,"line":735},[563,986,801],{"class":577},[563,988,989,991],{"class":565,"line":783},[563,990,807],{"class":577},[563,992,608],{"class":573},[440,994,995,996,1002],{},"Read the result from your handler with ",[997,998,999],"a",{"href":275},[443,1000,1001],{},"ai.getEstimatedCost()"," — useful for billing dashboards or warning users before expensive calls.",[1004,1005,1006,1007,1009],"tip",{},"Keep your ",[443,1008,499],{}," map in one file alongside model selection so renaming a model in production also updates pricing. Avoid hardcoding per-route maps.",[518,1011,1013],{"id":1012},"error-handling","Error Handling",[440,1015,1016],{},"If a model call fails, the middleware captures the error into the wide event before re-throwing:",[554,1018,1023],{"className":1019,"code":1020,"filename":1021,"language":1022,"meta":559,"style":559},"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",[443,1024,1025,1030,1045,1063,1083,1103,1123,1141,1146],{"__ignoreMap":559},[563,1026,1027],{"class":565,"line":566},[563,1028,1029],{"class":577},"{\n",[563,1031,1032,1035,1038,1041,1043],{"class":565,"line":683},[563,1033,1034],{"class":577},"  \"",[563,1036,1037],{"class":569},"ai",[563,1039,1040],{"class":577},"\"",[563,1042,598],{"class":577},[563,1044,680],{"class":577},[563,1046,1047,1050,1054,1056,1058,1061],{"class":565,"line":693},[563,1048,1049],{"class":577},"    \"",[563,1051,1053],{"class":1052},"sBMFI","calls",[563,1055,1040],{"class":577},[563,1057,598],{"class":577},[563,1059,1060],{"class":647}," 1",[563,1062,704],{"class":577},[563,1064,1065,1067,1070,1072,1074,1077,1079,1081],{"class":565,"line":707},[563,1066,1049],{"class":577},[563,1068,1069],{"class":1052},"model",[563,1071,1040],{"class":577},[563,1073,598],{"class":577},[563,1075,1076],{"class":577}," \"",[563,1078,924],{"class":753},[563,1080,1040],{"class":577},[563,1082,704],{"class":577},[563,1084,1085,1087,1090,1092,1094,1096,1099,1101],{"class":565,"line":735},[563,1086,1049],{"class":577},[563,1088,1089],{"class":1052},"provider",[563,1091,1040],{"class":577},[563,1093,598],{"class":577},[563,1095,1076],{"class":577},[563,1097,1098],{"class":753},"anthropic",[563,1100,1040],{"class":577},[563,1102,704],{"class":577},[563,1104,1105,1107,1110,1112,1114,1116,1119,1121],{"class":565,"line":783},[563,1106,1049],{"class":577},[563,1108,1109],{"class":1052},"finishReason",[563,1111,1040],{"class":577},[563,1113,598],{"class":577},[563,1115,1076],{"class":577},[563,1117,1118],{"class":753},"error",[563,1120,1040],{"class":577},[563,1122,704],{"class":577},[563,1124,1125,1127,1129,1131,1133,1135,1138],{"class":565,"line":792},[563,1126,1049],{"class":577},[563,1128,1118],{"class":1052},[563,1130,1040],{"class":577},[563,1132,598],{"class":577},[563,1134,1076],{"class":577},[563,1136,1137],{"class":753},"API rate limit exceeded",[563,1139,1140],{"class":577},"\"\n",[563,1142,1143],{"class":565,"line":798},[563,1144,1145],{"class":577},"  }\n",[563,1147,1148],{"class":565,"line":804},[563,1149,1150],{"class":577},"}\n",[440,1152,1153,1154,1157],{},"Stream errors (e.g. content filter) are also captured from the stream's error chunks. Your error-handling code (",[443,1155,1156],{},"try\u002Fcatch",", route-level error handlers) keeps working as usual — the middleware only observes.",[1159,1160,1161],"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":559,"searchDepth":683,"depth":683,"links":1163},[1164,1169,1170],{"id":520,"depth":683,"text":521,"children":1165},[1166,1167,1168],{"id":551,"depth":693,"text":552},{"id":611,"depth":693,"text":612},{"id":657,"depth":693,"text":658},{"id":875,"depth":683,"text":876},{"id":1012,"depth":683,"text":1013},"Configure tool input capture (with redaction and truncation), enable cost estimation per model, and handle errors during AI calls.","md",[1174,1177],{"label":36,"icon":39,"to":261,"color":1175,"variant":1176},"neutral","subtle",{"label":1178,"icon":267,"to":265,"color":1175,"variant":1176},"Usage Patterns",{},{"title":269,"icon":272},{"title":269,"description":1171},"xoxicNRn-mxuaHTHGhoZYwtQS8UV5jdv8PnqlqWAgjc",[1184,1186],{"title":264,"path":265,"stem":266,"description":1185,"icon":267,"children":-1},"streamText, generateText, multi-step agents, RAG, and multiple models — every common AI SDK pattern wired into evlog.",{"title":274,"path":275,"stem":276,"description":1187,"icon":277,"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.",1778443951555]