File size: 5,095 Bytes
b5ef4ac
 
f0b3ced
b5ef4ac
f0b3ced
b5ef4ac
f0b3ced
 
 
 
 
 
 
 
b5ef4ac
f0b3ced
 
 
 
 
 
 
b5ef4ac
 
f0b3ced
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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()