Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
47 lines
2.4 KiB
HTML
47 lines
2.4 KiB
HTML
{{define "admin_guard"}}<!doctype html>
|
|
<html lang="en"><head>
|
|
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>Guardrails · llmgw</title><link rel="stylesheet" href="{{stylesheet}}">
|
|
</head><body><div class="wrap">
|
|
<header>
|
|
<h1>Guardrails</h1>
|
|
<p class="sub">What the policies did, where, and by which rule — names and counts, never what was written.</p>
|
|
{{template "nav" .Nav}}
|
|
</header>
|
|
{{if .Error}}<p class="error" role="alert">{{.Error}}</p>{{end}}
|
|
|
|
<h2>Policies</h2>
|
|
{{if .Policies}}
|
|
<p>Defined in <code>server.yaml</code>: {{range $i, $p := .Policies}}{{if $i}}, {{end}}<code>{{$p}}</code>{{end}}.
|
|
Applied to every request: {{if .Default}}{{range $i, $p := .Default}}{{if $i}}, {{end}}<code>{{$p}}</code>{{end}}{{else}}none{{end}}.</p>
|
|
{{if .Attachments}}
|
|
<table class="rows">
|
|
<tr><th>Scope</th><th>Who</th><th>Policy</th></tr>
|
|
{{range .Attachments}}<tr><td>{{.Scope}}</td><td>{{.Who}}</td><td><code>{{.Policy}}</code></td></tr>{{end}}
|
|
</table>
|
|
{{else}}<p class="sub">Attached nowhere else. <code>llmgw ctl guard attach project:ORG/TEAM/PROJECT POLICY</code> attaches one.</p>{{end}}
|
|
{{else}}
|
|
<p>No policies: add a <code>guard:</code> section to <code>server.yaml</code> (docs/guardrails.md).</p>
|
|
{{end}}
|
|
|
|
<h2>What they did</h2>
|
|
<p class="sub">Over the last
|
|
{{range .Windows}}{{if eq . $.Window}}<strong>{{.}}</strong>{{else}}<a href="?window={{.}}">{{.}}</a>{{end}} {{end}}</p>
|
|
{{if .Counts}}
|
|
<table class="rows">
|
|
<tr><th>Where</th><th>Action</th><th>Policy</th><th>Category</th><th class="num">Requests</th></tr>
|
|
{{range .Counts}}<tr><td>{{.Where}}</td><td>{{.Action}}</td><td><code>{{.Policy}}</code></td><td>{{.Category}}</td><td class="num">{{.Count}}</td></tr>{{end}}
|
|
</table>
|
|
{{else}}<p class="sub">Nothing flagged, redacted or blocked.</p>{{end}}
|
|
|
|
{{if .Events}}
|
|
<h2>Recent</h2>
|
|
<table class="rows">
|
|
<tr><th>When (UTC)</th><th>Request</th><th>Where</th><th>Model</th><th>Action</th><th>Policy</th><th>Category</th><th class="num">Status</th><th class="num">ms</th></tr>
|
|
{{range .Events}}<tr><td>{{.At}}</td><td><code>{{.RequestID}}</code></td><td>{{.Where}}</td><td>{{.Model}}</td>
|
|
<td>{{.Action}}</td><td><code>{{.Policy}}</code></td><td>{{.Category}}</td><td class="num">{{.Status}}</td><td class="num">{{.Ms}}</td></tr>{{end}}
|
|
</table>
|
|
<p class="sub"><code>llmgw ctl request ID</code> says what else a request went through.</p>
|
|
{{end}}
|
|
</div></body></html>{{end}}
|