Spaces:
Sleeping
Sleeping
| """ | |
| Kutuphane Asistani — Tool-Calling Destekli (Gradio arayuzu) | |
| ----------------------------------------------------------- | |
| Kullanici dogal dille kitap arar, oneri ister, odunc/iade yapar. | |
| Asistan, Groq LLM ile dogru tool'u (fonksiyonu) cagirir; SQLite veritabanindan | |
| gercek veri okur/yazar ve internetten (once Wikipedia, olmazsa Google Books) kitap konusu getirir. | |
| Arka planda cagrilan her tool ve donen veri kullaniciya adim adim gosterilir. | |
| """ | |
| import os | |
| import gradio as gr | |
| # ZeroGPU, ucretsiz HF hesaplarinda Gradio Space icin tek secenek ve en az bir | |
| # @spaces.GPU fonksiyonu bekliyor. LLM cagrisi disaridan (Groq) geldigi icin GPU'yu | |
| # fiilen kullanmayiz; yine de uyumluluk adina spaces'i import edip decorator koyuyoruz. | |
| try: | |
| import spaces | |
| GPU = spaces.GPU | |
| except Exception: | |
| def GPU(f=None, **k): # spaces yoksa (yerel calisma) no-op decorator | |
| return (lambda x: x)(f) if f else (lambda g: g) | |
| import db | |
| import router | |
| db.init_db() # veritabanini hazirla (ilk calistirmada kitaplari yukler) | |
| def _yanit(user_msg, history): | |
| """Router'i cagirip yaniti ve arka plan adimlarini formatlar.""" | |
| hist = [] | |
| for h in (history or []): | |
| if isinstance(h, dict): | |
| r, c = h.get("role"), h.get("content") | |
| if r in ("user", "assistant") and c: | |
| hist.append((r, c)) | |
| elif isinstance(h, (list, tuple)) and len(h) == 2: | |
| hist.append(("user", h[0])) if h[0] else None | |
| hist.append(("assistant", h[1])) if h[1] else None | |
| cevap, adimlar, katman = router.yanit_uret(user_msg, hist) | |
| if adimlar: | |
| arka = "\n".join(adimlar) | |
| return (f"{cevap}\n\n---\n**Arka planda yapilan islemler** _(katman: {katman})_\n" | |
| f"```\n{arka}\n```") | |
| return cevap | |
| ORNEKLER = [ | |
| "Merhaba, polisiye kitap önerir misin?", | |
| "Yerli ve ince bir polisiye olsun.", | |
| '"Suç ve Ceza" kitabı müsait mi?', | |
| '"Dune" kitabının konusu ne?', | |
| 'Sherlock Holmes: Kızıl Dosya kitabını Ayşe için ödünç al.', | |
| '"Suç ve Ceza" kitabını iade et.', | |
| ] | |
| with gr.Blocks(title="Kütüphane Asistanı") as demo: | |
| gr.Markdown( | |
| "# 📚 Kütüphane Asistanı\n" | |
| "Kitap arayın, öneri isteyin, ödünç alın veya iade edin. Asistan gerçek " | |
| "veritabanına ve internete (kitap konusu) erişir; arka planda çağırdığı " | |
| "araçları adım adım gösterir.\n\n" | |
| "*İpucu: ödünç almak için önce kitabı aratıp adını netleştirin.*" | |
| ) | |
| gr.ChatInterface(fn=_yanit, examples=ORNEKLER) | |
| if __name__ == "__main__": | |
| demo.launch() | |