class TaskClassifier: NON_PYTHON_LANGUAGES = [ "java", "javascript", "typescript", "c++", "c#", "csharp", "rust", "go", "golang", "ruby", "php", "swift", "kotlin", "scala", "matlab", "haskell", "dart", "elixir", "clojure", "perl", "bash", "shell", "sql", "html", "css", "lua", "r language", "r programming", ] FRAMEWORKS = [ "react", "vue", "angular", "node", "express", "spring", "django", "flask", "fastapi", "laravel", "rails", "asp.net", "tensorflow", "pytorch", "keras", "scikit-learn", "pandas", "numpy", "jquery", "bootstrap", "tailwind", "next.js", "nuxt", "svelte", ] ANALYZE_KEYWORDS = [ "compare", "comparison", "versus", " vs ", "difference", "rate", "rating", "difficulty", "multiple language", "all language", "which is better", "pros and cons", "contrast", ] LANGUAGE_LABEL_MAP = { "c++": "C++", "c#": "C#", "csharp": "C#", "golang": "Go", "r language": "R", "r programming": "R", } def classify(self, task: str) -> dict: task_lower = task.lower() languages = [] if "python" in task_lower: languages.append("Python") for lang in self.NON_PYTHON_LANGUAGES: if lang in task_lower: label = self.LANGUAGE_LABEL_MAP.get(lang, lang.title()) if label not in languages: languages.append(label) for fw in self.FRAMEWORKS: if fw in task_lower: label = fw.title() + " (framework)" if label not in languages: languages.append(label) non_python = [l for l in languages if "Python" not in l and "framework" not in l] has_analyze_keyword = any(kw in task_lower for kw in self.ANALYZE_KEYWORDS) is_multi_language = len([l for l in languages if "framework" not in l]) > 1 needs_analyze = bool(non_python) or has_analyze_keyword or is_multi_language return { "mode": "analyze" if needs_analyze else "execute", "languages": languages if languages else ["Python"], "needs_execution": not needs_analyze, }