NovaAI / basit_konsol.py
veteroner's picture
Upload 18 files
805fa80 verified
"""
🚀 Nova AI - Basit Konsol Uygulaması
Teknova tarafından geliştirilen özgün yapay zeka modeli
Hub ve local model desteği
"""
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import os
# Model seçenekleri
MODELS = {
"1": {"name": "Nova AI Hub", "path": "veteroner/NovaAI"},
"2": {"name": "Local Model", "path": "./nova-ai-model"}
}
def select_model():
"""Kullanıcıdan model seçimi al"""
print("\n📋 Model Seçimi:")
for key, value in MODELS.items():
if value["path"].startswith("./"):
status = "✅" if os.path.exists(value["path"]) else "❌"
else:
status = "🌐" # Hub modeli
print(f"{key}. {value['name']} {status}")
while True:
choice = input("\nModel seçin (1 veya 2): ").strip()
if choice in MODELS:
return MODELS[choice]["path"], MODELS[choice]["name"]
print("❌ Geçersiz seçim! 1 veya 2 yazın.")
def load_model(model_path, model_name):
"""Seçilen modeli yükle"""
print(f"\n🚀 {model_name} yükleniyor...")
# Local model kontrolü
if model_path.startswith("./") and not os.path.exists(model_path):
print(f"❌ Local model bulunamadı: {model_path}")
return None, None
try:
# Tokenizer yükle
tokenizer = AutoTokenizer.from_pretrained(
model_path,
trust_remote_code=True
)
# Model yükleme ayarları
load_kwargs = {
"torch_dtype": torch.float16,
"trust_remote_code": True
}
# GPU kontrolü
if torch.cuda.is_available():
print("🎮 GPU tespit edildi, GPU kullanılacak")
load_kwargs["device_map"] = "auto"
else:
print("💻 CPU kullanılacak")
load_kwargs["device_map"] = None
# Model yükle
model = AutoModelForCausalLM.from_pretrained(
model_path,
**load_kwargs
)
print(f"✅ {model_name} başarıyla yüklendi!")
return model, tokenizer
except Exception as e:
print(f"❌ Model yükleme hatası: {e}")
return None, None
def chat_with_nova(message, model, tokenizer, max_tokens=256):
"""Nova AI ile sohbet et"""
try:
# Konuşma formatı
conversation = f"Kullanıcı: {message}\nNova AI:"
# Tokenize
inputs = tokenizer(
conversation,
return_tensors="pt",
truncation=True,
max_length=1024
)
# GPU'ya taşı (eğer varsa)
if model.device.type != 'cpu':
inputs = inputs.to(model.device)
# Yanıt üret
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=max_tokens,
temperature=0.7,
top_p=0.9,
do_sample=True,
pad_token_id=tokenizer.eos_token_id,
eos_token_id=tokenizer.eos_token_id
)
# Decode et
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
nova_response = response[len(conversation):].strip()
return nova_response if nova_response else "Üzgünüm, yanıt üretemedi."
except Exception as e:
return f"❌ Hata: {e}"
def main():
"""Ana uygulama"""
print("=" * 50)
print("🚀 NOVA AI - BASİT KONSOL UYGULAMASI")
print("🌟 Teknova Özgün Yapay Zeka Modeli")
print("=" * 50)
# Model seçimi
model_path, model_name = select_model()
# Modeli yükle
model, tokenizer = load_model(model_path, model_name)
if model is None or tokenizer is None:
print("❌ Program sonlandırılıyor.")
return
print(f"\n🎉 {model_name} ile sohbet hazır!")
print("💬 Komutlar:")
print(" - Mesaj yazarak sohbet edin")
print(" - 'exit' yazarak çıkın")
print(" - 'model' yazarak model değiştirin")
print("-" * 50)
while True:
try:
user_input = input("\n👤 Siz: ").strip()
# Çıkış komutları
if user_input.lower() in ['exit', 'çıkış', 'quit', 'q']:
print("\n🚀 Nova AI - Görüşmek üzere!")
break
# Model değiştirme
if user_input.lower() == 'model':
print("\n🔄 Model değiştiriliyor...")
model_path, model_name = select_model()
model, tokenizer = load_model(model_path, model_name)
if model is None:
continue
print(f"✅ {model_name} aktif!")
continue
# Boş mesaj kontrolü
if not user_input:
print("🤖 Nova AI: Lütfen bir mesaj yazın.")
continue
# Nova AI'dan yanıt al
print("🤖 Nova AI düşünüyor...")
response = chat_with_nova(user_input, model, tokenizer)
print(f"🤖 Nova AI: {response}")
except KeyboardInterrupt:
print("\n\n🚀 Nova AI - Program sonlandırıldı!")
break
except Exception as e:
print(f"❌ Beklenmeyen hata: {e}")
if __name__ == "__main__":
main()