Spaces:
Sleeping
Sleeping
| """ | |
| Advanced Language Detection Module for AumCore AI | |
| Version: 2.0.1 | |
| Author: AumCore AI | |
| """ | |
| import re | |
| from typing import Optional, Tuple, Dict | |
| import langdetect | |
| from langdetect import DetectorFactory, lang_detect_exception | |
| # Ensure consistent results | |
| DetectorFactory.seed = 0 | |
| class LanguageDetector: | |
| """Professional language detection with multi-layered approach""" | |
| # Language scripts detection ranges | |
| SCRIPT_RANGES = { | |
| 'hi': [(0x0900, 0x097F)], # Devanagari | |
| 'en': [(0x0041, 0x007A)], # Basic Latin | |
| 'es': [(0x0041, 0x007A)], # Spanish uses Latin | |
| 'fr': [(0x0041, 0x007A)], # French uses Latin | |
| } | |
| # Common words/phrases for quick detection | |
| LANGUAGE_KEYWORDS = { | |
| 'hi': [ | |
| 'नमस्ते', 'धन्यवाद', 'कैसे', 'हैं', 'आप', 'मैं', 'हूँ', | |
| 'क्या', 'जी', 'हाँ', 'नहीं', 'ठीक', 'अच्छा' | |
| ], | |
| 'en': [ | |
| 'hello', 'thanks', 'how', 'are', 'you', 'i', 'am', | |
| 'what', 'yes', 'no', 'okay', 'good', 'please' | |
| ], | |
| 'es': ['hola', 'gracias', 'cómo', 'estás'], | |
| 'fr': ['bonjour', 'merci', 'comment', 'allez-vous'] | |
| } | |
| def __init__(self, confidence_threshold: float = 0.6): | |
| self.confidence_threshold = confidence_threshold | |
| def detect_input_language(self, text: str, fallback: str = 'en') -> str: | |
| """ | |
| Detect language using multi-stage approach | |
| Args: | |
| text: Input text to analyze | |
| fallback: Default language if detection fails | |
| Returns: | |
| Language code (en, hi, es, fr, etc.) | |
| """ | |
| if not text or len(text.strip()) < 2: | |
| return fallback | |
| # Clean text | |
| clean_text = self._preprocess_text(text) | |
| # Multi-stage detection | |
| detection_methods = [ | |
| self._detect_by_script, | |
| self._detect_by_keywords, | |
| self._detect_by_langdetect, | |
| ] | |
| for method in detection_methods: | |
| try: | |
| result = method(clean_text) | |
| if result and result != 'unknown': | |
| return result | |
| except: | |
| continue | |
| return fallback | |
| def _preprocess_text(self, text: str) -> str: | |
| """Clean and normalize text""" | |
| # Remove URLs, emails, special characters (keep language chars) | |
| text = re.sub(r'http\S+|www\S+|https\S+', '', text, flags=re.MULTILINE) | |
| text = re.sub(r'\S+@\S+', '', text) | |
| text = re.sub(r'[^\w\s\u0900-\u097F]', ' ', text) # Keep Devanagari | |
| return text.strip() | |
| def _detect_by_script(self, text: str) -> Optional[str]: | |
| """Detect language by character script/unicode range""" | |
| sample = text[:100] # Check first 100 chars | |
| for lang_code, ranges in self.SCRIPT_RANGES.items(): | |
| for start, end in ranges: | |
| for char in sample: | |
| if start <= ord(char) <= end: | |
| return lang_code | |
| return None | |
| def _detect_by_keywords(self, text: str) -> Optional[str]: | |
| """Detect language by common keywords""" | |
| text_lower = text.lower() | |
| for lang_code, keywords in self.LANGUAGE_KEYWORDS.items(): | |
| for keyword in keywords: | |
| if keyword in text_lower: | |
| return lang_code | |
| return None | |
| def _detect_by_langdetect(self, text: str) -> Optional[str]: | |
| """Use langdetect library for statistical detection""" | |
| try: | |
| # Get probabilities for all languages | |
| from langdetect import detect_langs | |
| try: | |
| languages = detect_langs(text) | |
| if languages: | |
| # Return language with highest probability | |
| best_lang = max(languages, key=lambda x: x.prob) | |
| if best_lang.prob >= self.confidence_threshold: | |
| return best_lang.lang | |
| except: | |
| # Fallback to simple detect | |
| return langdetect.detect(text) | |
| except (lang_detect_exception.LangDetectException, Exception): | |
| pass | |
| return None | |
| def get_detection_confidence(self, text: str, language: str) -> float: | |
| """Calculate confidence score for detection""" | |
| if not text: | |
| return 0.0 | |
| # Simple confidence calculation | |
| text_lower = text.lower() | |
| keywords = self.LANGUAGE_KEYWORDS.get(language, []) | |
| if keywords: | |
| matches = sum(1 for kw in keywords if kw in text_lower) | |
| confidence = min(1.0, matches / len(keywords) * 2) | |
| return round(confidence, 2) | |
| return 0.5 # Default medium confidence | |
| # Global instance for easy import | |
| detector = LanguageDetector() | |
| # ========================================== | |
| # MAIN FUNCTIONS FOR IMPORT | |
| # ========================================== | |
| def detect_input_language(text: str) -> str: | |
| """Simple wrapper for backward compatibility""" | |
| return detector.detect_input_language(text) | |
| def get_system_prompt(language: str = "en", username: str = None) -> str: | |
| """ | |
| Get system prompt based on language and username | |
| Args: | |
| language: Language code (en, hi, etc.) | |
| username: Optional username for personalization | |
| Returns: | |
| System prompt string | |
| """ | |
| # Default prompts | |
| prompts = { | |
| "en": f"""You are AumCore AI{' (' + username + ')' if username else ''}, an advanced AI assistant specializing in programming, | |
| system design, and technical solutions. Provide detailed, accurate, and | |
| professional responses.""", | |
| "hi": f"""आप AumCore AI{' (' + username + ')' if username else ''} हैं, एक उन्नत AI सहायक जो प्रोग्रामिंग, सिस्टम डिज़ाइन और | |
| तकनीकी समाधानों में विशेषज्ञ है। विस्तृत, सटीक और पेशेवर प्रतिक्रियाएँ दें।""", | |
| "es": f"""Eres AumCore AI{' (' + username + ')' if username else ''}, un asistente de IA avanzado especializado en programación, | |
| diseño de sistemas y soluciones técnicas. Proporciona respuestas detalladas, | |
| precisas y profesionales.""", | |
| "fr": f"""Vous êtes AumCore AI{' (' + username + ')' if username else ''}, un assistant IA avancé especializado en programación, | |
| conception de systèmes et solutions técnicas. Fournissez des réponses détaillées, | |
| précises et professionnelles.""" | |
| } | |
| return prompts.get(language, prompts["en"]) | |
| def detect_with_confidence(text: str) -> Tuple[str, float]: | |
| """Detect language with confidence score""" | |
| detector_obj = LanguageDetector() | |
| language = detector_obj.detect_input_language(text) | |
| confidence = detector_obj.get_detection_confidence(text, language) | |
| return language, confidence | |
| def generate_basic_code(task): | |
| """Generate basic code templates - TEMPORARY SIMPLE VERSION""" | |
| task_lower = task.lower() | |
| if 'drive' in task_lower or 'mount' in task_lower: | |
| return "```python\nfrom google.colab import drive\ndrive.mount('/content/gdrive')\n```" | |
| elif 'web' in task_lower or 'app' in task_lower: | |
| return "```python\nfrom fastapi import FastAPI\napp = FastAPI()\n@app.get('/')\ndef home(): return {'message': 'Hello'}\n```" | |
| else: | |
| return "```python\nprint('Hello from AumCore AI')\n```" | |
| # Module metadata | |
| __version__ = "2.0.1" | |
| __author__ = "AumCore AI" | |
| __all__ = [ | |
| 'detect_input_language', | |
| 'get_system_prompt', | |
| 'detect_with_confidence', | |
| 'LanguageDetector', | |
| 'generate_basic_code' | |
| ] |