Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions sdk/python/e2e/test_suite8_guardrails.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,12 @@
)

# G3: Agent output regex (block, multi-pattern) — blocks secrets
# Case-insensitive: a secrets filter must catch "Password"/"TOKEN" etc., not
# just the lowercase forms. Without (?i) the guardrail misses capitalised
# words the LLM nondeterministically produces (e.g. "Password" at a sentence
# start), letting them slip into output and flaking this suite.
G3_NO_SECRETS = RegexGuardrail(
patterns=[r"\bpassword\b", r"\bsecret\b", r"\btoken\b"],
patterns=[r"(?i)\bpassword\b", r"(?i)\bsecret\b", r"(?i)\btoken\b"],
mode="block",
name="no_secrets",
message="Do not include passwords, secrets, or tokens.",
Expand Down Expand Up @@ -359,7 +363,7 @@ def test_plan_reflects_all_guardrails(self, runtime, model):
assert g3["position"] == "output"
assert g3["onFail"] == "retry"
patterns = g3.get("patterns", [])
for pat in [r"\bpassword\b", r"\bsecret\b", r"\btoken\b"]:
for pat in [r"(?i)\bpassword\b", r"(?i)\bsecret\b", r"(?i)\btoken\b"]:
assert pat in patterns, f"G3 missing pattern '{pat}'. Got: {patterns}"

# ── Tool-level guardrails ─────────────────────────────────────
Expand Down
Loading