Add testing module (ab_test, metrics, validator)

This commit is contained in:
2026-02-04 12:32:36 +00:00
parent d8a7115822
commit d9e4676275

View File

@@ -0,0 +1,43 @@
import re
from typing import Any, Dict, List, Optional
import json
from ..core.prompt import ValidationRule
from ..core.exceptions import ValidationError
class Validator:
def __init__(self, rules: Optional[List[ValidationRule]] = None):
self.rules = rules or []
def validate(self, response: str) -> List[str]:
errors = []
for rule in self.rules:
if rule.type == "regex":
if rule.pattern and not re.search(rule.pattern, response):
errors.append(rule.message or f"Response failed regex validation")
elif rule.type == "json":
try:
json.loads(response)
except json.JSONDecodeError:
errors.append(rule.message or "Response is not valid JSON")
elif rule.type == "length":
min_len = rule.json_schema.get("minLength", 0) if rule.json_schema else 0
max_len = rule.json_schema.get("maxLength", float("inf")) if rule.json_schema else float("inf")
if len(response) < min_len or len(response) > max_len:
errors.append(rule.message or f"Response length must be between {min_len} and {max_len}")
return errors
def is_valid(self, response: str) -> bool:
return len(self.validate(response)) == 0
@staticmethod
def from_prompt_rules(rules: List[Dict[str, Any]]) -> "Validator":
validation_rules = []
for rule_data in rules:
validation_rules.append(ValidationRule(**rule_data))
return Validator(validation_rules)