| import gradio as gr |
| from transformers import AutoModelForCausalLM, AutoTokenizer |
| import torch |
|
|
| print("🔥 Modeller yükleniyor...") |
|
|
| |
| 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" |
| ) |
|
|
| |
| 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: |
| |
| 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: |
| |
| 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)}", "" |
|
|
| |
| 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) |
| |
| |
| 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 |
| ) |
| |
| |
| 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() |