|
|
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() |