Download modules/code_module.py from veteroner/Novaai: direct link, hf CLI and curl.
- Browser
- Download file 5.94 kB
-
https://huggingface.co/veteroner/Novaai/resolve/main/modules/code_module.py
- Command line
-
hf download hf://veteroner/Novaai/modules/code_module.py
-
curl -L -o code_module.py https://huggingface.co/veteroner/Novaai/resolve/main/modules/code_module.py
5.94 kB
| """ | |
| CRANE AI - Kod Yazım Modülü | |
| """ | |
| import re | |
| from typing import Dict, Any | |
| from core.base_module import BaseMicroModule | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| class CodeModule(BaseMicroModule): | |
| """Kod yazımı için özelleşmiş modül""" | |
| def __init__(self, config: Dict[str, Any]): | |
| super().__init__( | |
| model_id="deepseek-ai/deepseek-coder-1.3b-instruct", | |
| config=config | |
| ) | |
| # Kod kelime anahtar kelimeleri | |
| self.code_keywords = { | |
| "function", "class", "def", "import", "from", "return", | |
| "if", "else", "for", "while", "try", "except", "with", | |
| "python", "javascript", "java", "c++", "html", "css", | |
| "kod", "kodu", "script", "fonksiyon", "sınıf", "algoritma", | |
| "program", "yazılım", "debug", "hata", "fix", "düzelt" | |
| } | |
| # Programlama dilleri | |
| self.programming_languages = { | |
| "python", "javascript", "java", "c++", "c#", "php", "ruby", | |
| "go", "rust", "kotlin", "swift", "typescript", "html", "css", | |
| "sql", "bash", "powershell", "r", "matlab", "scala" | |
| } | |
| def can_handle(self, query: str, context: Dict[str, Any]) -> float: | |
| """Kod yazımı sorguları için uygunluk skoru""" | |
| query_lower = query.lower() | |
| # Kod anahtar kelimelerini kontrol et | |
| code_score = 0 | |
| for keyword in self.code_keywords: | |
| if keyword in query_lower: | |
| code_score += 0.15 | |
| # Programlama dili belirtilmişse | |
| for lang in self.programming_languages: | |
| if lang in query_lower: | |
| code_score += 0.3 | |
| # Kod yazımı action kelimeleri | |
| action_keywords = ["yaz", "oluştur", "geliştir", "kur", "hazırla", "tasarla"] | |
| for action in action_keywords: | |
| if action in query_lower: | |
| code_score += 0.2 | |
| # Kod karakteristik işaretlerini kontrol et | |
| if any(char in query for char in ["()", "{}", "[]", "==", "!=", "<=", ">="]): | |
| code_score += 0.15 | |
| # Kod blokları varsa | |
| if "```" in query or "def " in query or "class " in query: | |
| code_score += 0.3 | |
| # Spesifik kod türleri | |
| code_types = ["hesap", "makinesi", "calculator", "app", "uygulama", "website", "site"] | |
| for code_type in code_types: | |
| if code_type in query_lower: | |
| code_score += 0.25 | |
| # Maksimum 1.0 skor | |
| return min(code_score, 1.0) | |
| async def process(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Kod yazımı işlemi""" | |
| try: | |
| # Kod yazımı için özel prompt | |
| prompt = self._build_code_prompt(query, context) | |
| # Kod üretimi | |
| response = await self.generate_response( | |
| prompt, | |
| max_tokens=self.config.get("max_tokens", 2048), | |
| temperature=0.1 # Kod için düşük temperature | |
| ) | |
| # Kod bloklarını ayıkla | |
| code_blocks = self._extract_code_blocks(response) | |
| return { | |
| "response": response, | |
| "code_blocks": code_blocks, | |
| "language": self._detect_language(query), | |
| "module": "code_module", | |
| "confidence": self.can_handle(query, context) | |
| } | |
| except Exception as e: | |
| logger.error(f"Code processing error: {str(e)}") | |
| return { | |
| "error": str(e), | |
| "module": "code_module" | |
| } | |
| def _build_code_prompt(self, query: str, context: Dict[str, Any]) -> str: | |
| """Kod yazımı için prompt hazırlar""" | |
| # Dil tespiti | |
| language = self._detect_language(query) | |
| # Temel prompt | |
| prompt = f"""Sen bir uzman programcısın. Kullanıcının sorusunu anla ve en iyi kodu yaz. | |
| Kullanıcı sorusu: {query} | |
| Lütfen: | |
| 1. Temiz, okunabilir kod yaz | |
| 2. Kod açıklamalarını Türkçe yap | |
| 3. En iyi pratikleri kullan | |
| 4. Gerekirse örnek kullanımı göster | |
| """ | |
| # Dil özelinde ekleme | |
| if language: | |
| prompt += f"Programlama dili: {language}\n" | |
| # Bağlam varsa ekle | |
| if context.get("history"): | |
| prompt += f"Önceki konuşma: {context['history'][-1]}\n" | |
| return prompt | |
| def _detect_language(self, query: str) -> str: | |
| """Sorgudan programlama dilini tespit eder""" | |
| query_lower = query.lower() | |
| for lang in self.programming_languages: | |
| if lang in query_lower: | |
| return lang | |
| # Varsayılan dil | |
| return "python" | |
| def _extract_code_blocks(self, response: str) -> list: | |
| """Yanıttan kod bloklarını ayıklar""" | |
| code_blocks = [] | |
| # Markdown kod blokları | |
| pattern = r'```(\w+)?\n(.*?)\n```' | |
| matches = re.findall(pattern, response, re.DOTALL) | |
| for match in matches: | |
| lang, code = match | |
| code_blocks.append({ | |
| "language": lang or "text", | |
| "code": code.strip() | |
| }) | |
| # Tek satır kod blokları | |
| inline_pattern = r'`([^`]+)`' | |
| inline_matches = re.findall(inline_pattern, response) | |
| for code in inline_matches: | |
| if len(code) > 5: # Çok kısa olanları atla | |
| code_blocks.append({ | |
| "language": "inline", | |
| "code": code.strip() | |
| }) | |
| return code_blocks |