""" CRANE AI - Sohbet Modülü """ from typing import Dict, Any from core.base_module import BaseMicroModule import logging logger = logging.getLogger(__name__) class ChatModule(BaseMicroModule): """Genel sohbet için özelleşmiş modül""" def __init__(self, config: Dict[str, Any]): super().__init__( model_id="Qwen/Qwen2.5-1.5B-Instruct", config=config ) # Sohbet anahtar kelimeleri self.chat_keywords = { "merhaba", "selam", "nasılsın", "naber", "günaydın", "iyi akşamlar", "hoş geldin", "sohbet", "konuş", "anlat", "düşün", "fikir", "görüş", "yardım", "açıkla", "izah", "detay", "örnek", "hikaye" } # Genel konular self.general_topics = { "hava", "spor", "müzik", "film", "kitap", "yemek", "seyahat", "hobiler", "oyun", "teknoloji", "tarih", "kültür", "sanat", "bilim", "doğa", "eğitim" } def can_handle(self, query: str, context: Dict[str, Any]) -> float: """Sohbet sorguları için uygunluk skoru""" query_lower = query.lower() # Sohbet anahtar kelimelerini kontrol et chat_score = 0 for keyword in self.chat_keywords: if keyword in query_lower: chat_score += 0.15 # Genel konuları kontrol et for topic in self.general_topics: if topic in query_lower: chat_score += 0.1 # Soru işaretleri ve konuşma ifadeleri if "?" in query or "nedir" in query_lower or "nasıl" in query_lower: chat_score += 0.2 # Uzun açıklama gerektiren sorular if any(word in query_lower for word in ["açıkla", "anlat", "detay", "neden"]): chat_score += 0.25 # Kısa ve basit sorular için yüksek skor if len(query.split()) <= 10: chat_score += 0.1 # Maksimum 1.0 skor return min(chat_score, 1.0) async def process(self, query: str, context: Dict[str, Any]) -> Dict[str, Any]: """Sohbet işlemi""" try: # Sohbet için özel prompt prompt = self._build_chat_prompt(query, context) # Yanıt üretimi response = await self.generate_response( prompt, max_tokens=self.config.get("max_tokens", 1024), temperature=0.7 # Sohbet için orta temperature ) return { "response": response, "module": "chat_module", "confidence": self.can_handle(query, context), "conversation_type": self._detect_conversation_type(query) } except Exception as e: logger.error(f"Chat processing error: {str(e)}") return { "error": str(e), "module": "chat_module" } def _build_chat_prompt(self, query: str, context: Dict[str, Any]) -> str: """Sohbet için prompt hazırlar""" # Konuşma geçmişi history = context.get("history", []) # Temel prompt prompt = f"""Sen yardımsever, dostane ve zeki bir asistansın. Kullanıcılarla doğal bir şekilde sohbet ediyorsun. Özellikler: - Türkçe konuşuyorsun - Samimi ve dostane bir ton kullanıyorsun - Bilgilendirici ama sıkıcı olmayan yanıtlar veriyorsun - Kullanıcının duygusal durumunu anlıyorsun """ # Konuşma geçmişi varsa ekle if history: prompt += "Önceki konuşma:\n" for i, msg in enumerate(history[-3:]): # Son 3 mesajı al prompt += f"{'Kullanıcı' if i % 2 == 0 else 'Asistan'}: {msg}\n" prompt += "\n" # Mevcut soru prompt += f"Kullanıcı: {query}\nAsistan:" return prompt def _detect_conversation_type(self, query: str) -> str: """Konuşma türünü tespit eder""" query_lower = query.lower() # Selamlama if any(word in query_lower for word in ["merhaba", "selam", "günaydın"]): return "greeting" # Soru if "?" in query or any(word in query_lower for word in ["nedir", "nasıl", "neden"]): return "question" # Duygusal if any(word in query_lower for word in ["üzgün", "mutlu", "kızgın", "heyecanlı"]): return "emotional" # Bilgi arama if any(word in query_lower for word in ["açıkla", "anlat", "öğren", "bilgi"]): return "information" # Varsayılan return "general"