import gradio as gr from transformers import AutoModelForCausalLM, AutoTokenizer import torch print("🔥 Modeller yükleniyor...") # DİL MODELİ (Türkçe) print("📝 Türkçe model yükleniyor...") lang_tokenizer = AutoTokenizer.from_pretrained("malhajar/llama-3.2-3B-Turkish") lang_model = AutoModelForCausalLM.from_pretrained( "malhajar/llama-3.2-3B-Turkish", torch_dtype=torch.float16, device_map="auto" ) # MATEMATİK MODELİ print("🧮 Matematik model yükleniyor...") math_tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-math-7b-instruct") math_model = AutoModelForCausalLM.from_pretrained( "deepseek-ai/deepseek-math-7b-instruct", torch_dtype=torch.float16, device_map="auto" ) print("✅ Tüm modeller hazır!") def detect_math(prompt): """Matematik prompt mu kontrol et""" math_keywords = [ "çarp", "böl", "topla", "çıkar", "hesap", "kaç", "toplam", "fark", "çarpım", "bölüm", "üzeri", "=", "+", "-", "*", "/", "×", "÷", "kare", "küp" ] prompt_lower = prompt.lower() return any(keyword in prompt_lower for keyword in math_keywords) def generate_text(model, tokenizer, prompt, max_length=200): """Genel metin üretme fonksiyonu""" inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=512) inputs = {k: v.to(model.device) for k, v in inputs.items()} with torch.no_grad(): outputs = model.generate( **inputs, max_length=max_length, do_sample=True, temperature=0.7, top_p=0.9, pad_token_id=tokenizer.eos_token_id ) return tokenizer.decode(outputs[0], skip_special_tokens=True) def hybrid_ai(prompt, max_length, show_both): """Ana AI fonksiyonu""" if not prompt.strip(): return "⚠️ Lütfen bir metin girin!", "" is_math = detect_math(prompt) if show_both: # Her iki modeli de göster try: math_result = generate_text(math_model, math_tokenizer, prompt, max_length) lang_result = generate_text(lang_model, lang_tokenizer, prompt, max_length) result1 = f"### 🧮 Matematik AI (DeepSeek-Math)\n\n{math_result}" result2 = f"### 💬 Dil AI (Llama-3.2 Turkish)\n\n{lang_result}" return result1, result2 except Exception as e: return f"❌ Hata: {str(e)}", "" else: # Otomatik seçim try: if is_math: result = generate_text(math_model, math_tokenizer, prompt, max_length) return f"### 🧮 Matematik AI Seçildi (DeepSeek-Math)\n\n{result}", "" else: result = generate_text(lang_model, lang_tokenizer, prompt, max_length) return f"### 💬 Dil AI Seçildi (Llama-3.2 Turkish)\n\n{result}", "" except Exception as e: return f"❌ Hata: {str(e)}", "" # Gradio Arayüzü with gr.Blocks(title="Hybrid AI: Matematik + Dil", theme=gr.themes.Soft()) as demo: gr.Markdown(""" # 🔥 Hybrid AI: 2 Model Birleşimi **Matematik:** DeepSeek-Math-7B **Dil:** Llama-3.2-3B Turkish Otomatik algılama veya her ikisini karşılaştır! """) with gr.Row(): with gr.Column(): prompt_input = gr.Textbox( label="📝 Prompt", placeholder="Matematik soru veya normal metin...", lines=5 ) max_length = gr.Slider( 50, 300, 150, step=10, label="Maksimum Uzunluk" ) show_both = gr.Checkbox( label="🔀 Her İki Modeli de Göster (Karşılaştırma Modu)", value=False ) generate_btn = gr.Button("🚀 Üret", variant="primary", size="lg") with gr.Row(): output1 = gr.Textbox(label="Sonuç 1", lines=10) output2 = gr.Textbox(label="Sonuç 2 (Karşılaştırma Modunda)", lines=10, visible=True) # Örnekler with gr.Accordion("📚 Örnek Promptlar", open=False): gr.Examples( examples=[ ["347 çarpı 829 eşittir"], ["Bir varmış bir yokmuş, evvel zaman içinde"], ["Yapay zeka geleceği nasıl şekillendirir?"], ["Bir sepette 15 elma var. 7 tanesini yedim, 12 tane daha aldım. Toplam kaç elma var?"], ["İstanbul'un tarihi dokusu hakkında yazı yaz"] ], inputs=prompt_input ) # Event generate_btn.click( fn=hybrid_ai, inputs=[prompt_input, max_length, show_both], outputs=[output1, output2] ) gr.Markdown(""" --- 💡 **Nasıl Çalışır:** - ✅ Matematik kelimeleri varsa → DeepSeek-Math - ✅ Normal metin varsa → Llama-3.2 Turkish - 🔀 Karşılaştırma modunda her ikisi de çalışır! """) if __name__ == "__main__": demo.launch()