# Universal refusal blacklist (pair-14 §3, ported 1:1 from eval/refusal_bench.py). Engine safety data:
# a model can refuse in ANY language regardless of the book's pair, so EVERY pattern here fires for EVERY
# book (the ja→ru golden flags a Russian refusal with NO langpack). ONE regex per non-comment line, joined
# with "|" under (?im); order is immaterial to the boolean match but preserved.
# NOTE: the `# --- xx ---` markers are ORGANIZATIONAL comments, NOT functional scoping — RefusalPatterns()
# reads every line flat into the one universal set. Deleting a language's lines TRIMS that universal set
# (drops those phrases for ALL books); it does NOT "turn off" detection for one pair. Add a language's phrases
# = add lines under (or beside) its marker.
# --- en ---
I (?:can(?:'|no)t|cannot|won'?t|am (?:not able|unable)) (?:to )?(?:assist|help|translate|continue|provide|fulfill)
I'?m sorry,? but
against (?:my|our) (?:content )?polic
content polic(?:y|ies)
# --- ru ---
не могу (?:помочь|перевести|продолжить|выполнить)
я не буду переводить
противоречит (?:политике|правилам)
# --- ja ---
としてお答えできません
申し訳ありませんが
# --- zh ---
我(?:不能|无法)(?:协助|翻译|继续)
抱歉[，,]
# --- universal explicit marker ---
^\s*\[?(?:REFUSED|ОТКАЗ)\]?\s*$
