Spaces:
Running
Running
| from typing import List, Dict, Any | |
| class AdaptiveAgent: | |
| """ | |
| Agent A: The Coach | |
| Responsibility: Analyzes user performance history to determine the optimal difficulty level. | |
| """ | |
| DIFFICULTIES = ["Easy", "Intermediate", "Expert"] | |
| def evaluate_user(self, history: List[Dict[str, Any]]) -> Dict[str, Any]: | |
| """ | |
| Analyzes a list of past match results to determine new difficulty. | |
| Args: | |
| history: List of dicts, e.g., | |
| [{'result': 'success', 'time_taken': 45, 'hints_used': 0}, ...] | |
| Returns: | |
| Dict with 'recommended_difficulty' and 'reasoning'. | |
| """ | |
| if not history: | |
| return {"difficulty": "Easy", "reason": "New user"} | |
| # Analyze last 5 games | |
| recent_games = history[-5:] | |
| success_count = sum(1 for game in recent_games if game.get('result') == 'success') | |
| avg_time = sum(game.get('time_taken', 0) for game in recent_games) / len(recent_games) | |
| total_hints = sum(game.get('hints_used', 0) for game in recent_games) | |
| current_difficulty = recent_games[-1].get('difficulty', "Easy") | |
| # Promotion Logic | |
| if success_count >= 4 and total_hints <= 2: | |
| next_diff = self._change_difficulty(current_difficulty, 1) | |
| return { | |
| "difficulty": next_diff, | |
| "reason": "Consistently successful with few hints. Promoting!" | |
| } | |
| # Demotion Logic | |
| if success_count <= 1: | |
| next_diff = self._change_difficulty(current_difficulty, -1) | |
| return { | |
| "difficulty": next_diff, | |
| "reason": "Struggling with current tasks. Let's practice basics." | |
| } | |
| # Maintain | |
| return { | |
| "difficulty": current_difficulty, | |
| "reason": "Steady progress. Maintaining current challenge level." | |
| } | |
| def _change_difficulty(self, current: str, step: int) -> str: | |
| try: | |
| # Normalize casing just in case | |
| current = current.capitalize() | |
| if current not in self.DIFFICULTIES: | |
| # Fallback if unknown difficulty comes in | |
| return "Easy" | |
| idx = self.DIFFICULTIES.index(current) | |
| new_idx = max(0, min(len(self.DIFFICULTIES) - 1, idx + step)) | |
| return self.DIFFICULTIES[new_idx] | |
| except ValueError: | |
| return "Easy" | |
| if __name__ == "__main__": | |
| # Test logic | |
| agent = AdaptiveAgent() | |
| history = [ | |
| {'result': 'success', 'time_taken': 30, 'hints_used': 0, 'difficulty': 'Beginner'}, | |
| {'result': 'success', 'time_taken': 25, 'hints_used': 0, 'difficulty': 'Beginner'}, | |
| {'result': 'success', 'time_taken': 40, 'hints_used': 1, 'difficulty': 'Beginner'}, | |
| {'result': 'success', 'time_taken': 35, 'hints_used': 0, 'difficulty': 'Beginner'} | |
| ] | |
| print(agent.evaluate_user(history)) | |