|
|
| """
|
| FitTürkAI RAG System - Google Colab Setup and Demo Script
|
| CPU Optimized for Linux Environment
|
|
|
| Bu script Google Colab ortamında FitTürkAI RAG sistemini kurar ve çalıştırır.
|
| """
|
|
|
| import os
|
| import sys
|
| import subprocess
|
| import shutil
|
| from pathlib import Path
|
|
|
| def install_requirements():
|
| """Gerekli kütüphaneleri yükle"""
|
| print("🔧 Gerekli kütüphaneler yükleniyor...")
|
|
|
|
|
| subprocess.run([sys.executable, "-m", "pip", "install", "--upgrade", "pip"], check=True)
|
|
|
|
|
| requirements = [
|
| "torch>=2.0.0,<2.2.0",
|
| "transformers>=4.36.0,<4.40.0",
|
| "sentence-transformers>=2.2.2,<3.0.0",
|
| "accelerate>=0.24.0,<0.26.0",
|
| "peft>=0.7.0,<0.8.0",
|
| "nltk>=3.8",
|
| "regex>=2022.10.31",
|
| "faiss-cpu>=1.7.4",
|
| "numpy>=1.24.0,<2.0.0",
|
| "scipy>=1.9.0",
|
| "PyPDF2>=3.0.0",
|
| "PyMuPDF>=1.23.0",
|
| "tqdm>=4.64.0",
|
| "requests>=2.28.0",
|
| "gdown>=4.7.0",
|
| "datasets>=2.14.0",
|
| "tokenizers>=0.15.0",
|
| "safetensors>=0.3.0",
|
| "psutil>=5.9.0"
|
| ]
|
|
|
| for requirement in requirements:
|
| try:
|
| print(f"📦 Yükleniyor: {requirement}")
|
| subprocess.run([sys.executable, "-m", "pip", "install", requirement],
|
| check=True, capture_output=True)
|
| except subprocess.CalledProcessError as e:
|
| print(f"❌ Hata: {requirement} yüklenemedi: {e}")
|
| continue
|
|
|
| print("✅ Kütüphane kurulumu tamamlandı!")
|
|
|
| def download_nltk_data():
|
| """NLTK verilerini indir"""
|
| print("📚 NLTK verileri indiriliyor...")
|
| import nltk
|
| try:
|
| nltk.download('punkt', quiet=True)
|
| nltk.download('punkt_tab', quiet=True)
|
| nltk.download('stopwords', quiet=True)
|
| print("✅ NLTK verileri başarıyla indirildi!")
|
| except Exception as e:
|
| print(f"⚠️ NLTK veri indirme uyarısı: {e}")
|
|
|
| def setup_directories():
|
| """Gerekli klasörleri oluştur"""
|
| print("📁 Klasör yapısı oluşturuluyor...")
|
|
|
| directories = [
|
| "./indirilen_pdfler",
|
| "./DATA",
|
| "./fitness_rag_store_merged",
|
| "./fine_tuned_FitTurkAI_QLoRA"
|
| ]
|
|
|
| for directory in directories:
|
| Path(directory).mkdir(parents=True, exist_ok=True)
|
| print(f"✅ Klasör oluşturuldu: {directory}")
|
|
|
| def create_demo_data():
|
| """Demo için örnek veri oluştur"""
|
| print("📝 Demo verileri oluşturuluyor...")
|
|
|
|
|
| demo_data = [
|
| {
|
| "soru": "Sağlıklı kahvaltı için ne önerirsiniz?",
|
| "cevap": "Sağlıklı bir kahvaltı protein, kompleks karbonhidrat ve healthy yağlar içermelidir. Yumurta, tam tahıllı ekmek, avokado, meyveler iyi seçeneklerdir."
|
| },
|
| {
|
| "soru": "Günde kaç bardak su içmeliyim?",
|
| "cevap": "Genel olarak günde 8-10 bardak (2-2.5 litre) su içmek önerilir. Aktivite düzeyinize ve hava durumuna göre bu miktar artabilir."
|
| },
|
| {
|
| "soru": "Egzersiz sonrası ne yemeli?",
|
| "cevap": "Egzersiz sonrası 30-60 dakika içinde protein ve karbonhidrat içeren besinler tüketin. Örneğin protein smoothie veya yoğurt ile meyve."
|
| }
|
| ]
|
|
|
| import json
|
| with open("./DATA/demo_fitness_data.json", "w", encoding="utf-8") as f:
|
| json.dump(demo_data, f, ensure_ascii=False, indent=2)
|
|
|
| print("✅ Demo JSON verileri oluşturuldu!")
|
|
|
| def check_system_resources():
|
| """Sistem kaynaklarını kontrol et"""
|
| print("💻 Sistem kaynakları kontrol ediliyor...")
|
| try:
|
| import psutil
|
| cpu_count = psutil.cpu_count()
|
| memory = psutil.virtual_memory()
|
|
|
| print(f"🔍 CPU Çekirdek Sayısı: {cpu_count}")
|
| print(f"🔍 Toplam RAM: {memory.total / (1024**3):.1f} GB")
|
| print(f"🔍 Kullanılabilir RAM: {memory.available / (1024**3):.1f} GB")
|
|
|
| if memory.available < 2 * (1024**3):
|
| print("⚠️ Uyarı: RAM düşük. Model yükleme sırasında sorun yaşayabilirsiniz.")
|
| else:
|
| print("✅ Sistem kaynakları yeterli görünüyor!")
|
|
|
| except ImportError:
|
| print("⚠️ psutil yüklü değil, sistem kontrolü atlanıyor...")
|
|
|
| def main():
|
| """Ana kurulum ve demo fonksiyonu"""
|
| print("🚀 FitTürkAI RAG Sistemi - Google Colab Kurulumu Başlıyor...")
|
| print("="*60)
|
|
|
| try:
|
|
|
| check_system_resources()
|
|
|
|
|
| install_requirements()
|
|
|
|
|
| download_nltk_data()
|
|
|
|
|
| setup_directories()
|
|
|
|
|
| create_demo_data()
|
|
|
| print("\n" + "="*60)
|
| print("✅ Kurulum tamamlandı!")
|
| print("="*60)
|
| print("\n📋 Sonraki adımlar:")
|
| print("1. test.py dosyasını çalıştırın:")
|
| print(" python test.py")
|
| print("\n2. Veya interaktif modda başlatın:")
|
| print(" from test import FitnessRAG, RAGConfig")
|
| print(" config = RAGConfig()")
|
| print(" rag = FitnessRAG(config)")
|
| print(" rag.interactive_chat()")
|
|
|
| print("\n💡 İpuçları:")
|
| print("- İlk çalıştırmada model indirileceği için biraz zaman alabilir")
|
| print("- PDF dosyalarınızı './indirilen_pdfler' klasörüne koyun")
|
| print("- JSON verilerinizi './DATA' klasörüne koyun")
|
| print("- LoRA adapter'ınız varsa './fine_tuned_FitTurkAI_QLoRA' klasörüne koyun")
|
|
|
| except Exception as e:
|
| print(f"\n❌ Kurulum hatası: {e}")
|
| print("Lütfen hataları kontrol edin ve tekrar deneyin.")
|
| return False
|
|
|
| return True
|
|
|
|
|
| def run_quick_demo():
|
| """Hızlı demo çalıştır"""
|
| print("\n🎯 Hızlı Demo Başlatılıyor...")
|
|
|
| try:
|
|
|
| from test import FitnessRAG, RAGConfig
|
|
|
|
|
| config = RAGConfig(peft_model_path=None)
|
|
|
| print("🤖 Model yükleniyor... (Bu işlem biraz zaman alabilir)")
|
| rag_system = FitnessRAG(config)
|
|
|
|
|
| print("📚 Demo bilgi tabanı oluşturuluyor...")
|
| rag_system.build_knowledge_base(json_dir="./DATA")
|
|
|
|
|
| demo_question = "Sağlıklı kahvaltı için ne önerirsiniz?"
|
| print(f"\n🤔 Demo Sorusu: {demo_question}")
|
|
|
| answer = rag_system.ask(demo_question)
|
| print(f"\n🤖 FitTürkAI Cevabı:\n{answer}")
|
|
|
| print("\n✅ Demo tamamlandı! Artık interactive_chat() ile tam sürümü kullanabilirsiniz.")
|
|
|
| except Exception as e:
|
| print(f"❌ Demo hatası: {e}")
|
| print("Manuel olarak test.py'yi çalıştırmayı deneyin.")
|
|
|
| if __name__ == "__main__":
|
|
|
| success = main()
|
|
|
|
|
| if success:
|
| print("\n" + "="*60)
|
| demo_choice = input("Hızlı demo çalıştırmak ister misiniz? (y/N): ").strip().lower()
|
| if demo_choice == 'y':
|
| run_quick_demo()
|
| else:
|
| print("Demo atlandı. Manuel olarak test.py'yi çalıştırabilirsiniz.") |