Download modules/chat_module.py from veteroner/Novaai: direct link, hf CLI and curl.
- Browser
- Download file 4.98 kB
-
https://huggingface.co/veteroner/Novaai/resolve/main/modules/chat_module.py
- Command line
-
hf download hf://veteroner/Novaai/modules/chat_module.py
-
curl -L -o chat_module.py https://huggingface.co/veteroner/Novaai/resolve/main/modules/chat_module.py
4.98 kB
| """ | |
| 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" |