Download modules/reason_module.py from veteroner/Novaai: direct link, hf CLI and curl.
- Browser
- Download file 7.58 kB
-
https://huggingface.co/veteroner/Novaai/resolve/main/modules/reason_module.py
- Command line
-
hf download hf://veteroner/Novaai/modules/reason_module.py
-
curl -L -o reason_module.py https://huggingface.co/veteroner/Novaai/resolve/main/modules/reason_module.py
7.58 kB
| """ | |
| CRANE AI - Reasoning Modülü | |
| """ | |
| from typing import Dict, Any | |
| from core.base_module import BaseMicroModule | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| class ReasonModule(BaseMicroModule): | |
| """Mantık yürütme için özelleşmiş modül""" | |
| def __init__(self, config: Dict[str, Any]): | |
| super().__init__( | |
| model_id="microsoft/Phi-3-mini-4k-instruct", | |
| config=config | |
| ) | |
| # Mantık yürütme anahtar kelimeleri | |
| self.reasoning_keywords = { | |
| "çünkü", "neden", "sebep", "niye", "nasıl", "analiz", | |
| "karşılaştır", "değerlendir", "açıkla", "kanıtla", | |
| "sonuç", "çıkarım", "mantık", "düşünce", "fikir", | |
| "strateji", "plan", "çözüm", "problem", "sorun", | |
| "avantaj", "dezavantaj", "fark", "benzerlik" | |
| } | |
| # Analiz türleri | |
| self.analysis_types = { | |
| "problem_solving", "comparison", "evaluation", | |
| "cause_effect", "strategy", "pros_cons" | |
| } | |
| def can_handle(self, query: str, context: Dict[str, Any]) -> float: | |
| """Mantık yürütme sorguları için uygunluk skoru""" | |
| query_lower = query.lower() | |
| # Mantık yürütme anahtar kelimelerini kontrol et | |
| reasoning_score = 0 | |
| for keyword in self.reasoning_keywords: | |
| if keyword in query_lower: | |
| reasoning_score += 0.12 | |
| # Soru türlerini kontrol et | |
| if "neden" in query_lower or "çünkü" in query_lower: | |
| reasoning_score += 0.25 | |
| # Karşılaştırma ifadeleri | |
| if any(word in query_lower for word in ["karşılaştır", "fark", "benzer", "hangisi"]): | |
| reasoning_score += 0.2 | |
| # Analiz gerektiren ifadeler | |
| if any(word in query_lower for word in ["analiz", "değerlendir", "incele", "araştır"]): | |
| reasoning_score += 0.2 | |
| # Problem çözme ifadeleri | |
| if any(word in query_lower for word in ["problem", "sorun", "çözüm", "nasıl"]): | |
| reasoning_score += 0.15 | |
| # Uzun ve karmaşık sorular | |
| if len(query.split()) > 15: | |
| reasoning_score += 0.1 | |
| # Maksimum 1.0 skor | |
| return min(reasoning_score, 1.0) | |
| async def process(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: | |
| """Mantık yürütme işlemi""" | |
| try: | |
| # Analiz türünü belirle | |
| analysis_type = self._detect_analysis_type(query) | |
| # Mantık yürütme için özel prompt | |
| prompt = self._build_reasoning_prompt(query, context, analysis_type) | |
| # Yanıt üretimi | |
| response = await self.generate_response( | |
| prompt, | |
| max_tokens=self.config.get("max_tokens", 1024), | |
| temperature=0.3 # Mantık yürütme için düşük temperature | |
| ) | |
| return { | |
| "response": response, | |
| "module": "reason_module", | |
| "confidence": self.can_handle(query, context), | |
| "analysis_type": analysis_type, | |
| "reasoning_steps": self._extract_reasoning_steps(response) | |
| } | |
| except Exception as e: | |
| logger.error(f"Reasoning processing error: {str(e)}") | |
| return { | |
| "error": str(e), | |
| "module": "reason_module" | |
| } | |
| def _build_reasoning_prompt(self, query: str, context: Dict[str, Any], analysis_type: str) -> str: | |
| """Mantık yürütme için prompt hazırlar""" | |
| # Analiz türüne göre özel prompt | |
| if analysis_type == "problem_solving": | |
| system_prompt = """Sen bir problem çözme uzmanısın. Sorunları adım adım analiz edip mantıklı çözümler üretiyorsun.""" | |
| elif analysis_type == "comparison": | |
| system_prompt = """Sen bir karşılaştırma uzmanısın. Farklı seçenekleri objektif bir şekilde karşılaştırıyorsun.""" | |
| elif analysis_type == "evaluation": | |
| system_prompt = """Sen bir değerlendirme uzmanısın. Durumları kapsamlı bir şekilde analiz ediyorsun.""" | |
| elif analysis_type == "cause_effect": | |
| system_prompt = """Sen bir sebep-sonuç analizi uzmanısın. Olaylar arasındaki ilişkileri açıklıyorsun.""" | |
| else: | |
| system_prompt = """Sen bir mantık yürütme uzmanısın. Karmaşık konuları açık ve anlaşılır şekilde analiz ediyorsun.""" | |
| # Temel prompt | |
| prompt = f"""{system_prompt} | |
| Kullanıcı sorusu: {query} | |
| Lütfen: | |
| 1. Konuyu kapsamlı analiz et | |
| 2. Mantık zincirini açıkla | |
| 3. Somut örnekler ver | |
| 4. Sonuçları net bir şekilde özetle | |
| Analiz türü: {analysis_type} | |
| """ | |
| # Bağlam varsa ekle | |
| if context.get("history"): | |
| prompt += f"\nÖnceki konuşma: {context['history'][-1]}\n" | |
| return prompt | |
| def _detect_analysis_type(self, query: str) -> str: | |
| """Sorgudan analiz türünü tespit eder""" | |
| query_lower = query.lower() | |
| # Problem çözme | |
| if any(word in query_lower for word in ["problem", "sorun", "çöz", "nasıl"]): | |
| return "problem_solving" | |
| # Karşılaştırma | |
| if any(word in query_lower for word in ["karşılaştır", "fark", "hangisi", "seç"]): | |
| return "comparison" | |
| # Değerlendirme | |
| if any(word in query_lower for word in ["değerlendir", "incele", "analiz"]): | |
| return "evaluation" | |
| # Sebep-sonuç | |
| if any(word in query_lower for word in ["neden", "çünkü", "sebep", "sonuç"]): | |
| return "cause_effect" | |
| # Strateji | |
| if any(word in query_lower for word in ["strateji", "plan", "yaklaşım"]): | |
| return "strategy" | |
| # Avantaj-dezavantaj | |
| if any(word in query_lower for word in ["avantaj", "dezavantaj", "artı", "eksi"]): | |
| return "pros_cons" | |
| # Varsayılan | |
| return "general_reasoning" | |
| def _extract_reasoning_steps(self, response: str) -> list: | |
| """Yanıttan mantık yürütme adımlarını çıkarır""" | |
| steps = [] | |
| # Numaralı adımları bul | |
| import re | |
| numbered_steps = re.findall(r'(\d+[\.\)])\s*([^\n]+)', response) | |
| for num, step in numbered_steps: | |
| steps.append({ | |
| "step": num, | |
| "description": step.strip() | |
| }) | |
| # Anahtar kelimelerle adımları bul | |
| key_phrases = [ | |
| "ilk olarak", "öncelikle", "birincisi", | |
| "ikincisi", "üçüncüsü", "son olarak", | |
| "sonuç olarak", "özetle", "bu nedenle" | |
| ] | |
| sentences = response.split('.') | |
| for sentence in sentences: | |
| sentence = sentence.strip() | |
| if any(phrase in sentence.lower() for phrase in key_phrases): | |
| if len(sentence) > 10: # Çok kısa olanları atla | |
| steps.append({ | |
| "step": "auto", | |
| "description": sentence | |
| }) | |
| return steps[:10] # Maksimum 10 adım |