Spaces:
Sleeping
Sleeping
from models import GuardrailsConfig | |
# A simple result class to hold individual check outcomes. | |
class Result: | |
def __init__(self): | |
self.details = {} | |
def add(self, rule_name: str, passed: bool): | |
self.details[rule_name] = passed | |
def grounded(self) -> bool: | |
# The response is considered "grounded" if all enabled rules pass. | |
return all(self.details.values()) | |
# Define guardrail rule classes. | |
class FactualConsistencyRule: | |
name = "FactualConsistency" | |
def check(self, response_text: str) -> bool: | |
# For demonstration: pass if the response contains the word "fact". | |
return "fact" in response_text.lower() | |
class ToxicityRule: | |
name = "Toxicity" | |
def check(self, response_text: str) -> bool: | |
# For demonstration: fail if negative words like "hate" or "kill" are found. | |
return not re.search(r"(hate|kill)", response_text, re.IGNORECASE) | |
# Manager class to load and execute the enabled guardrail rules. | |
class GuardrailsManager: | |
def __init__(self, config: GuardrailsConfig): | |
self.config = config | |
self.rules = self.load_rules() | |
def load_rules(self): | |
rules = [] | |
if self.config.factual_consistency: | |
rules.append(FactualConsistencyRule()) | |
if self.config.toxicity: | |
rules.append(ToxicityRule()) | |
# Add additional rules based on configuration here. | |
return rules | |
def check(self, response_text: str) -> Result: | |
result = Result() | |
for rule in self.rules: | |
rule_result = rule.check(response_text) | |
result.add(rule.name, rule_result) | |
return result | |