Instructions to use bilalabic/gemma-4-e4b-toolcall-tr-lora2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use bilalabic/gemma-4-e4b-toolcall-tr-lora2 with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("unsloth/gemma-4-E4B-it") model = PeftModel.from_pretrained(base_model, "bilalabic/gemma-4-e4b-toolcall-tr-lora2") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Unsloth Studio
How to use bilalabic/gemma-4-e4b-toolcall-tr-lora2 with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for bilalabic/gemma-4-e4b-toolcall-tr-lora2 to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for bilalabic/gemma-4-e4b-toolcall-tr-lora2 to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for bilalabic/gemma-4-e4b-toolcall-tr-lora2 to start chatting
Load model with FastModel
pip install unsloth from unsloth import FastModel model, tokenizer = FastModel.from_pretrained( model_name="bilalabic/gemma-4-e4b-toolcall-tr-lora2", max_seq_length=2048, )
Gemma 4 E4B — Türkçe Tool-Calling LoRA
bilalabic/turkish-tool-calling veri setiyle eğitilmiş LoRA adaptörü. Türkçe sorgularda araç çağırmayı, çağırmamayı ve eksik bilgiyi sormayı öğretir.
temel model unsloth/gemma-4-E4B-it
LoRA r = 32, alpha = 32, dropout 0
eğitim bf16, 2 epoch, 47.798 kayıt, A100 80 GB
Ölçülen sonuçlar
Test split'inden 500 tabakalı örnek, do_sample=False, temel modelle
aynı istem, aynı örnekler, aynı üretim ayarları:
| Metrik | Temel | Bu model | Fark |
|---|---|---|---|
| Karar doğruluğu | %90,0 | %94,4 | +4,4 |
| Araç adı eşleşmesi | %95,1 | %97,4 | +2,3 |
| Argüman tam eşleşme | %77,7 | %84,4 | +6,8 |
| Halüsinasyon (listede olmayan araç) | %0,0 | %0,0 | — |
| Biçim hatası | %0,2 | %0,0 | −0,2 |
Toplam hata 50 → 28. En büyük kazanç aşırı çağırmanın düşmesinde:
temel bu model
çağırdı -> çağırdı 378 382
çağırdı -> çağırmadı 7 3
çağırmadı-> çağırdı 43 25 <- %42 düşüş
çağırmadı-> çağırmadı 72 90
Bağımsız benchmark — BFCL v3 (AST), İngilizce
| Alt küme | Temel | Bu model |
|---|---|---|
| simple | %91,0 | %89,0 |
| multiple | %88,0 | %88,0 |
| parallel | %88,0 | %86,0 |
| irrelevance | %85,0 | %77,0 |
| GENEL | %88,0 | %85,0 |
İngilizcede geriliyor. −3 puan, McNemar p ≈ 0,045 (sınırda; alt küme başına 100 örnek kesin konuşmak için az). Bu model Türkçe için eğitildi; İngilizce tool-calling gerekiyorsa temel modeli kullan.
Gerilemenin sebebi veri setinin bir özelliği: metin argümanlarının %88,4'ü
sorguda birebir geçiyor, dolayısıyla model çıkarım gerektiren değerleri
üretmeyi öğrenmiyor. Kaybedilen örneklerin hepsinde doğru değer sorguda
yoktu — "Los Angeles" yerine "Los Angeles, CA", ima edilen
initial_velocity: 0, çoğul sculptures yerine şemadaki sculpture.
Kullanım
from unsloth import FastModel
from unsloth.chat_templates import get_chat_template
import json, torch
model, tokenizer = FastModel.from_pretrained(
"bilalabic/gemma-4-e4b-toolcall-tr-lora2",
max_seq_length=4096, load_in_4bit=False,
)
tokenizer = get_chat_template(tokenizer, chat_template="gemma-4")
# Gemma 4 cok kipli: `tokenizer` bir Gemma4Processor, ilk konumsal
# parametresi `images`. Ham metin islerinde ic tokenizer kullanilir.
metin_tok = getattr(tokenizer, "tokenizer", tokenizer)
FastModel.for_inference(model)
SISTEM = (
"Sen araç kullanabilen bir asistansın. Aşağıda kullanabileceğin araçlar var.\n"
"Uygun bir araç varsa YALNIZCA şu biçimde çağır, başka hiçbir şey yazma:\n"
'<tool_call>{"name": "araç_adı", "arguments": {"parametre": "değer"}}</tool_call>\n'
"Birden çok çağrı gerekiyorsa her birini ayrı satıra yaz.\n"
"Uygun araç yoksa veya zorunlu bilgi eksikse araç ÇAĞIRMA, Türkçe cevap ver."
)
araclar = [{
"name": "hava_durumu",
"description": "Belirtilen şehir için güncel hava durumunu getirir.",
"parameters": {"type": "object",
"properties": {"sehir": {"type": "string", "description": "Şehir adı."}},
"required": ["sehir"]},
}]
icerik = (SISTEM + "\n\nAraclar:\n" + json.dumps(araclar, ensure_ascii=False)
+ "\n\nKullanici: Ankara'da hava nasıl?")
istek = tokenizer.apply_chat_template(
[{"role": "user", "content": icerik}],
tokenize=False, add_generation_prompt=True).removeprefix("<bos>")
girdi = metin_tok(istek, return_tensors="pt").to("cuda")
cikti = model.generate(**girdi, max_new_tokens=128, do_sample=False,
pad_token_id=metin_tok.pad_token_id)
print(metin_tok.decode(cikti[0][girdi["input_ids"].shape[1]:], skip_special_tokens=True))
İstem biçimi eğitimdekiyle aynı olmalı. Model <tool_call>{...}</tool_call>
üretmeyi bu yönergeyle öğrendi; başka bir şablon kullanırsan çıktı biçimi
tutarsızlaşır.
Araç çağrısını ayıklamak için:
import re
CAGRI_RE = re.compile(r"<tool_call>\s*(\{.*?\})\s*</tool_call>", re.S)
cagrilar = [json.loads(p) for p in CAGRI_RE.findall(cikti_metni)]
Sınırlar
1. Tek turlu. Araç çağrısını üretir, ama dönen sonucu Türkçe cevaba çevirmeyi öğrenmedi — eğitim verisinde observation döngüsü yok. Çalışma anında ikinci turda temel modelin yeteneğine kalırsın. Sistem promptuna "araç sonucunu aldıktan sonra Türkçe, kısa ve sonucu birebir yansıtan bir cevap ver" eklemek dil kaymasının çoğunu kapatır.
2. Çıkarım gerektiren argümanlar zayıf. Yukarıda açıklandı.
3. İngilizce geriledi. Yukarıda ölçüldü.
4. Hata / kurtarma, onay isteme, sıralı çağrı yok. Eğitim verisinde timeout, boş sonuç, riskli işlem onayı veya çağrılar arası bağımlılık senaryoları bulunmuyor.
5. Türkiye'ye özgü alan kapsaması zayıf. Araç dağılımı RapidAPI kataloğunu yansıtır; OBS, kargo, e-devlet, belediye gibi alanlar yok.
6. Bağımsız Türkçe eval seti yok. Yukarıdaki Türkçe rakamlar veri setinin kendi test split'inden; aile bazlı split sayesinde hiçbir sorgu eğitimde görülmedi, ama aynı hattan türüyor.
Lisans
Adaptör ağırlıkları eğitim verisinin lisansına tabidir.
⚠️ Ticari kullanım için uygun değildir. Eğitim verisinin xLAM kısmı
cc-by-4.0etiketli ama kaynak kartında "for research purposes only" ifadesi de bulunuyor; ayrıca o kısmın Türkçe metinleri OpenAI API ile üretildi ve OpenAI hizmet koşulları çıktının rakip model geliştirmede kullanımını kısıtlar.
Temel model unsloth/gemma-4-E4B-it kendi lisansına tabidir (Gemma Terms
of Use).
@article{liu2024apigen,
title = {APIGen: Automated Pipeline for Generating Verifiable and
Diverse Function-Calling Datasets},
author = {Liu, Zuxin and Hoang, Thai and Zhang, Jianguo and others},
journal = {arXiv preprint arXiv:2406.18518},
year = {2024}
}
@article{ross2025when2call,
title = {When2Call: When (not) to Call Tools},
author = {Ross, Hayley and Mahabaleshwarkar, Ameya Sunil and Suhara, Yoshi},
journal = {arXiv preprint arXiv:2504.18851},
year = {2025}
}
Eğitim ve ölçüm kodu: https://github.com/BilalAbic/turkish-tool-calling-dataset
English
LoRA adapter for unsloth/gemma-4-E4B-it, trained on
bilalabic/turkish-tool-calling
(47,798 records, r=32, bf16, 2 epochs).
On the Turkish test split it improves decision accuracy 90.0% → 94.4%, argument exact match 77.7% → 84.4%, and cuts over-calling by 42%. On the English BFCL v3 AST benchmark it regresses 88.0% → 85.0% (McNemar p ≈ 0.045) — this model is for Turkish; use the base model for English tool calling.
Single-turn only: it emits tool calls but was never taught to turn a tool result into a Turkish answer. Not commercially usable — see the license note above.
- Downloads last month
- 19