--- language: - tr - en license: apache-2.0 base_model: Qwen/Qwen2.5-Coder-7B-Instruct tags: - lora - peft - sql - text2sql - turkish - wide-world-importers - stored-procedures datasets: - alifurkangokce/wwi-sql-assistant-lora --- # WideWorldImporters SQL Assistant — LoRA Fine-tune Domain-specific SQL asistanı. Qwen2.5-Coder-7B-Instruct üzerine LoRA ile eğitilmiştir. ## Model Hakkında WideWorldImporters (Microsoft örnek veritabanı) stored procedure'leri için Türkçe ve İngilizce soru-cevap, NL2SQL çevirisi ve SQL sonuç özetleme yetenekleri kazandırılmıştır. ## Yetenekler - **SP Asistanı**: 42 stored procedure hakkında TR/EN soru-cevap - **NL2SQL**: Türkçe soruları T-SQL SELECT sorgusuna çevirme - **SP Yazımı**: `CREATE OR ALTER PROCEDURE` şablonları - **Intent Sınıflandırma**: SP_QUERY / NL2SQL / EXPLAIN / CHITCHAT - **Sonuç Özetleme**: SQL sorgu sonuçlarını Türkçe özetleme - **Correlated Subquery**: EXISTS / NOT EXISTS kalıpları - **Temporal Tablo**: `FOR SYSTEM_TIME AS OF` sorguları ## Eğitim Detayları | Parametre | Değer | |---|---| | Base model | Qwen2.5-Coder-7B-Instruct | | LoRA rank | 32 | | LoRA alpha | 64 | | Hedef modüller | q/k/v/o_proj + gate/up/down_proj (7 modül) | | Eğitilebilir parametre | %1.05 | | Dataset | 2718 örnek (TR+EN bilingual) | | Epoch | 15 | | Batch size (eff.) | 8 | | Final loss | ~0.05 | | Donanım | RTX 5090 (WSL2) | ## Kullanım ```python from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer import torch base = AutoModelForCausalLM.from_pretrained( "Qwen/Qwen2.5-Coder-7B-Instruct", dtype=torch.bfloat16, device_map="auto", ) model = PeftModel.from_pretrained(base, "alifgokce/wwi-sql-assistant-lora") tok = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Coder-7B-Instruct") messages = [ {"role": "system", "content": "Sen WideWorldImporters veritabanı için uzman bir SQL asistanısın."}, {"role": "user", "content": "Website.SearchForCustomers nasıl çalıştırılır?"}, ] prompt = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = tok(prompt, return_tensors="pt").to(model.device) with torch.inference_mode(): out = model.generate(**inputs, max_new_tokens=256, do_sample=False) print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)) ``` ## Örnek Çıktılar **SP Sorusu (TR):** > Website.SearchForCustomers hangi parametreleri alır? ``` Website.SearchForCustomers aşağıdaki parametreleri alır: • @SearchText (nvarchar) • @MaximumRowsToReturn (int) EXEC Website.SearchForCustomers @SearchText= , @MaximumRowsToReturn= ; ``` **NL2SQL (TR):** > En çok sipariş veren 10 müşteriyi listele. ```sql SELECT TOP 10 c.CustomerID, c.CustomerName, COUNT(o.OrderID) AS OrderCount FROM Sales.Customers c JOIN Sales.Orders o ON o.CustomerID = c.CustomerID GROUP BY c.CustomerID, c.CustomerName ORDER BY OrderCount DESC; ``` ## Dataset Eğitim dataseti aynı repoda `finetune_dataset_v4.jsonl` olarak mevcuttur. Kategoriler: explain, exec, param_explain, nl2sql, sp_writing, intent_classification, correlated_subquery, dynamic_schema, realtime_data, result_summary ## Lisans Apache 2.0