def guardrails_pipeline(question, context):
# 1) Input
if forbidden(question): return reject("forbidden_topic")
q = sanitize_pii(question)
# 2) LLM
draft = llm.generate(prompt(q, context))
# 3) Risk detection
flags = {}
if regex_hit(draft, [EMAIL, IPV4, APIKEY]): flags["minor_pii"]=True
if toxic(draft): flags["tox"]=True
# 4) Groundedness & format
scores = {
"grounded": groundedness(draft, context),
"factual": fact_check(draft),
"coherent": coherence(draft),
"format": is_json(draft)
}
scores["quality"] = 0.35*scores["grounded"]+0.25*scores["factual"]+0.25*scores["coherent"]+0.15*(1 if scores["format"] else 0)
# 5) Decision
decision = decide(scores, flags, mode=os.getenv("GUARD_MODE","strict"))
if decision=="SANITIZE": draft = sanitize_output(draft)
if decision in ("REJECT","WARN"): log_decision(decision, flags, scores)
return decision, draft