Spaces:
Sleeping
Sleeping
File size: 4,120 Bytes
d376301 7291c68 e57a17b 7291c68 e59b163 d376301 7291c68 d376301 03a5388 7291c68 66afb4f 7291c68 03a5388 7291c68 d376301 7291c68 e59b163 66afb4f e59b163 279f6ec 03a5388 66afb4f e59b163 7291c68 848ceb3 d376301 7291c68 d376301 |
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 |
import gradio as gr
from huggingface_hub import InferenceClient
import requests
from bs4 import BeautifulSoup
import json
# Hugging Face Inference API istemcisi
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# TÜBİTAK veri çekme fonksiyonu
def fetch_tubitak_data():
"""
TÜBİTAK web sitesinden veri çeken fonksiyon.
"""
try:
url = "https://www.tubitak.gov.tr/tr"
response = requests.get(url)
if response.status_code != 200:
return [{"title": "Web sitesine erişim sağlanamadı", "description": "Lütfen internet bağlantınızı kontrol edin."}]
soup = BeautifulSoup(response.text, "html.parser")
# TÜBİTAK haberlerini çekme
news = []
for item in soup.find_all("div", class_="news-title"):
title = item.text.strip()
link = item.find("a")["href"]
news.append({"title": title, "link": f"https://www.tubitak.gov.tr{link}"})
return news
except Exception as e:
return [{"title": "Hata oluştu", "description": str(e)}]
# Anahtar kelimelere göre veri çekme kontrolü
KEYWORDS = ["tübitak", "bilgem", "blog", "YTE", "YZE", "SAGE", "MAM"]
# Chatbot yanıt fonksiyonu
def respond(
message,
history: list[tuple[str, str]],
system_message,
max_tokens,
temperature,
top_p,
):
"""
Kullanıcı mesajını ve geçmiş konuşmaları kullanarak yanıt oluşturur.
"""
try:
# Eğer mesajda belirlenen anahtar kelimelerden biri geçiyorsa TÜBİTAK verilerini getir
if any(keyword.lower() in message.lower() for keyword in KEYWORDS):
data = fetch_tubitak_data()
response = "\n".join([f"{item['title']} (Daha fazla bilgi: {item['link']})" for item in data])
if not response.strip():
response = "Şu anda TÜBİTAK ile ilgili bilgileri getiremedim. Lütfen daha sonra tekrar deneyin."
yield response
return
# Normal durumlarda model yanıtını üret
messages = [{"role": "system", "content": system_message}]
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
messages.append({"role": "user", "content": message})
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
yield response
except Exception as e:
yield f"Hata oluştu: {str(e)}"
# Gradio Chat Arayüzü
demo = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(
value=(
"You are a TÜBİTAK chatbot designed to answer questions about TÜBİTAK and its affiliated institutions. "
"Your primary task is to provide clear and concise answers in Turkish using information from TÜBİTAK's official website "
"(https://www.tubitak.gov.tr/tr) and the BİLGEM Blog (https://yteblog.bilgem.tubitak.gov.tr). "
"If possible, include links to the official sources in your answers and ensure they are professional and accurate."
),
label="System message"
),
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p (nucleus sampling)",
),
],
title="TÜBİTAK Chatbot",
description="TÜBİTAK ve BİLGEM hakkında bilgi edinmek için sorular sorun. [ChatYTE İçin Sentetik Veri Oluşturmak Amacıyla Geliştirilmiştir]",
)
# Uygulamayı başlat
if __name__ == "__main__":
demo.launch()
|