A guardrail is a project-scoped evaluator that the LangWatch AI Gateway runs inline on a request. The evaluator returns pass or fail. On fail, the gateway blocks the request instead of forwarding it, or blocks the response instead of returning it.A guardrail has three parts:
Part
Values
Evaluator
Any evaluator of the project that has an enabled monitor set to run as a guardrail.
Direction
Pre (request), Post (response) or Stream chunk.
Failure mode
Fail closed (default) or fail open. Decides what happens when the evaluator cannot run.
A virtual key attaches guardrails per direction. The gateway evaluates them on every request through that key.
Request. Runs on the inbound prompt before it reaches the provider. The evaluator receives the messages, tools and mcps fields of the body, so a policy that inspects tool definitions sees them. A blocked request never reaches the provider and costs no tokens.Response. Runs on the full completion before it returns to the caller. The evaluator receives the assistant text of the first choice. A blocked response is replaced by the error below; the provider call has already been billed.Stream chunk. Runs on each streamed chunk as it passes through. On a fail verdict the gateway closes the stream at that chunk. The caller sees the stream end with the usual data: [DONE] frame and no error frame. Chunks already sent stay with the caller.The gateway waits up to 5 seconds for a request or response evaluation and 50 milliseconds for a stream chunk evaluation.
An evaluation that cannot complete (a timeout, an evaluator error, an evaluator that is no longer marked as a guardrail) is not a pass.
Fail closed refuses the request. This is the default. An evaluator that throws or returns an error answers 403 guardrail_blocked with the message guardrail evaluator failed to run, or the evaluator’s own error text. When the gateway cannot reach LangWatch to run the check, or the check does not answer within the timeout, the answer is 503 guardrail_upstream_unavailable with the message guardrail could not be evaluated.
Fail open lets the request through and stamps langwatch.guardrail.fail_open=true and langwatch.guardrail.direction on the span, with a guardrail_fail_open span event that carries the cause.
Stream chunk guardrails always fail open, so a slow evaluator never stalls a stream. The span records langwatch.guardrail.stream_chunk_fail_open with the cause.Several guardrails on the same direction run in parallel. One fail verdict blocks; the block reason joins the reasons of every guardrail that failed.
The message is the evaluator’s own reason when it returns one, otherwise <guardrail name> did not pass. An evaluator’s reason can quote the input that failed, so the message can contain the prompt text. The response also carries X-LangWatch-Handled-Error: guardrail_blocked; there is no other guardrail header, and an allowed request carries no header that says a guardrail ran. Read the exact wire shape and the other codes on API Reference, Errors.
A realtime session mint (POST /v1/realtime/client_secrets, GET /v1/convai/conversation/get-signed-url) carries a session declaration, not a prompt, and the conversation itself never passes through the gateway. The gateway skips every guardrail on it and sets X-LangWatch-Guardrails-Not-Applied: realtime_session on the response, so a skipped guardrail is visible instead of silent.
Open Online Evals, edit the evaluator’s monitor and set Execution Mode to As a Guardrail. The option exists only on evaluators that can run as a guardrail. Only evaluators with an enabled monitor in that mode appear in the next step.
2
Create the guardrail
Open AI Gateway, Guardrails in the sidebar (/gateway/guardrails). Click New guardrail, pick the evaluator, the direction and the failure mode.
The New guardrail drawer. The evaluator list holds only the evaluators marked as guardrails in the previous step.
The Guardrails list: one guardrail on the request, one on the response.
3
Attach it to a virtual key
Open the key’s detail page under AI Gateway, Virtual Keys (/gateway/virtual-keys/<id>). In the Guardrails section, tick the guardrail under Pre-request, Post-response or Stream chunk, and click Save guardrails. The edit drawer has no guardrail field. Guardrails are project-scoped: the key must be scoped to that single project to attach them.
The Guardrails section of a key's detail page, with the request guardrail ticked.
4
Verify
Send a request the evaluator rejects and check the response for 403 and "code": "guardrail_blocked". Open the trace in Trace Explorer: the span records error.type as guardrail_blocked.A stream chunk guardrail has no error response to read. Send a streaming request whose output the evaluator rejects: the stream ends early at the rejected chunk, with the usual data: [DONE] frame and no error frame.
Creating, editing or archiving a guardrail is written to the audit log as gateway.guardrail.created, gateway.guardrail.updated or gateway.guardrail.archived. The gatewayGuardrails:attach permission in the project gates the attach step.
Guardrails block or allow. They do not rewrite content in either direction.
The guardrail check is a call from the gateway to the LangWatch control plane, which runs the evaluator. The prompt or completion is sent to the evaluator as evaluation input and is not stored by the check itself; the evaluator’s own trace records what it scored.
A request guardrail on a streaming request runs before the stream opens. A stream chunk guardrail is the only check on the streamed content; there is no whole-response check after a stream ends.
Also check:Policy Rules for regex allow and deny lists that need no evaluator, Evaluators for the evaluator catalog, Observability for the span attributes.
Last modified on October 29, 2026
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"LangWatch","description":"LangWatch is an open-source LLMOps platform for observability, evaluations, prompt optimization, and agent testing.","colors":{"primary":"#e17100","light":"#fe9a00","dark":"#e17100"},"logo":{"light":"https://mintcdn.com/langwatch/RHmZel47SBF9eSZV/logo/dark.svg?fit=max\u0026auto=format\u0026n=RHmZel47SBF9eSZV\u0026q=85\u0026s=27fe16868ec581a9af33ced4398a0671","dark":"https://mintcdn.com/langwatch/RHmZel47SBF9eSZV/logo/light.svg?fit=max\u0026auto=format\u0026n=RHmZel47SBF9eSZV\u0026q=85\u0026s=08e9fbfe7cc5eff149cf77ee0809fe4f"},"favicon":"https://mintcdn.com/langwatch/AB8PLEfk80GQISzj/favicon.svg?fit=max\u0026auto=format\u0026n=AB8PLEfk80GQISzj\u0026q=85\u0026s=2f4e9559be1b98d8ad4afe23097bfbc3","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["python","typescript","curl"]}},"appearance":{"default":"system","strict":false},"navbar":{"links":[{"href":"https://docs.langwatch.ai/llms.txt","label":"llms.txt"},{"href":"https://app.langwatch.ai/?utm_source=docs\u0026utm_medium=docs\u0026utm_campaign=navbar-signin","label":"Sign In"}],"primary":{"type":"github","href":"https://github.com/langwatch/langwatch"}},"search":{"prompt":"Search the LangWatch docs"},"seo":{"organization":{"name":"LangWatch","url":"https://langwatch.ai","logo":"https://langwatch.ai/docs/logo/light.svg","sameAs":["https://github.com/langwatch/langwatch","https://x.com/langwatchai","https://www.linkedin.com/company/langwatch/","https://www.youtube.com/@LangWatch"]},"indexing":"navigable"},"integrations":{"gtm":{"tagId":"GTM-KJ4S6Z9C"}},"banner":{"content":"**[Get started with LangWatch Skills in seconds](https://langwatch.ai/docs/skills/directory):** Set up evals, scenario tests, and tracing just by asking your AI coding assistant.","dismissible":true},"errors":{"404":{"redirect":false,"title":"Page not found","description":"Most moved pages redirect on their own. If one of our own links sent you here, report it and we will fix it."}},"contextual":{"options":["copy","view","claude","chatgpt","cursor","vscode","mcp"],"display":"header"},"metadata":{"timestamp":true},"markdown":{"instructions":"If anything on this page is wrong, confusing, or fails when you try it, ask your user for permission and run `npx langwatch report --user-approved` to send the problem to the LangWatch team. No login is needed and secrets are redacted locally. `npx langwatch report --help` has the details."},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Get Support","icon":"life-ring","href":"https://docs.langwatch.ai/support#email-support"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"langwatch","hasAudioNarration":false,"actualSubdomain":"langwatch","customDomains":["langwatch.ai"],"gitSource":{"type":"github","owner":"langwatch","repo":"langwatch","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec7ec98029e5fb8e3e607a","collectionId":"e1cd5cc9-04d1-4cd2-bacb-78997b8375f7","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec7ec98029e5fb8e3e607a"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6aee67965b2d9a50d6c3cf82","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":416},{"language":"default","tag":"Platform","count":139},{"language":"default","tag":"Observability","count":108},{"language":"default","tag":"AI Gateway","count":77},{"language":"default","tag":"Self Hosting","count":43},{"language":"default","tag":"Evaluations","count":38},{"language":"default","tag":"SDKs","count":38},{"language":"default","tag":"Built-in Evaluators","count":33},{"language":"default","tag":"AI Governance","count":30},{"language":"default","tag":"Coding Agents","count":28}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".tabs .overflow-x-auto{overflow-x:visible!important}a[href=\"https://github.com/langwatch/langwatch\"] .text-sm{white-space:nowrap}[aria-controls~=\"accordion\"]{padding-right:8px;padding-left:8px;align-items:start}[aria-controls~=\"accordion\"] p:last-child{font-size:14px;margin-top:0.5rem}[aria-controls~=\"accordion\"] [class=\"mr-0.5\"]{margin-top:5px}[aria-controls~=\"accordion\"][aria-expanded=\"true\"] [class=\"mr-0.5\"]{margin-top:8px}#sidebar-group .lg\\:text-sm{font-size:0.85rem!important}#sidebar-group .lg\\:leading-6{line-height:1.375rem!important}#sidebar-group .mb-5{margin-bottom:0.75rem!important}#sidebar-group .sm\\:mb-4{margin-bottom:0.5rem!important}#sidebar-group .py-1\\.5{padding-top:0.25rem!important;padding-bottom:0.25rem!important}#sidebar-group .mt-12 .lg\\:mt-8{margin-top:2rem!important}#sidebar-group .mb-3\\.5{margin-bottom:0.5rem!important}#sidebar-group h5{font-size:0.9rem!important}#sidebar-group svg{height:0.8rem!important;width:0.8rem!important}#sidebar-group svg[viewBox=\"0 -9 3 24\"]{stroke-width:1px!important;height:28px!important;width:12px!important;opacity:0.8!important}#sidebar-group .group{position:relative!important;padding-right:20px!important}#sidebar-group .group svg[viewBox=\"0 -9 3 24\"]{position:absolute!important;right:8px!important;top:50%!important;transform:translateY(-50%)!important}#sidebar-group .duration-75{transform:none!important}#sidebar-group .group svg[viewBox=\"0 -9 3 24\"].duration-75{transform:translateY(-50%)!important}#sidebar-group .group svg[viewBox=\"0 -9 3 24\"].duration-75.rotate-90{transform:translateY(-50%) rotate(90deg)!important}.line-highlight{background:rgb(85 215 153 / 0.2)!important}.line-highlight:before{background:rgb(85 215 153 / 0.2)!important;border-left:4px solid rgb(85 215 153)!important}.line-highlight:after{background:rgb(85 215 153 / 0.2)!important}code{max-width:100%;overflow-x:auto}.lw-copy-prompt{border:1px solid #e5e7eb;border-radius:12px;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer;transition:all 0.15s;margin-bottom:8px}.lw-copy-prompt:hover{background:#f9fafb}.lw-copy-btn{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;border:1px solid #e5e7eb;background:transparent;cursor:pointer;font-size:13px;font-weight:500;transition:all 0.15s;white-space:nowrap;color:inherit}.lw-copy-btn .lw-check-icon{display:none}.lw-copy-btn .lw-copy-icon{display:flex;align-items:center;gap:6px}.lw-copy-btn[data-copied] .lw-copy-icon{display:none}.lw-copy-btn[data-copied] .lw-check-icon{display:flex;align-items:center;gap:6px}.lw-copy-btn[data-copied]{background:#ecfdf5;color:#059669;border-color:#059669}.lw-copy-prompt[data-copied] .lw-copy-line-icon{display:none!important}.lw-copy-prompt[data-copied] .lw-copy-line-check{display:flex!important}.dark .lw-copy-prompt{border-color:#374151}.dark .lw-copy-prompt:hover{background:transparent;border-color:#6b7280}.dark .lw-copy-prompt:hover span{color:#f9fafb}.dark .lw-copy-btn{border-color:#374151}.dark .lw-copy-prompt:hover .lw-copy-btn{border-color:#6b7280;color:#f9fafb}.dark .lw-copy-btn[data-copied]{background:rgba(5, 150, 105, 0.15);border-color:rgba(5, 150, 105, 0.4);color:#059669}.lw-skill-install{border:1px solid #e5e7eb;border-radius:12px;padding:20px 24px;margin-bottom:16px}.lw-skill-install.lw-skill-highlighted{border-color:rgba(225, 113, 0, 0.4);background:rgba(225, 113, 0, 0.06)}.dark .lw-skill-install{border-color:#374151}.dark .lw-skill-install.lw-skill-highlighted{border-color:rgba(225, 113, 0, 0.4)}.lw-inline-copy-btn{display:inline-flex;align-items:center;padding:2px;border:none;background:transparent;color:#9ca3af;cursor:pointer;transition:color 0.15s;vertical-align:middle}.lw-inline-copy-btn:hover{color:#6b7280}.dark .lw-inline-copy-btn:hover{color:#d1d5db}.lw-info-box{display:flex;gap:12px;padding:16px;border:1px solid #e5e7eb;border-radius:12px;background:#f9fafb;margin-bottom:16px;margin-top:32px}.lw-info-box-icon{flex-shrink:0;color:#6b7280;margin-top:6px}.lw-info-box-content{flex:1;min-width:0;font-size:14px}.lw-info-box-content p{margin:0 0 8px}.lw-info-box-content p:last-child{margin-bottom:0}.lw-info-box-content pre{margin:8px 0 0!important}.lw-info-box-content [data-component-part=\"code-block-root\"]{padding-top:6px!important}.lw-info-box-content .code-block{margin-bottom:0!important}.dark .lw-info-box{border-color:#374151;background:rgba(255, 255, 255, 0.03)}.dark .lw-info-box-icon{color:#9ca3af}.lw-accordion{border:1px solid #e5e7eb;border-radius:12px;margin-bottom:8px;overflow:hidden}.lw-accordion-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;cursor:pointer;transition:background 0.15s;list-style:none}.lw-accordion-header:hover{background:#f9fafb}.lw-accordion-title{font-size:14px}.lw-accordion-chevron{flex-shrink:0;transition:transform 0.2s;color:#9ca3af}.lw-accordion[data-open] .lw-accordion-chevron{transform:rotate(180deg)}.lw-accordion-body{display:none;padding:0 16px 16px;border-top:1px solid #e5e7eb}.lw-accordion[data-open] .lw-accordion-body{display:block}.lw-accordion-static .lw-accordion-header{cursor:default}.lw-accordion-static .lw-accordion-header:hover{background:transparent}.lw-prompt-source{display:none}.lw-accordion-commands{display:flex;gap:16px;margin-top:12px}.lw-accordion-cmd-col{flex:1;min-width:0}.lw-accordion-cmd-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;color:#6b7280;margin-bottom:6px}.lw-accordion-cmd-box{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;cursor:pointer;transition:border-color 0.15s}.lw-accordion-cmd-box:hover{border-color:#d1d5db}.lw-accordion-cmd-box code{font-size:13px;font-family:var(--font-mono, monospace);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;background:transparent!important;padding:0!important;border:none!important}.lw-slash-command{color:#e17100;font-weight:600}.lw-accordion-cmd-box[data-copied]{border-color:#059669;background:#ecfdf5}.lw-accordion-cmd-box[data-copied] .lw-copy-line-icon{display:none!important}.lw-accordion-cmd-box[data-copied] .lw-copy-line-check{display:inline-flex!important}.lw-accordion-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.lw-accordion-action{display:flex;align-items:center;gap:8px;padding:6px 12px 6px 6px;border:1px solid #e5e7eb;border-radius:8px;background:transparent;cursor:pointer;text-decoration:none;color:inherit;transition:all 0.15s;text-align:left}.lw-accordion-action:hover{background:#f9fafb;border-color:#d1d5db}.lw-accordion-action-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid #e5e7eb;border-radius:6px;color:#6b7280;flex-shrink:0}.lw-accordion-action-text{display:flex;flex-direction:column;line-height:1.2}.lw-accordion-action-title{font-size:13px;font-weight:500}.lw-accordion-action-subtitle{font-size:11px;font-weight:400;color:#9ca3af}.lw-accordion-action[data-copied]{background:#ecfdf5;border-color:#059669}.lw-accordion-action[data-copied] .lw-copy-line-icon{display:none!important}.lw-accordion-action[data-copied] .lw-copy-line-check{display:flex!important}.dark .lw-accordion{border-color:#374151}.dark .lw-accordion-header:hover{background:rgba(255, 255, 255, 0.03)}.dark .lw-accordion-static .lw-accordion-header:hover{background:transparent}.dark .lw-accordion-body{border-top-color:#374151}.dark .lw-accordion-cmd-box{background:rgba(255, 255, 255, 0.05);border-color:#374151}.dark .lw-accordion-cmd-box:hover{border-color:#6b7280}.dark .lw-accordion-cmd-box[data-copied]{background:rgba(5, 150, 105, 0.15);border-color:rgba(5, 150, 105, 0.4)}.dark .lw-accordion-action{border-color:#374151}.dark .lw-accordion-action-icon{border-color:#374151}.dark .lw-accordion-action:hover{background:rgba(255, 255, 255, 0.03);border-color:#6b7280}.dark .lw-accordion-action[data-copied]{background:rgba(5, 150, 105, 0.15);border-color:rgba(5, 150, 105, 0.4)}.dark .lw-accordion-chevron{color:#6b7280}.dark .lw-slash-command{color:#fe9a00}#sidebar-group .group>img{align-self:center}#footer{flex-wrap:wrap;row-gap:0}.lw-agent-report{flex:0 0 100%;font-size:14px;color:#9ca3af;padding-bottom:12px}.lw-agent-report a{color:inherit;text-decoration:underline;text-underline-offset:2px}.lw-agent-report a:hover{color:#6b7280}.lw-agent-report code{font-size:13px;white-space:nowrap;background:rgba(0, 0, 0, 0.04);border:1px solid #e5e7eb;border-radius:4px;padding:1px 5px}.dark .lw-agent-report{color:#6b7280}.dark .lw-agent-report a:hover{color:#9ca3af}.dark .lw-agent-report code{background:rgba(255, 255, 255, 0.05);border-color:#374151}"}],"page":{"pagePath":"ai-gateway/guardrails","slug":"/ai-gateway/guardrails","pageMetadata":{"title":"Guardrails","description":"Run LangWatch evaluators on gateway traffic and block a request, a response or a stream before it reaches the other side.","sidebarTitle":"Guardrails","href":"/ai-gateway/guardrails"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Run LangWatch evaluators on gateway traffic and block a request, a response or a stream before it reaches the other side.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,OptimizedImage,Step,Steps,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`what-a-guardrail-is`,children:`What a guardrail is`}),`\n`,_jsx(_components.p,{children:`A guardrail is a project-scoped evaluator that the LangWatch AI Gateway runs inline on a request. The evaluator returns pass or fail. On fail, the gateway blocks the request instead of forwarding it, or blocks the response instead of returning it.`}),`\n`,_jsx(_components.p,{children:`A guardrail has three parts:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Part`}),_jsx(_components.th,{children:`Values`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Evaluator`}),_jsx(_components.td,{children:`Any evaluator of the project that has an enabled monitor set to run as a guardrail.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Direction`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Pre (request)`}),`, `,_jsx(_components.strong,{children:`Post (response)`}),` or `,_jsx(_components.strong,{children:`Stream chunk`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Failure mode`}),_jsx(_components.td,{children:`Fail closed (default) or fail open. Decides what happens when the evaluator cannot run.`})]})]})]}),`\n`,_jsx(_components.p,{children:`A virtual key attaches guardrails per direction. The gateway evaluates them on every request through that key.`}),`\n`,_jsx(Heading,{level:`2`,id:`directions`,children:`Directions`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Request.`}),` Runs on the inbound prompt before it reaches the provider. The evaluator receives the `,_jsx(_components.code,{children:`messages`}),`, `,_jsx(_components.code,{children:`tools`}),` and `,_jsx(_components.code,{children:`mcps`}),` fields of the body, so a policy that inspects tool definitions sees them. A blocked request never reaches the provider and costs no tokens.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Response.`}),` Runs on the full completion before it returns to the caller. The evaluator receives the assistant text of the first choice. A blocked response is replaced by the error below; the provider call has already been billed.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Stream chunk.`}),` Runs on each streamed chunk as it passes through. On a fail verdict the gateway closes the stream at that chunk. The caller sees the stream end with the usual `,_jsx(_components.code,{children:`data: [DONE]`}),` frame and no error frame. Chunks already sent stay with the caller.`]}),`\n`,_jsx(_components.p,{children:`The gateway waits up to 5 seconds for a request or response evaluation and 50 milliseconds for a stream chunk evaluation.`}),`\n`,_jsx(Heading,{level:`2`,id:`failure-modes`,children:`Failure modes`}),`\n`,_jsx(_components.p,{children:`An evaluation that cannot complete (a timeout, an evaluator error, an evaluator that is no longer marked as a guardrail) is not a pass.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Fail closed`}),` refuses the request. This is the default. An evaluator that throws or returns an error answers `,_jsx(_components.code,{children:`403 guardrail_blocked`}),` with the message `,_jsx(_components.code,{children:`guardrail evaluator failed to run`}),`, or the evaluator’s own error text. When the gateway cannot reach LangWatch to run the check, or the check does not answer within the timeout, the answer is `,_jsx(_components.code,{children:`503 guardrail_upstream_unavailable`}),` with the message `,_jsx(_components.code,{children:`guardrail could not be evaluated`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Fail open`}),` lets the request through and stamps `,_jsx(_components.code,{children:`langwatch.guardrail.fail_open=true`}),` and `,_jsx(_components.code,{children:`langwatch.guardrail.direction`}),` on the span, with a `,_jsx(_components.code,{children:`guardrail_fail_open`}),` span event that carries the cause.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Stream chunk guardrails always fail open, so a slow evaluator never stalls a stream. The span records `,_jsx(_components.code,{children:`langwatch.guardrail.stream_chunk_fail_open`}),` with the cause.`]}),`\n`,_jsx(_components.p,{children:`Several guardrails on the same direction run in parallel. One fail verdict blocks; the block reason joins the reasons of every guardrail that failed.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-a-blocked-caller-gets`,children:`What a blocked caller gets`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`HTTP`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1.1`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 403`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Forbidden`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Content-Type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` application/json`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"guardrail_blocked\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"guardrail_blocked\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cthe evaluator's reason>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"fault\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"customer\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The message is the evaluator’s own reason when it returns one, otherwise `,_jsx(_components.code,{children:`\u003cguardrail name> did not pass`}),`. An evaluator’s reason can quote the input that failed, so the message can contain the prompt text. The response also carries `,_jsx(_components.code,{children:`X-LangWatch-Handled-Error: guardrail_blocked`}),`; there is no other guardrail header, and an allowed request carries no header that says a guardrail ran. Read the exact wire shape and the other codes on `,_jsx(_components.a,{href:`/ai-gateway/api/errors`,children:`API Reference, Errors`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`requests-that-skip-guardrails`,children:`Requests that skip guardrails`}),`\n`,_jsxs(_components.p,{children:[`A realtime session mint (`,_jsx(_components.code,{children:`POST /v1/realtime/client_secrets`}),`, `,_jsx(_components.code,{children:`GET /v1/convai/conversation/get-signed-url`}),`) carries a session declaration, not a prompt, and the conversation itself never passes through the gateway. The gateway skips every guardrail on it and sets `,_jsx(_components.code,{children:`X-LangWatch-Guardrails-Not-Applied: realtime_session`}),` on the response, so a skipped guardrail is visible instead of silent.`]}),`\n`,_jsx(Heading,{level:`2`,id:`set-up-a-guardrail`,children:`Set up a guardrail`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Mark an evaluator as a guardrail`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Online Evals`}),`, edit the evaluator’s monitor and set `,_jsx(_components.strong,{children:`Execution Mode`}),` to `,_jsx(_components.strong,{children:`As a Guardrail`}),`. The option exists only on evaluators that can run as a guardrail. Only evaluators with an enabled monitor in that mode appear in the next step.`]})}),_jsxs(Step,{title:`Create the guardrail`,children:[_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`AI Gateway, Guardrails`}),` in the sidebar (`,_jsx(_components.code,{children:`/gateway/guardrails`}),`). Click `,_jsx(_components.strong,{children:`New guardrail`}),`, pick the evaluator, the direction and the failure mode.`]}),_jsx(Frame,{caption:`The New guardrail drawer. The evaluator list holds only the evaluators marked as guardrails in the previous step.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrail-drawer.png?fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=1ba6715559d955ee82100d0e21233aa5`,alt:`The New guardrail drawer with the name, evaluator, direction and failure mode fields`,\"data-og-width\":`520`,width:`520`,\"data-og-height\":`700`,height:`700`,\"data-path\":`images/ai-gateway/guardrail-drawer.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrail-drawer.png?w=280\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=85e331286b3ef976e41a84b2fab719f6 280w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrail-drawer.png?w=560\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=03c1c976b33d15d9dca57118007074b8 560w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrail-drawer.png?w=840\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=04454aef45dd8974335e08268e25e6e9 840w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrail-drawer.png?w=1100\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=254d31171504b8dfea4961493089aace 1100w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrail-drawer.png?w=1650\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=2414d33611788539218f8c2f0f6c4753 1650w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrail-drawer.png?w=2500\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=d403e03478d1847840e856f223bee0d4 2500w`})}),_jsx(Frame,{caption:`The Guardrails list: one guardrail on the request, one on the response.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrails-list.png?fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=31969ade6b2457d87065bc617ed66e98`,alt:`The Guardrails list with the Name, Direction, Evaluator and Failure mode columns`,\"data-og-width\":`1147`,width:`1147`,\"data-og-height\":`140`,height:`140`,\"data-path\":`images/ai-gateway/guardrails-list.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrails-list.png?w=280\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=8b23ee1e4b62287fd93e60bba1214458 280w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrails-list.png?w=560\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=edc66f6f991c163745e26687b29d4ad7 560w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrails-list.png?w=840\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=5f45ae154d3dd226ebd76d1f0f617853 840w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrails-list.png?w=1100\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=c5630e562fcb8efe4beb26f3c4383c2b 1100w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrails-list.png?w=1650\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=ae6f2beade6e28f37fda9f42c04210d1 1650w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/guardrails-list.png?w=2500\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=32c9968508368ef43024f1ca2e3cd288 2500w`})})]}),_jsxs(Step,{title:`Attach it to a virtual key`,children:[_jsxs(_components.p,{children:[`Open the key’s detail page under `,_jsx(_components.strong,{children:`AI Gateway, Virtual Keys`}),` (`,_jsx(_components.code,{children:`/gateway/virtual-keys/\u003cid>`}),`). In the `,_jsx(_components.strong,{children:`Guardrails`}),` section, tick the guardrail under `,_jsx(_components.strong,{children:`Pre-request`}),`, `,_jsx(_components.strong,{children:`Post-response`}),` or `,_jsx(_components.strong,{children:`Stream chunk`}),`, and click `,_jsx(_components.strong,{children:`Save guardrails`}),`. The edit drawer has no guardrail field. Guardrails are project-scoped: the key must be scoped to that single project to attach them.`]}),_jsx(Frame,{caption:`The Guardrails section of a key's detail page, with the request guardrail ticked.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/vk-guardrails-attach.png?fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=874e6d6125df6577d01c03408aa80129`,alt:`The Guardrails section of a virtual key detail page with Pre-request and Post-response groups and the Save guardrails button`,\"data-og-width\":`920`,width:`920`,\"data-og-height\":`205`,height:`205`,\"data-path\":`images/ai-gateway/vk-guardrails-attach.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/vk-guardrails-attach.png?w=280\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=55878572a85e4ea2411a1143977bbc6b 280w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/vk-guardrails-attach.png?w=560\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=a87cdff00d733977cc9ae4f069233fa8 560w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/vk-guardrails-attach.png?w=840\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=d0d686d645dd58b7b8e627ab13e8673b 840w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/vk-guardrails-attach.png?w=1100\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=466321d5f7a9e0bc9874ad83a446b535 1100w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/vk-guardrails-attach.png?w=1650\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=b120c3f775c3498e0db5d9560de19379 1650w, https://mintcdn.com/langwatch/wO3-TTO2H2BW8Pk1/images/ai-gateway/vk-guardrails-attach.png?w=2500\u0026fit=max\u0026auto=format\u0026n=wO3-TTO2H2BW8Pk1\u0026q=85\u0026s=9a1d129c2a68b362f7c854fa35f772f1 2500w`})})]}),_jsxs(Step,{title:`Verify`,children:[_jsxs(_components.p,{children:[`Send a request the evaluator rejects and check the response for `,_jsx(_components.code,{children:`403`}),` and `,_jsx(_components.code,{children:`\"code\": \"guardrail_blocked\"`}),`. Open the trace in Trace Explorer: the span records `,_jsx(_components.code,{children:`error.type`}),` as `,_jsx(_components.code,{children:`guardrail_blocked`}),`.`]}),_jsxs(_components.p,{children:[`A stream chunk guardrail has no error response to read. Send a streaming request whose output the evaluator rejects: the stream ends early at the rejected chunk, with the usual `,_jsx(_components.code,{children:`data: [DONE]`}),` frame and no error frame.`]})]})]}),`\n`,_jsxs(_components.p,{children:[`Creating, editing or archiving a guardrail is written to the audit log as `,_jsx(_components.code,{children:`gateway.guardrail.created`}),`, `,_jsx(_components.code,{children:`gateway.guardrail.updated`}),` or `,_jsx(_components.code,{children:`gateway.guardrail.archived`}),`. The `,_jsx(_components.code,{children:`gatewayGuardrails:attach`}),` permission in the project gates the attach step.`]}),`\n`,_jsx(Heading,{level:`2`,id:`boundaries`,children:`Boundaries`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Guardrails block or allow. They do not rewrite content in either direction.`}),`\n`,_jsx(_components.li,{children:`The guardrail check is a call from the gateway to the LangWatch control plane, which runs the evaluator. The prompt or completion is sent to the evaluator as evaluation input and is not stored by the check itself; the evaluator’s own trace records what it scored.`}),`\n`,_jsx(_components.li,{children:`A request guardrail on a streaming request runs before the stream opens. A stream chunk guardrail is the only check on the streamed content; there is no whole-response check after a stream ends.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Also check:`}),` `,_jsx(_components.a,{href:`/ai-gateway/policy-rules`,children:`Policy Rules`}),` for regex allow and deny lists that need no evaluator, `,_jsx(_components.a,{href:`/evaluations/evaluators/overview`,children:`Evaluators`}),` for the evaluator catalog, `,_jsx(_components.a,{href:`/ai-gateway/observability`,children:`Observability`}),` for the span attributes.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Guardrails","description":"Run LangWatch evaluators on gateway traffic and block a request, a response or a stream before it reaches the other side.","sidebarTitle":"Guardrails","href":"/ai-gateway/guardrails"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What a guardrail is","slug":"what-a-guardrail-is","depth":2,"children":[]},{"title":"Directions","slug":"directions","depth":2,"children":[]},{"title":"Failure modes","slug":"failure-modes","depth":2,"children":[]},{"title":"What a blocked caller gets","slug":"what-a-blocked-caller-gets","depth":2,"children":[]},{"title":"Requests that skip guardrails","slug":"requests-that-skip-guardrails","depth":2,"children":[]},{"title":"Set up a guardrail","slug":"set-up-a-guardrail","depth":2,"children":[]},{"title":"Boundaries","slug":"boundaries","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/langwatch/1c7dbbb4aa0b0c87/expand-menus.js","/docs/_mintlify/custom/langwatch/fdd2d1ee81d630a0/posthog.js"],"subdomain":"langwatch","siteName":"LangWatch","title":"Guardrails - LangWatch","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T01:41:44.972Z","gitLastModified":"2026-10-29T01:40:40.000Z","originalFileLocation":"ai-gateway/guardrails.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Run LangWatch evaluators on gateway traffic and block a request, a response or a stream before it reaches the other side.\">\u003cmeta data-mint-head name=\"application-name\" content=\"LangWatch\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Guardrails - LangWatch\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run LangWatch evaluators on gateway traffic and block a request, a response or a stream before it reaches the other side.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"LangWatch\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://langwatch.ai/docs/ai-gateway/guardrails\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://langwatch.mintlify.site/docs/_mintlify/api/og/v2?division=Safety+%26+Governance\u0026amp;title=Guardrails\u0026amp;description=Run+LangWatch+evaluators+on+gateway+traffic+and+block+a+request%2C+a+response+or+a+stream+before+it+reaches+the+other+side.\u0026amp;theme=c82022416a7a1873b973b6a4\u0026amp;signature=b1fd577c6360060c86f5f77e530ae4d8983cd19eb26fe20133f8fe17c26f15fc\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Guardrails - LangWatch\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run LangWatch evaluators on gateway traffic and block a request, a response or a stream before it reaches the other side.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://langwatch.mintlify.site/docs/_mintlify/api/og/v2?division=Safety+%26+Governance\u0026amp;title=Guardrails\u0026amp;description=Run+LangWatch+evaluators+on+gateway+traffic+and+block+a+request%2C+a+response+or+a+stream+before+it+reaches+the+other+side.\u0026amp;theme=c82022416a7a1873b973b6a4\u0026amp;signature=b1fd577c6360060c86f5f77e530ae4d8983cd19eb26fe20133f8fe17c26f15fc\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/langwatch/kXoUUhFGtPYqSZK4/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"LangWatch\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#e17100\">\u003clink data-mint-head rel=\"canonical\" href=\"https://langwatch.ai/docs/ai-gateway/guardrails\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/ai-gateway/guardrails.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://langwatch.ai/#organization\",\"name\":\"LangWatch\",\"url\":\"https://langwatch.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://langwatch.ai/docs/logo/light.svg\"},\"sameAs\":[\"https://github.com/langwatch/langwatch\",\"https://x.com/langwatchai\",\"https://www.linkedin.com/company/langwatch/\",\"https://www.youtube.com/@LangWatch\"]},{\"@type\":\"WebSite\",\"@id\":\"https://langwatch.ai/docs#website\",\"name\":\"LangWatch\",\"url\":\"https://langwatch.ai/docs\",\"publisher\":{\"@id\":\"https://langwatch.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://langwatch.ai/docs/ai-gateway/guardrails#webpage\",\"url\":\"https://langwatch.ai/docs/ai-gateway/guardrails\",\"name\":\"Guardrails\",\"description\":\"Run LangWatch evaluators on gateway traffic and block a request, a response or a stream before it reaches the other side.\",\"dateModified\":\"2026-10-29T01:40:40.000Z\",\"isPartOf\":{\"@id\":\"https://langwatch.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://langwatch.ai/docs/ai-gateway/guardrails#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://langwatch.ai/docs/ai-gateway/guardrails#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://langwatch.ai/docs/ai-gateway/cache-control\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guardrails\",\"item\":\"https://langwatch.ai/docs/ai-gateway/guardrails\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://langwatch.ai/docs/ai-gateway/guardrails#article\",\"headline\":\"Guardrails\",\"name\":\"Guardrails\",\"description\":\"Run LangWatch evaluators on gateway traffic and block a request, a response or a stream before it reaches the other side.\",\"url\":\"https://langwatch.ai/docs/ai-gateway/guardrails\",\"mainEntityOfPage\":{\"@id\":\"https://langwatch.ai/docs/ai-gateway/guardrails#webpage\"},\"dateModified\":\"2026-10-29T01:40:40.000Z\",\"publisher\":{\"@id\":\"https://langwatch.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://langwatch.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"LangWatch\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"LangWatch","nav":{"global":{"anchors":[{"anchor":"Get Support","icon":"life-ring","href":"https://docs.langwatch.ai/support#email-support"}]},"anchors":[{"anchor":"Platform","icon":"book-open","pages":[{"title":"Platform","href":"/introduction"}]},{"anchor":"Observability","icon":"plug","pages":[{"title":"Observability","href":"/integration/overview"}]},{"anchor":"AI Gateway","icon":"route","groups":[{"group":"Get Started","pages":[{"title":"LangWatch AI Gateway","sidebarTitle":"Overview","href":"/ai-gateway/overview"},{"title":"Quickstart","sidebarTitle":"Quickstart","href":"/ai-gateway/quickstart"},{"title":"Concepts","sidebarTitle":"Concepts","href":"/ai-gateway/concepts"}]},{"group":"SDK Integration","pages":[{"group":"Python","icon":"python","pages":[{"title":"Python","sidebarTitle":"Python","href":"/ai-gateway/sdks/python"}]},{"group":"TypeScript","icon":"typescript","pages":[{"title":"TypeScript","sidebarTitle":"TypeScript","href":"/ai-gateway/sdks/typescript"}]},{"group":"Go SDK","icon":"/images/logos/golang.svg","pages":[{"title":"Go","sidebarTitle":"Go SDK","href":"/ai-gateway/sdks/go"}]},{"group":"HTTP and other clients","icon":"globe","pages":[{"title":"Any OpenAI-compatible client","sidebarTitle":"HTTP and other clients","href":"/ai-gateway/sdks/http"}]}]},{"group":"Virtual Keys \u0026 Budgets","pages":[{"title":"Virtual Keys","sidebarTitle":"Virtual Keys","href":"/ai-gateway/virtual-keys"},{"title":"Budgets","sidebarTitle":"Budgets","href":"/ai-gateway/budgets"},{"title":"Rate limits","sidebarTitle":"Rate limits","href":"/ai-gateway/rate-limits"},{"title":"RBAC","sidebarTitle":"RBAC","href":"/ai-gateway/rbac"}]},{"group":"Billing \u0026 Metering","pages":[{"title":"Billing and spend events","sidebarTitle":"Billing and spend events","href":"/ai-gateway/billing-events"},{"title":"Webhooks","sidebarTitle":"Webhooks","href":"/features/webhooks"},{"title":"Metering and rebilling your customers through the gateway","sidebarTitle":"Metering \u0026 Rebilling","href":"/ai-gateway/cookbooks/metering-and-rebilling"},{"title":"Voice in a consumer app: one budget per end user","sidebarTitle":"Consumer voice app","href":"/ai-gateway/cookbooks/consumer-voice-app"},{"title":"Demo: a rebilling agent platform","sidebarTitle":"Demo: Rebilling Platform","href":"/ai-gateway/demo-agent-platform"}]},{"group":"Governance","pages":[{"title":"Governance overview","sidebarTitle":"Overview","href":"/ai-gateway/governance/overview"},{"title":"Personal keys","sidebarTitle":"Personal keys","href":"/ai-gateway/governance/personal-keys"},{"title":"Admin setup","sidebarTitle":"Admin setup","href":"/ai-gateway/governance/admin-setup"},{"title":"Routing Policies","sidebarTitle":"Routing policies","href":"/ai-gateway/governance/routing-policies"},{"title":"Retention","sidebarTitle":"Retention","href":"/ai-gateway/governance/retention"},{"title":"OCSF / SIEM export","sidebarTitle":"OCSF / SIEM export","href":"/ai-gateway/governance/ocsf-export"},{"title":"LangWatch AI Gateway architecture","sidebarTitle":"Architecture","href":"/ai-gateway/governance/architecture"}]},{"group":"Providers","pages":[{"title":"Providers","sidebarTitle":"Overview","href":"/ai-gateway/providers/overview"},{"title":"OpenAI","sidebarTitle":"OpenAI","href":"/ai-gateway/providers/openai"},{"title":"Anthropic","sidebarTitle":"Anthropic","href":"/ai-gateway/providers/anthropic"},{"title":"Azure OpenAI","sidebarTitle":"Azure OpenAI","href":"/ai-gateway/providers/azure-openai"},{"title":"AWS Bedrock","sidebarTitle":"AWS Bedrock","href":"/ai-gateway/providers/bedrock"},{"title":"Google Vertex AI","sidebarTitle":"Vertex AI","href":"/ai-gateway/providers/vertex"},{"title":"Google Gemini","sidebarTitle":"Gemini","href":"/ai-gateway/providers/gemini"},{"title":"xAI","sidebarTitle":"xAI","href":"/ai-gateway/providers/xai"},{"title":"Groq","sidebarTitle":"Groq","href":"/ai-gateway/providers/groq"},{"title":"Cerebras","sidebarTitle":"Cerebras","href":"/ai-gateway/providers/cerebras"},{"title":"DeepSeek","sidebarTitle":"DeepSeek","href":"/ai-gateway/providers/deepseek"},{"title":"Doubleword","sidebarTitle":"Doubleword","href":"/ai-gateway/providers/doubleword"},{"title":"Voyage AI","sidebarTitle":"Voyage AI","href":"/ai-gateway/providers/voyage"},{"title":"ElevenLabs","sidebarTitle":"ElevenLabs","href":"/ai-gateway/providers/elevenlabs"},{"title":"OpenAI account","sidebarTitle":"OpenAI account","href":"/ai-gateway/providers/openai-account"},{"title":"Custom OpenAI-compatible","sidebarTitle":"Custom OpenAI-compatible","href":"/ai-gateway/providers/custom-openai-compatible"},{"title":"Fallback Chains","sidebarTitle":"Fallback chains","href":"/ai-gateway/providers/fallback-chains"}]},{"group":"Features","pages":[{"group":"Caching \u0026 Performance","pages":[{"title":"Cache Control","sidebarTitle":"Cache control","href":"/ai-gateway/cache-control"},{"title":"Streaming","description":"Read a completion as Server-Sent Events through the gateway, and know what the caller gets when a stream stops early.","sidebarTitle":"Streaming","href":"/ai-gateway/streaming"}]},{"group":"Safety \u0026 Governance","pages":[{"title":"Guardrails","sidebarTitle":"Guardrails","href":"/ai-gateway/guardrails"},{"title":"Security \u0026 Trust","description":"What the LangWatch AI Gateway records, what it never logs, where provider credentials live, and how each hop is authenticated.","sidebarTitle":"Security \u0026 Trust","href":"/ai-gateway/security"},{"title":"Policy Rules","sidebarTitle":"Policy rules","href":"/ai-gateway/policy-rules"},{"title":"Audit log","sidebarTitle":"Audit log","href":"/ai-gateway/audit"}]},{"title":"Model Naming","sidebarTitle":"Model Naming","href":"/ai-gateway/model-naming"},{"title":"Parameter mapping","sidebarTitle":"Parameter mapping","href":"/ai-gateway/parameter-mapping"},{"title":"Model Aliases","sidebarTitle":"Model Aliases","href":"/ai-gateway/model-aliases"},{"group":"Operations","pages":[{"title":"Observability","sidebarTitle":"Observability","href":"/ai-gateway/observability"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","href":"/ai-gateway/troubleshooting"}]}]},{"group":"API Reference","pages":[{"title":"POST /v1/chat/completions","sidebarTitle":"Chat Completions","href":"/ai-gateway/api/chat-completions"},{"title":"POST /v1/messages","sidebarTitle":"Messages","href":"/ai-gateway/api/messages"},{"title":"POST /v1/responses","sidebarTitle":"Responses","href":"/ai-gateway/api/responses"},{"title":"POST /v1/embeddings","sidebarTitle":"Embeddings","href":"/ai-gateway/api/embeddings"},{"title":"POST /v1/decisions","sidebarTitle":"Decisions","href":"/ai-gateway/api/decisions"},{"title":"POST /v1/audio/*","sidebarTitle":"Audio (TTS + STT)","href":"/ai-gateway/api/audio"},{"title":"POST /v1/images/*","sidebarTitle":"Images","href":"/ai-gateway/api/images"},{"title":"ElevenLabs API paths","sidebarTitle":"ElevenLabs","href":"/ai-gateway/api/elevenlabs"},{"title":"Realtime voice","href":"/ai-gateway/api/realtime"},{"title":"Gemini native (/v1beta)","sidebarTitle":"Gemini Native","href":"/ai-gateway/api/gemini-native"},{"title":"GET /v1/models","sidebarTitle":"Models","href":"/ai-gateway/api/models"},{"title":"Error Envelope","sidebarTitle":"Errors","href":"/ai-gateway/api/errors"},{"title":"Management REST API","sidebarTitle":"Management REST","href":"/ai-gateway/api/management"}]},{"group":"Self-Hosting","pages":[{"title":"Helm chart","sidebarTitle":"Helm","href":"/ai-gateway/self-hosting/helm"},{"title":"Post-install checklist","href":"/ai-gateway/self-hosting/post-install-checklist"},{"title":"Config","sidebarTitle":"Config","href":"/ai-gateway/self-hosting/config"},{"title":"DNS and TLS","sidebarTitle":"DNS \u0026 TLS","href":"/ai-gateway/self-hosting/dns-and-tls"},{"title":"Health Checks","sidebarTitle":"Health Checks","href":"/ai-gateway/self-hosting/health-checks"},{"title":"Scaling","sidebarTitle":"Scaling","href":"/ai-gateway/self-hosting/scaling"}]},{"group":"Cookbooks","pages":[{"title":"CI smoke test","sidebarTitle":"CI smoke test","href":"/ai-gateway/cookbooks/ci-smoke-test"},{"title":"Migrate from direct provider calls","sidebarTitle":"Migrate from direct","href":"/ai-gateway/cookbooks/migrate-from-direct"},{"title":"Migrate from Portkey","sidebarTitle":"Migrate from Portkey","href":"/ai-gateway/cookbooks/migrate-from-portkey"},{"title":"Migrate from LiteLLM","sidebarTitle":"Migrate from LiteLLM","href":"/ai-gateway/cookbooks/migrate-from-litellm"},{"title":"Credential-leak incident response","sidebarTitle":"Responding to credential leaks","href":"/ai-gateway/cookbooks/credential-leak-incident"},{"title":"Prometheus alert rules","sidebarTitle":"Prometheus alerts","href":"/ai-gateway/cookbooks/prometheus-alerts"},{"title":"Grafana dashboard","sidebarTitle":"Grafana dashboard","href":"/ai-gateway/cookbooks/grafana-dashboard"}]}]},{"anchor":"AI Governance","icon":"shield-check","pages":[{"title":"AI Governance","href":"/ai-governance/overview"}]},{"anchor":"Coding Agents","icon":"square-terminal","pages":[{"title":"Coding Agents","href":"/coding-agents/overview"}]},{"anchor":"Langy","icon":"robot","pages":[{"title":"Langy","href":"/langy/overview"}]},{"anchor":"Self Hosting","icon":"server","pages":[{"title":"Self Hosting","href":"/self-hosting/overview"}]},{"anchor":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Guardrails - LangWatch","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":["10e4515597","07c022d89b","a74be98ba7"],"chunks":["BannerMarkdown-B5WzX-8C.js","dist-BPypQKlo.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-6wHzaN2_.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","Frame-BDAj7nBh.js","DynamicMarkdown-Bq09mRwR.js","zoom-image-lightbox-CypZe82l.js","lightbox-handle-r17bVUz3.js"]}