diff options
| author | Fuwn <[email protected]> | 2025-09-17 20:08:02 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-09-17 20:08:02 -0700 |
| commit | aca798820bcd61aa6a155940ee4fd94b54f2ed62 (patch) | |
| tree | 43944eb92ec66cf239966ba4a003d6d6f37758db /test_moderator.py | |
| parent | feat(test_moderator): Add result stepping feature (diff) | |
| download | umabot-aca798820bcd61aa6a155940ee4fd94b54f2ed62.tar.xz umabot-aca798820bcd61aa6a155940ee4fd94b54f2ed62.zip | |
feat(intelligent_moderator): Reasoning levels
Diffstat (limited to 'test_moderator.py')
| -rwxr-xr-x | test_moderator.py | 88 |
1 files changed, 82 insertions, 6 deletions
diff --git a/test_moderator.py b/test_moderator.py index 0725642..70b57f2 100755 --- a/test_moderator.py +++ b/test_moderator.py @@ -175,9 +175,10 @@ class RedditDownloader: class TestIntelligentModerator(IntelligentModeratorBase): """Test version of the intelligent roleplay moderator.""" - def __init__(self, openai_api_key: str): + def __init__(self, openai_api_key: str, reasoning_level: int = 2): """Initialize the test moderator.""" super().__init__(openai_api_key) + self.reasoning_level = reasoning_level def test_file(self, file_path: Path, author_name: str = "testuser") -> Dict[str, Any]: """Test a single file against the moderator.""" @@ -249,6 +250,53 @@ class TestIntelligentModerator(IntelligentModeratorBase): return results + def _format_reasoning(self, evaluation: dict) -> str: + """Format reasoning based on the configured reasoning level.""" + original_reasoning = evaluation.get('reasoning', '') + + if self.reasoning_level == 0: + # No reasoning included + return "" + elif self.reasoning_level == 1: + # Brief reasoning - extract key points + return self._extract_brief_reasoning(original_reasoning) + else: + # Full reasoning (default) + return original_reasoning + + def _extract_brief_reasoning(self, reasoning: str) -> str: + """Extract brief key points from the full reasoning.""" + # Convert to lowercase for easier processing + reasoning_lower = reasoning.lower() + + # Extract key issues + issues = [] + + # Check for common low-effort indicators + if any(word in reasoning_lower for word in ['short', 'brief', 'minimal', 'little']): + issues.append('short') + if any(word in reasoning_lower for word in ['word count', 'words', 'length']): + issues.append('low word count') + if any(word in reasoning_lower for word in ['plot', 'story', 'narrative']): + if 'no plot' in reasoning_lower or 'lack' in reasoning_lower: + issues.append('no plot development') + if any(word in reasoning_lower for word in ['effort', 'substance', 'content']): + if 'low' in reasoning_lower or 'lack' in reasoning_lower: + issues.append('low effort') + if any(word in reasoning_lower for word in ['creativity', 'originality']): + if 'lack' in reasoning_lower or 'no' in reasoning_lower: + issues.append('lacks creativity') + if any(word in reasoning_lower for word in ['artwork', 'art', 'visual', 'image']): + if 'primarily' in reasoning_lower or 'showcasing' in reasoning_lower: + issues.append('artwork showcase') + + # If no specific issues found, return a generic brief message + if not issues: + return "Content quality below standards" + + # Return comma-separated list of issues + return ", ".join(issues) + # Abstract method implementations for IntelligentModeratorBase def _get_submission_id(self, submission: MockSubmission) -> str: """Get the submission ID.""" @@ -291,7 +339,7 @@ class TestIntelligentModerator(IntelligentModeratorBase): print(f"ERROR: {message}") -def print_results(results: List[Dict[str, Any]], pause: bool = False) -> None: +def print_results(results: List[Dict[str, Any]], pause: bool = False, moderator: TestIntelligentModerator = None) -> None: """Print test results in a formatted way.""" print("\n" + "="*80) print("TEST RESULTS") @@ -335,13 +383,27 @@ def print_results(results: List[Dict[str, Any]], pause: bool = False) -> None: print(f"\nš§ Mod Mail (Art Flair Change):") print(f" Subject: Your post flair has been changed to Art") print(f" Message: Your roleplay post has been automatically re-flaired as 'Art' because it appears to be primarily showcasing artwork or visual content rather than roleplay.") - print(f" Reasoning: {evaluation['reasoning']}") + + # Format reasoning based on moderator's reasoning level + if moderator: + formatted_reasoning = moderator._format_reasoning(evaluation) + if formatted_reasoning: + print(f" Reasoning: {formatted_reasoning}") + else: + print(f" Reasoning: {evaluation['reasoning']}") if "REMOVE_POST" in actions: print(f"\nš§ Mod Mail (Low Effort Removal):") print(f" Subject: Your roleplay post has been removed for low effort") print(f" Message: Your roleplay post has been removed because it was determined to be low effort content.") - print(f" Reasoning: {evaluation['reasoning']}") + + # Format reasoning based on moderator's reasoning level + if moderator: + formatted_reasoning = moderator._format_reasoning(evaluation) + if formatted_reasoning: + print(f" Reasoning: {formatted_reasoning}") + else: + print(f" Reasoning: {evaluation['reasoning']}") # Add pause between results if requested if pause and i < len(results): @@ -370,6 +432,12 @@ Examples: # Test with pause between results python test_moderator.py --directory real_test_posts/ --random 3 --pause + # Test with brief reasoning in mod mail + python test_moderator.py --directory real_test_posts/ --random 2 --reasoning-level 1 + + # Test with no reasoning in mod mail + python test_moderator.py --file sample_post.txt --reasoning-level 0 + # Download 20 roleplay posts from Reddit python test_moderator.py --download-roleplay 20 @@ -424,6 +492,14 @@ Examples: ) parser.add_argument( + "--reasoning-level", "-rl", + type=int, + choices=[0, 1, 2], + default=2, + help="Reasoning level for mod mail (0=none, 1=brief, 2=full, default: 2)" + ) + + parser.add_argument( "--download-roleplay", type=int, metavar="COUNT", @@ -485,7 +561,7 @@ Examples: # Initialize moderator try: - moderator = TestIntelligentModerator(api_key) + moderator = TestIntelligentModerator(api_key, reasoning_level=args.reasoning_level) except Exception as e: print(f"ā Error initializing moderator: {e}") sys.exit(1) @@ -504,7 +580,7 @@ Examples: results.extend(dir_results) # Print results - print_results(results, pause=args.pause) + print_results(results, pause=args.pause, moderator=moderator) # Summary total = len(results) |