deneme / app.py
syurek's picture
Update app.py
1da3868 verified
import gradio as gr
import json
from transformers import pipeline
# GPT-2 yerine soru-yanıt modeli kullanıyoruz (Türkçe destekli)
chatbot = pipeline("question-answering", model="savasy/bert-base-turkish-squad")
# JSON dosyasını yükle ve verileri al
def load_json(file):
if file is None:
return "JSON dosyası yükleyin."
try:
# UTF-8 ile dene
with open(file, "r", encoding="utf-8") as f:
data = json.load(f)
return data
except UnicodeDecodeError:
# Eğer UTF-8 başarısız olursa, Windows-1254 ile dene
try:
with open(file, "r", encoding="windows-1254") as f:
data = json.load(f)
return data
except Exception as e:
return f"Hata: Dosya kodlaması uyumsuz: {e}"
except Exception as e:
return f"Hata: {e}"
# Sohbet fonksiyonu
def chat_with_bot(user_input, json_file):
# JSON dosyasından verileri al
json_data = load_json(json_file)
if isinstance(json_data, str): # Eğer hata mesajı döndürdüyse
return json_data
# JSON verisini metne çevir (context olarak kullanılacak)
context = json.dumps(json_data, ensure_ascii=False)
# "JSON dosyası isimleri neler?" sorusuna özel mantık
if "isimleri neler" in user_input.lower() or "isimler" in user_input.lower():
if isinstance(json_data, list):
names = [entry.get("İsim", "Bilinmiyor") for entry in json_data if "İsim" in entry]
if names:
return f"JSON dosyasındaki isimler: {', '.join(names)}"
else:
return "JSON dosyasında isim bulunamadı."
return "JSON dosyası bir liste değil, isimler çıkarılamadı."
# Genel soru-yanıt için modelden cevap al
try:
response = chatbot(question=user_input, context=context)
bot_reply = response["answer"]
confidence = response["score"]
bot_reply += f" (Güven skoru: {confidence:.2f})"
except Exception as e:
bot_reply = f"Hata: Model yanıtı üretirken bir sorun oluştu: {e}"
# Ek sorular için mantık (örneğin, "kaç kişi" veya "yaş")
if "kaç kişi" in user_input.lower():
num_people = len(json_data)
bot_reply += f" JSON dosyasındaki kişi sayısı: {num_people}."
if "yaş" in user_input.lower() and isinstance(json_data, list):
ages = [entry['Yaş'] for entry in json_data if 'Yaş' in entry]
avg_age = sum(ages) / len(ages) if ages else "bulunamadı"
bot_reply += f" JSON dosyasındaki ortalama yaş: {avg_age}."
return bot_reply
# Gradio arayüzü
demo = gr.Interface(
fn=chat_with_bot,
inputs=[
gr.Textbox(label="💬 Senin Mesajın", placeholder="Örneğin: 'JSON dosyası isimleri neler?'"),
gr.File(label="📂 JSON Dosyası", type="filepath", file_types=[".json"]),
],
outputs="text",
title="🧠 Türkçe Sohbet Botu ve JSON Entegrasyonu",
description="JSON dosyasındaki verilerle Türkçe sorular sorarak doğal dilde cevaplar alın.",
)
# Arayüzü başlat
if __name__ == "__main__":
demo.launch()