--- title: Tool Calling Saat Dilimi Farki emoji: 🕐 colorFrom: indigo colorTo: purple sdk: gradio sdk_version: 6.19.0 app_file: app.py pinned: false --- # 🕐 Tool Calling Demo — Saat Dilimi Farkı Bir LLM'in kullanıcı sorusuna göre **doğru fonksiyonları otomatik çağırdığı** (Tool / Function Calling), ĂŒcretsiz ve anahtarsız **timeapi.io** API'sinden gerçek veri çeken ve **çağrılan araçları arayĂŒzde açıkça gösteren** bir Gradio uygulaması. ## Ne yapıyor? Model iki araca erißebilir: | Araç | Görevi | |------|--------| | `get_current_time(timezone)` | Belirtilen IANA zaman diliminde (örn. `Europe/Istanbul`) o anki yerel saati ve UTC farkını döndĂŒrĂŒr. | | `time_difference(timezone1, timezone2)` | İki zaman dilimi arasındaki saat farkını hesaplar. | Kullanıcı ßehir adı yazsa bile (ör. "New York", "Tokyo") model bunu doğru IANA zaman dilimi kimliğine çevirir, gerekli araçları sırayla çağırır ve API'den gelen veriyle nihai yanıtı ĂŒretir. TĂŒm araç çağrı adımları sağdaki **"Tool Trace"** panelinde gösterilir. > **Sağlamlık:** timeapi.io'ya ulaßılamazsa uygulama, Python'un yerleßik > `zoneinfo` (IANA veritabanı) kĂŒtĂŒphanesine otomatik dĂŒĆŸer; böylece demo her > koßulda çalıßmaya devam eder. ### Örnek çalıßma akıßı ```text Kullanıcı: "New York ile Tokyo arasında kaç saat fark var, ßu an oralarda saat kaç?" [Turn 1] Araç Çağrıları: -> get_current_time(timezone='America/New_York') <- {'timezone': 'America/New_York', 'local_time': '2026-07-30 08:30:00', 'utc_offset_hours': -4.0} -> get_current_time(timezone='Asia/Tokyo') <- {'timezone': 'Asia/Tokyo', 'local_time': '2026-07-30 21:30:00', 'utc_offset_hours': 9.0} [Turn 2] Araç Çağrıları: -> time_difference(timezone1='America/New_York', timezone2='Asia/Tokyo') <- {'difference_hours': 13.0, 'note': "Asia/Tokyo, America/New_York'dan 13.0 saat ileridedir."} [Turn 3] Nihai Yanıt: Tokyo, New York'tan 13 saat ileride. ƞu an New York'ta 08:30, Tokyo'da 21:30. ``` ## Kurulum ve Yayınlama (Hugging Face Spaces) 1. **Yeni bir Space olußturun** → SDK olarak **Gradio** seçin. 2. Bu depodaki `app.py`, `requirements.txt` ve `README.md` dosyalarını yĂŒkleyin (README'nin en ĂŒstĂŒndeki YAML bloğu Space'in ayarlarını belirler). 3. **Settings → Variables and secrets** bölĂŒmĂŒnden ßunları ekleyin: - **`HF_TOKEN`** *(Secret, zorunlu)* — [huggingface.co/settings/tokens](https://huggingface.co/settings/tokens) adresinden alacağınız, "Make calls to Inference Providers" izinli bir token. - **`MODEL_ID`** *(Variable, opsiyonel)* — Varsayılan: `openai/gpt-oss-120b`. Daha hızlı/ucuz alternatif: `openai/gpt-oss-20b`. Diğer seçenekler: `Qwen/Qwen2.5-72B-Instruct`, `meta-llama/Llama-3.3-70B-Instruct`. - **`HF_PROVIDER`** *(Variable, opsiyonel)* — Varsayılan `auto` (uygun ilk sağlayıcıyı otomatik seçer). İsterseniz `hf-inference`, `together`, `novita` vb. 4. Space otomatik derlenip yayına alınır. > Seçtiğiniz modelin **tool calling** desteklediğinden ve serverless Inference > ĂŒzerinde sunulduğundan emin olun. Kontrol için: `hf models ls --warm`. ## Yerel çalıßtırma ```bash pip install -r requirements.txt export HF_TOKEN="hf_xxx" # kendi token'ınız python app.py # http://127.0.0.1:7860 ``` ## Mimari ``` Kullanıcı sorusu │ â–Œ ┌──────────────┐ tools=[get_current_time, time_difference] │ LLM │ ─────────────────────────────────────────â–ș tool_calls? └──────────────┘ │ â–Č │ evet │ tool sonuçları (JSON) â–Œ │ ┌──────────────────────────┐ └──────────────────────────────────────────│ timeapi.io (yedek: zoneinfo) │ └──────────────────────────┘ │ hayır → nihai yanıt â–Œ ArayĂŒz: sohbet + araç çağrı adımları (trace) ``` `run_agent()` fonksiyonu, model araç çağırmayı bırakana kadar (en fazla `MAX_TURNS` tur) döngĂŒ kurar; her turda çağrıları yĂŒrĂŒtĂŒr, sonuçları modele geri besler ve tĂŒm adımları kaydeder. ## Dosyalar - `app.py` — Gradio arayĂŒzĂŒ, araç tanımları (JSON ßeması), araç uygulamaları ve agent döngĂŒsĂŒ. - `requirements.txt` — Bağımlılıklar. - `README.md` — Bu dosya (+ HF Spaces yapılandırması). ## Veri kaynağı [timeapi.io](https://timeapi.io/) — ĂŒcretsiz, API anahtarı gerektirmeyen zaman/saat dilimi servisi.