File size: 2,245 Bytes
3962d8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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,
        }