GGUF
Turkish
English
turkish
personal-assistant
qwen
llama.cpp
unsloth
natural-language
conversational
Instructions to use AlienTurk/Turkish-Asistant-gguf with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use AlienTurk/Turkish-Asistant-gguf with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf AlienTurk/Turkish-Asistant-gguf:Q4_K_M # Run inference directly in the terminal: llama cli -hf AlienTurk/Turkish-Asistant-gguf:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf AlienTurk/Turkish-Asistant-gguf:Q4_K_M # Run inference directly in the terminal: llama cli -hf AlienTurk/Turkish-Asistant-gguf:Q4_K_M
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf AlienTurk/Turkish-Asistant-gguf:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf AlienTurk/Turkish-Asistant-gguf:Q4_K_M
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf AlienTurk/Turkish-Asistant-gguf:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf AlienTurk/Turkish-Asistant-gguf:Q4_K_M
Use Docker
docker model run hf.co/AlienTurk/Turkish-Asistant-gguf:Q4_K_M
- LM Studio
- Jan
- Ollama
How to use AlienTurk/Turkish-Asistant-gguf with Ollama:
ollama run hf.co/AlienTurk/Turkish-Asistant-gguf:Q4_K_M
- Unsloth Desktop
- Docker Model Runner
How to use AlienTurk/Turkish-Asistant-gguf with Docker Model Runner:
docker model run hf.co/AlienTurk/Turkish-Asistant-gguf:Q4_K_M
- Lemonade
How to use AlienTurk/Turkish-Asistant-gguf with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull AlienTurk/Turkish-Asistant-gguf:Q4_K_M
Run and chat with the model
lemonade run user.Turkish-Asistant-gguf-Q4_K_M
List all available models
lemonade list
- Atomic Chat
Upload README.md with huggingface_hub
Browse files
README.md
CHANGED
|
@@ -10,78 +10,102 @@ tags:
|
|
| 10 |
- gguf
|
| 11 |
- llama.cpp
|
| 12 |
- unsloth
|
|
|
|
| 13 |
base_model: Qwen/Qwen2.5-3B-Instruct
|
| 14 |
---
|
| 15 |
|
| 16 |
-
# Mira Turkish Assistant
|
| 17 |
|
| 18 |
-
|
|
|
|
|
|
|
| 19 |
|
| 20 |
-
|
|
|
|
| 21 |
|
| 22 |
-
|
| 23 |
-
- **Dataset:** 662 → 712 unique dialog (+%7.5 boyut)
|
| 24 |
-
- **Yeni intent'ler:** `UPDATE_TASK` (saat güncelleme) + `CANCEL_TASK` (basit + ambiguous)
|
| 25 |
-
- **Yeni alan:** `task_id` (UUID, ADD_TASK/SET_REMINDER'da üretilir, UPDATE/CANCEL'da korunur)
|
| 26 |
-
- **Artifact temizliği:**
|
| 27 |
-
- BUGÜN dağıtımı: 1 sabit tarih → 31 farklı tarih (örnek başına geçmiş 30 gün)
|
| 28 |
-
- Dedupe: `json.dumps` → `(user, assistant)` tuple (v5_hybrid'ın 19 duplicate'i elendi)
|
| 29 |
-
- K1 selamlama: 5 aynı "merhaba" → 5 farklı varyasyon
|
| 30 |
-
- **Domain kapsamı:** 7 domain (değişmedi)
|
| 31 |
-
- **Eğitim:** 2 epoch, EarlyStopping, LR=5e-5 (v5_hybrid ile aynı)
|
| 32 |
-
- **Persona polish:** "güncellendi" reply (düzeltme akışı), Empatik CHAT (15 duygusal içerik yanıtı)
|
| 33 |
-
- **Hedef:** v5_hybrid üzerine UPDATE/CANCEL akışlarını öğretmek, BUGÜN artifact'ini temizlemek, persona polish
|
| 34 |
|
| 35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
## Model Detayları
|
| 38 |
|
| 39 |
- **Base model:** [Qwen/Qwen2.5-3B-Instruct](https://huggingface.co/Qwen/Qwen2.5-3B-Instruct)
|
| 40 |
- **Fine-tune yöntemi:** QLoRA (r=16, alpha=32, target_modules: q,k,v,o,gate,up,down)
|
| 41 |
-
- **Veri seti:**
|
| 42 |
-
- **Eğitim:**
|
| 43 |
- **Framework:** Unsloth + Transformers + TRL (Google Colab L4 GPU)
|
| 44 |
-
- **Quantization:** Q4_K_M (~1.
|
| 45 |
-
- **Context window:**
|
| 46 |
-
|
| 47 |
-
##
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
## Kullanım
|
| 60 |
|
| 61 |
### llama.cpp ile (komut satırı)
|
| 62 |
|
| 63 |
```bash
|
| 64 |
-
llama.cpp/main -m qwen2.5-3b-it-tr-asistant-
|
| 65 |
-c 2048 \
|
| 66 |
-n 512 \
|
| 67 |
--threads 3 \
|
| 68 |
-
-p "<|im_start|>system\nSen Türkçe kişisel asistansın.<|im_end|>\n<|im_start|>user\nYarın saat 14'te fatura ödemeyi unutma.<|im_end|>\n<|im_start|>assistant\n"
|
| 69 |
```
|
| 70 |
|
| 71 |
-
### llama-cpp-python ile
|
| 72 |
|
| 73 |
```python
|
| 74 |
from llama_cpp import Llama
|
|
|
|
| 75 |
|
| 76 |
llm = Llama(
|
| 77 |
-
model_path="qwen2.5-3b-it-tr-asistant-
|
| 78 |
n_threads=3,
|
| 79 |
n_ctx=2048,
|
| 80 |
)
|
| 81 |
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
|
| 86 |
output = llm.create_chat_completion(
|
| 87 |
messages=[
|
|
@@ -92,67 +116,114 @@ output = llm.create_chat_completion(
|
|
| 92 |
stop=["<|im_end|>"],
|
| 93 |
)
|
| 94 |
print(output["choices"][0]["message"]["content"])
|
|
|
|
| 95 |
```
|
| 96 |
|
| 97 |
-
##
|
| 98 |
-
|
| 99 |
-
Model şu intent'lere sınıflandırma yapar ve JSON çıktısı üretir:
|
| 100 |
-
|
| 101 |
-
```json
|
| 102 |
-
{
|
| 103 |
-
"intent": "SET_REMINDER",
|
| 104 |
-
"task_id": "550e8400-e29b-41d4-a716-446655440000",
|
| 105 |
-
"task_title": "Fatura ödemek",
|
| 106 |
-
"datetime": "2026-06-07T11:00:00.000",
|
| 107 |
-
"navigate_to": null,
|
| 108 |
-
"reply": "Tabii, yarın saat 14:00 için fatura ödeme hatırlatıcısı oluşturdum."
|
| 109 |
-
}
|
| 110 |
-
```
|
| 111 |
-
|
| 112 |
-
| Intent | Açıklama |
|
| 113 |
-
|--------|----------|
|
| 114 |
-
| `ADD_TASK` | Yeni görev oluştur (task_id üretilir) |
|
| 115 |
-
| `SET_REMINDER` | Zamanlı hatırlatıcı kur (task_id üretilir) |
|
| 116 |
-
| `UPDATE_TASK` | Mevcut görevin saatini güncelle (task_id korunur) |
|
| 117 |
-
| `CANCEL_TASK` | Mevcut görevi iptal et (task_id korunur) |
|
| 118 |
-
| `LIST_TASKS` | Mevcut görevleri listele |
|
| 119 |
-
| `NAVIGATE` | Uygulama içi sayfa değiştir (PROFILE, SETTINGS, HOME, TASKS) |
|
| 120 |
-
| `CHAT` | Genel sohbet (greeting, veda, sağlık durumu, out-of-scope, negation, clarification, empati) |
|
| 121 |
-
|
| 122 |
-
## Sınırlamalar
|
| 123 |
|
| 124 |
-
|
| 125 |
-
|
|
|
|
| 126 |
|
| 127 |
-
|
|
|
|
|
|
|
| 128 |
|
| 129 |
-
|
| 130 |
|
| 131 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
|
| 133 |
-
|
|
|
|
| 134 |
|
| 135 |
-
## Eğitim Veri Seti (
|
| 136 |
|
| 137 |
| Kısım | Açıklama | Adet |
|
| 138 |
|-------|----------|------|
|
| 139 |
| 1 | Persona & Selam (jenerik) | 70 |
|
| 140 |
-
| 2 | Tek-tur SET_REMINDER (7 domain × time × title) | 220 |
|
| 141 |
-
| 3 | Çok-turlu SET_REMINDER ("ne zaman?" → yanıt → kur) | 140 |
|
| 142 |
| 4 | ADD_TASK | 41 |
|
| 143 |
| 5 | LIST_TASKS + NAVIGATE | 31 |
|
| 144 |
| 6 | Negasyon / İptal (domain'ler arası) | 30 |
|
| 145 |
-
| 7 | Düzeltme / Güncelleme (
|
| 146 |
| 8 | Genel sohbet (hava, motivasyon, günlük, teknoloji, kitap, film, yemek) | 54 |
|
| 147 |
-
| 9 | Karma uzun diyaloglar (5-8 turlu, domain'ler arası) | 24 |
|
| 148 |
-
| 10 | Typo / STT dayanıklılık (tüm domain'lerde ağır bozulma) | 40 |
|
| 149 |
-
|
|
| 150 |
-
|
|
| 151 |
-
|
|
| 152 |
-
|
|
| 153 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 154 |
|
| 155 |
-
**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
|
| 157 |
## Donanım Doğrulamaları (Mobile)
|
| 158 |
|
|
@@ -161,17 +232,9 @@ yemek siparişi, web arama, hava durumu, müzik, e-posta, çeviri, taksi, telefo
|
|
| 161 |
| POCO X4 GT (Dimensity 8100) | CPU | 2 | 768 | ~6s | ~3 GB (8 GB cihazda rahat) |
|
| 162 |
| iPhone 17 Pro (M3 Max sim) | CPU | 6 | 2048 | <2s | ~2.5 GB unified memory |
|
| 163 |
|
| 164 |
-
Vulkan backend Dimensity 8100 Android 14'te `ggml_backend_alloc_ctx_tensors_from_buft`
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
1. **v5_hybrid üzerine minor polish:** Major kırılma yok, sadece yeni intent'ler (UPDATE/CANCEL) + artifact temizliği + persona polish.
|
| 169 |
-
2. **Yeni intent'ler:** `UPDATE_TASK` (saat güncelleme) + `CANCEL_TASK` (basit iptal). Ambiguous case (2+ görev) → model `CHAT` clarification sorar, engine guard fuzzy match + confirmation dialog.
|
| 170 |
-
3. **Task_id akışı:** ADD_TASK/SET_REMINDER'da model UUID üretir. UPDATE/CANCEL'da model aynı session'daki task_id'yi korur. Engine guard fuzzy match (Levenshtein < 3) ile DB'den gerçek ID'yi bulur.
|
| 171 |
-
4. **BUGÜN dağıtımı:** v5_hybrid'da 1 sabit tarih vardı, v5.1'de örnek başına farklı tarih (geçmiş 30 gün). Model artık BUGÜN'ü ezberlemez.
|
| 172 |
-
5. **(user, assistant) tuple dedupe:** v5_hybrid'da `json.dumps` dedupe'u 19 duplicate'i kaçırmıştı, v5.1'de `user/assistant` imzaları bazında dedupe yapılır.
|
| 173 |
-
6. **Persona polish:** Düzeltme akışında "kuruldu" yerine "güncellendi" (K11, 10 örnek), duygusal içerikli mesajlara empatik yanıt (K12, 15 örnek).
|
| 174 |
-
7. **Engine guard (kod değişikliği, fine-tune YOK):** `offset_minutes` guard — LLM alanı boş bıraktıysa user msg'den regex ile parse edip inject eder. 3B'de "her zaman alanı doldur" kuralı %50-70, engine guard %100.
|
| 175 |
|
| 176 |
## Lisans
|
| 177 |
|
|
@@ -180,9 +243,9 @@ Apache 2.0 (Qwen2.5 base modeliyle uyumlu).
|
|
| 180 |
## Atıf
|
| 181 |
|
| 182 |
```
|
| 183 |
-
@misc{mira-turkish-assistant-
|
| 184 |
author = {Algoritma Turk},
|
| 185 |
-
title = {Mira Turkish Assistant
|
| 186 |
year = {2026},
|
| 187 |
publisher = {Hugging Face},
|
| 188 |
url = {https://huggingface.co/AlienTurk/Turkish-Asistant-gguf}
|
|
@@ -194,3 +257,4 @@ Apache 2.0 (Qwen2.5 base modeliyle uyumlu).
|
|
| 194 |
- **Base model:** https://huggingface.co/Qwen/Qwen2.5-3B-Instruct
|
| 195 |
- **Quantized GGUF:** https://huggingface.co/AlienTurk/Turkish-Asistant-gguf
|
| 196 |
- **Fine-tune framework:** [Unsloth](https://github.com/unslothai/unsloth)
|
|
|
|
|
|
| 10 |
- gguf
|
| 11 |
- llama.cpp
|
| 12 |
- unsloth
|
| 13 |
+
- natural-language
|
| 14 |
base_model: Qwen/Qwen2.5-3B-Instruct
|
| 15 |
---
|
| 16 |
|
| 17 |
+
# Mira Turkish Assistant v6N (Qwen2.5-3B-IT-TR) — Doğal Dil SFT
|
| 18 |
|
| 19 |
+
> **v6N = v6 Natural.** Bu sürüm **JSON artefaktı içermez**. Model, eğitim sırasında
|
| 20 |
+
> doğrudan doğal Türkçe yanıt üretmeyi öğrendi. Yapısal veri (intent, datetime, task_id)
|
| 21 |
+
> çıkarımı Hybrid NLP Engine tarafından runtime'da paralel olarak yapılır.
|
| 22 |
|
| 23 |
+
Bu model **Qwen2.5-3B-Instruct** baz modeli üzerine **Unsloth + TRL** ile ince ayar yapılmış,
|
| 24 |
+
**doğal dil SFT** (Supervised Fine-Tuning) ile eğitilmiş Türkçe kişisel asistan modelidir.
|
| 25 |
|
| 26 |
+
JSON mimarisi (v5_hybrid, v5.1) terk edilmiştir. Bunun yerine:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
|
| 28 |
+
- **LLM:** Doğal Türkçe yanıt üretir (assistant_text)
|
| 29 |
+
- **NLPEngine:** Paralel olarak regex/heuristik tabanlı intent/taskTitle/datetime çıkarır
|
| 30 |
+
- **Engine guard'lar:** Title recovery, notal override, multi-turn confirmation, P33 disambiguation
|
| 31 |
+
|
| 32 |
+
Engine guard'lar LLM çıktısını **sadece gerekli durumlarda override eder** (saat uydurma,
|
| 33 |
+
not-al semantik, P33 listeleme). Normal akışta LLM'in doğal yanıtı kullanıcıya ulaşır.
|
| 34 |
+
|
| 35 |
+
## v6N vs v5.1 — Temel Farklar
|
| 36 |
+
|
| 37 |
+
| Özellik | v5.1 (eski) | v6N (bu) |
|
| 38 |
+
|---|---|---|
|
| 39 |
+
| **Çıktı formatı** | JSON şeması (`{intent, task_id, ...}`) | Doğal Türkçe metin |
|
| 40 |
+
| **JSON artefaktı** | Olabilir (3B model ara sıra JSON dışı çıktı) | Yok (sadece doğal dil öğretildi) |
|
| 41 |
+
| **Yapısal veri** | LLM üretir | NLPEngine paralel çıkarır |
|
| 42 |
+
| **Senaryo 1.4 reply** | LLM kendi yazıyordu (format değişken) | "Yarın saat 10:00 X için hatırlatıcın 1 saat önce kuruldu." (sabit) |
|
| 43 |
+
| **Senaryo 2/1.5 "not al"** | NLPEngine fallback | "Yarın için X görevi kuruldu." (Senaryo 1.5 template) |
|
| 44 |
+
| **Senaryo 1.3 offset** | Default 1 saat | "30 dakika/saat/gün önce" kullanıcı verisine göre |
|
| 45 |
+
| **11:30/12:30 tokenizasyon** | Zayıf | 12 varyasyon eğitildi |
|
| 46 |
+
| **P33 disambiguation** | Engine + LLM clarification | Engine + K15 training |
|
| 47 |
+
| **Dataset** | 712 dialog (JSON) | 757 dialog (doğal dil) |
|
| 48 |
+
| **Pack** | JSON: `{messages, _meta}` | Doğal dil: `{messages}` (meta strip) |
|
| 49 |
|
| 50 |
## Model Detayları
|
| 51 |
|
| 52 |
- **Base model:** [Qwen/Qwen2.5-3B-Instruct](https://huggingface.co/Qwen/Qwen2.5-3B-Instruct)
|
| 53 |
- **Fine-tune yöntemi:** QLoRA (r=16, alpha=32, target_modules: q,k,v,o,gate,up,down)
|
| 54 |
+
- **Veri seti:** 757 unique doğal Türkçe diyalog (SFT, ChatML format, 17 K-seri)
|
| 55 |
+
- **Eğitim:** 3 epoch, validation split %8, early stopping (patience=2, threshold=0.005), LR=3e-5 (QLoRA için orta yol), cosine_with_restarts scheduler, packing=True
|
| 56 |
- **Framework:** Unsloth + Transformers + TRL (Google Colab L4 GPU)
|
| 57 |
+
- **Quantization:** Q4_K_M (~1.93 GB)
|
| 58 |
+
- **Context window:** 1024 token (eğitim), 2048 token (runtime iOS), 768 token (Android)
|
| 59 |
+
|
| 60 |
+
## Mimari: LLM + Hybrid NLP Engine
|
| 61 |
+
|
| 62 |
+
```
|
| 63 |
+
User mesajı
|
| 64 |
+
↓
|
| 65 |
+
LLM (Qwen2.5-3B v6N) ← ─ → NLPEngine (rule-based) [paralel]
|
| 66 |
+
↓ ↓
|
| 67 |
+
Doğal yanıt Intent + taskTitle + datetime
|
| 68 |
+
↓ ↓
|
| 69 |
+
└────── → ActionDispatcher → DB + notification
|
| 70 |
+
```
|
| 71 |
+
|
| 72 |
+
- **LLM** kişilik, doğal konuşma, onay formatı, saat sorusu sorma, P33 clarification
|
| 73 |
+
- **NLPEngine** tarih/saat parse, intent sınıflandırma, title extraction
|
| 74 |
+
- **ActionDispatcher** DB insert/update/delete + notification schedule/cancel + P33 disambiguation
|
| 75 |
+
- **Engine guard'lar** (mimari seviye, fine-tune gerekmez): TimeFabricationGuard, NotAlOverrideGuard, ChatUpdateCancelRecoveryGuard, MultiTurnConfirmationRecoveryGuard
|
| 76 |
|
| 77 |
## Kullanım
|
| 78 |
|
| 79 |
### llama.cpp ile (komut satırı)
|
| 80 |
|
| 81 |
```bash
|
| 82 |
+
llama.cpp/main -m qwen2.5-3b-it-tr-asistant-v6N.Q4_K_M.gguf \
|
| 83 |
-c 2048 \
|
| 84 |
-n 512 \
|
| 85 |
--threads 3 \
|
| 86 |
+
-p "<|im_start|>system\nSen Türkçe kişisel asistansın. BUGÜN: 14 Haziran 2026, Pazar.<|im_end|>\n<|im_start|>user\nYarın saat 14'te fatura ödemeyi unutma.<|im_end|>\n<|im_start|>assistant\n"
|
| 87 |
```
|
| 88 |
|
| 89 |
+
### llama-cpp-python ile (doğal dil — JSON yok)
|
| 90 |
|
| 91 |
```python
|
| 92 |
from llama_cpp import Llama
|
| 93 |
+
from datetime import datetime
|
| 94 |
|
| 95 |
llm = Llama(
|
| 96 |
+
model_path="qwen2.5-3b-it-tr-asistant-v6N.Q4_K_M.gguf",
|
| 97 |
n_threads=3,
|
| 98 |
n_ctx=2048,
|
| 99 |
)
|
| 100 |
|
| 101 |
+
today_str = "14 Haziran 2026, Pazar"
|
| 102 |
+
SYSTEM_PROMPT = f"""Sen son derece yardımcı, nazik, empatik ve organize bir Türkçe kişisel asistansın.
|
| 103 |
+
BUGÜN: {today_str}.
|
| 104 |
+
Temel görevlerin:
|
| 105 |
+
- Kullanıcıyla doğal, samimi ve akıcı bir sohbet kurmak.
|
| 106 |
+
- Kullanıcının görevlerini, randevularını ve hatırlatıcılarını yönetmek.
|
| 107 |
+
- Detaylar (özellikle saat) eksikse kibarca sor. Detaylar netse, işlemi yaptığınız doğal bir dille onayla.
|
| 108 |
+
- Asla ham JSON, kod bloğu veya teknik terimler kullanma. Sadece doğal Türkçe konuş."""
|
| 109 |
|
| 110 |
output = llm.create_chat_completion(
|
| 111 |
messages=[
|
|
|
|
| 116 |
stop=["<|im_end|>"],
|
| 117 |
)
|
| 118 |
print(output["choices"][0]["message"]["content"])
|
| 119 |
+
# Örnek çıktı: "Yarın saat 14:00 Fatura ödeme için hatırlatıcın 1 saat önce kuruldu."
|
| 120 |
```
|
| 121 |
|
| 122 |
+
### Native çıktıda yapısal veri (NLPEngine tarafı — ayrı)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
|
| 124 |
+
LLM doğal yanıt üretir; `intent`, `taskTitle`, `datetime` gibi yapısal alanlar
|
| 125 |
+
**Hybrid NLP Engine** (`lib/core/services/hybrid_nlp_engine.dart`) tarafından runtime'da
|
| 126 |
+
paralel olarak çıkarılır. Bu nedenle inference kodunuzda:
|
| 127 |
|
| 128 |
+
1. LLM'i doğal yanıt için kullanın (chat UI'a yazacağınız metin)
|
| 129 |
+
2. NLPEngine'i arka planda çalıştırın → DB aksiyonu (SET_REMINDER, ADD_TASK, vb.)
|
| 130 |
+
3. Engine guard'lar kritik durumlarda LLM çıktısını override eder (saat uydurma, P33 vb.)
|
| 131 |
|
| 132 |
+
## Reply Formatları (docs/uygulama_kurallari.md)
|
| 133 |
|
| 134 |
+
| Senaryo | Format | Örnek |
|
| 135 |
+
|---------|--------|-------|
|
| 136 |
+
| 1.1 (saat sorma) | "Anladım [Gün] '[Aktivite]' için hangi saatte hatırlatma istersiniz? Hatırlatıcı kurmamı isterseniz saat verin, sadece görev kaydetmek isterseniz 'not al' yazmanız yeterli." | "Anladım Pazartesi 'Kahve' için hangi saatte..." |
|
| 137 |
+
| 1.2 (default 1 saat önce) | (kullanıcı süre vermedi → 1 saat) | — |
|
| 138 |
+
| 1.3 (offset) | "[Gün] saat [HH:MM] [Aktivite] için hatırlatıcın [Süre] önce kuruldu." | "Yarın saat 10:00 Doktor için hatırlatıcın 30 dakika önce kuruldu." |
|
| 139 |
+
| 1.4 (onay) | "[Gün] saat [HH:MM] [Aktivite] için hatırlatıcın [Süre] önce kuruldu." | "Yarın saat 12:00 Kahve için hatırlatıcın 1 saat önce kuruldu." |
|
| 140 |
+
| 1.5 / Senaryo 2 ("not al") | "[Gün] için [Aktivite] görevi kuruldu." | "Pazartesi için Kahve görevi kuruldu." |
|
| 141 |
+
| 3 (iptal onay) | "Tamam, '[Aktivite]' görevi silindi." / "korundu." | (dispatcher override eder) |
|
| 142 |
+
| 4 (P33 disambiguation) | "Birden fazla '[Aktivite]' göreviniz var: 1) ... 2) ..." | (engine injection) |
|
| 143 |
+
| 5 (UPDATE) | "[Gün] '[Aktivite]' '[Saat]' için [Süre] önce hatırlatacak şekilde güncellendi." | "Yarın 'Spor Salonu' '20:00' için 1 saat önce hatırlatacak şekilde güncellendi." |
|
| 144 |
|
| 145 |
+
> NOT: Senaryo 3 (iptal) ve Senaryo 5 (UPDATE) reply'leri runtime'da `ActionDispatcher` tarafından
|
| 146 |
+
> override edilir (Sprint 11 + Sprint 13 fix). LLM'in bu senaryolardaki doğal reply'i gösterilmez.
|
| 147 |
|
| 148 |
+
## Eğitim Veri Seti (757 dialog)
|
| 149 |
|
| 150 |
| Kısım | Açıklama | Adet |
|
| 151 |
|-------|----------|------|
|
| 152 |
| 1 | Persona & Selam (jenerik) | 70 |
|
| 153 |
+
| 2 | Tek-tur SET_REMINDER (7 domain × time × title) — **Senaryo 1.4 format** | 220 |
|
| 154 |
+
| 3 | Çok-turlu SET_REMINDER ("ne zaman?" → yanıt → kur) — **Senaryo 1.4 format** | 140 |
|
| 155 |
| 4 | ADD_TASK | 41 |
|
| 156 |
| 5 | LIST_TASKS + NAVIGATE | 31 |
|
| 157 |
| 6 | Negasyon / İptal (domain'ler arası) | 30 |
|
| 158 |
+
| 7 | Düzeltme / Güncelleme (narrative) | 12 |
|
| 159 |
| 8 | Genel sohbet (hava, motivasyon, günlük, teknoloji, kitap, film, yemek) | 54 |
|
| 160 |
+
| 9 | Karma uzun diyaloglar (5-8 turlu, domain'ler arası) — **filter düzeltildi** | 24 |
|
| 161 |
+
| 10 | Typo / STT dayanıklılık (tüm domain'lerde ağır bozulma) — **Senaryo 1.4 format** | 40 |
|
| 162 |
+
| 11 | "güncellendi" reply polish (UPDATE sonrası) | 10 |
|
| 163 |
+
| 12 | Empatik CHAT (duygusal içerik yanıtları) | 15 |
|
| 164 |
+
| 13 | UPDATE_TASK (saat güncelleme) | 10 |
|
| 165 |
+
| 14 | CANCEL_TASK (basit iptal) | 10 |
|
| 166 |
+
| 15 | CANCEL_TASK (ambiguous / clarification → P33) | 5 |
|
| 167 |
+
| **16** | **"not al" saatsiz görev (Senaryo 2)** — **YENİ** | **25** |
|
| 168 |
+
| **17** | **"X dakika/saat/gün önce" offset (Senaryo 1.3)** — **YENİ** | **20** |
|
| 169 |
+
|
| 170 |
+
**Domain dağılımı (7 domain):** sağlık, iş/kariyer, finans/fatura, eğitim, seyahat/ulaşım, sosyal/kişisel, ev/günlük yaşam.
|
| 171 |
+
|
| 172 |
+
**Tüm diyaloglar doğal Türkçedir.** JSON şeması, `intent` alanı, `task_id` alanı **yoktur**.
|
| 173 |
+
Asistan yalnızca konuşma metni üretir.
|
| 174 |
+
|
| 175 |
+
## Engine Guard'lar (kod tarafı, fine-tune gerektirmez)
|
| 176 |
+
|
| 177 |
+
- **`TimeFabricationGuard`** — LLM saat uydurduğunda (kullanıcı saat vermedi) → saat sorma template'ı
|
| 178 |
+
- **`NotAlOverrideGuard`** — "not al" semantiği → saatsiz görev olarak işle
|
| 179 |
+
- **`MultiTurnConfirmationRecoveryGuard`** — Çok-turlu onay (CHAT veya SET_REMINDER+title null)
|
| 180 |
+
- **`ChatUpdateCancelRecoveryGuard`** — Multi-turn update/cancel + history-aware vazgeç
|
| 181 |
+
- **`P33 Disambiguation (task_id_resolver)`** — 2+ match'te kullanıcıya seçim listele
|
| 182 |
+
|
| 183 |
+
## v6N Tasarım Kararları
|
| 184 |
+
|
| 185 |
+
1. **JSON mimarisinin tamamen terk edilmesi:** v5.1'de LLM'in JSON üretemediği durumlar
|
| 186 |
+
(3B model "ecops", "turn", bozuk JSON) sıkça yaşanıyordu. v6N'da LLM sadece doğal dil
|
| 187 |
+
öğrendi — bu sorun kaynağında çözüldü.
|
| 188 |
+
2. **`_meta` artifact kaçağı olmaması:** Generation sırasında `intent`/`task_id` analiz için
|
| 189 |
+
`_meta`'da tutulur, ancak `final_train_qwen_v8_natural.jsonl`'e **yazılmaz**. Model bunları
|
| 190 |
+
öğrenmez.
|
| 191 |
+
3. **Senaryo 1.4 reply template sabit:** K2, K3, K10 reply'leri tek fonksiyondan üretilir
|
| 192 |
+
(`_reminder_reply()`), format drift riski yok.
|
| 193 |
+
4. **Senaryo 2/1.5 (not al) K16 eklendi:** Sprint 8 sim smoke'da tespit edilen "not al"
|
| 194 |
+
pattern'inin LLM'in doğal reply formatı eğitildi. NLPEngine NotAlOverrideGuard ile
|
| 195 |
+
mimari seviye fallback hâlâ aktif.
|
| 196 |
+
5. **Senaryo 1.3 (offset) K17 eklendi:** "30 dakika önce", "1 saat önce", "1 gün önce"
|
| 197 |
+
gibi spesifik sürelerin LLM doğal reply formatı.
|
| 198 |
+
6. **K9 sağlık senaryosu filter düzeltmesi:** Önceki `(t[0] in u2)` yaklaşımı "önümüzdeki
|
| 199 |
+
cuma 9'da" gibi ifadeleri bulamıyor, random fallback saat uyumsuzluğuna neden oluyordu.
|
| 200 |
+
Yeni manuel eşleme (`_HEALTH_TIME_MAP`).
|
| 201 |
+
7. **11:30 / 12:30 tokenizasyon varyasyonları:** "saat 12 30 dk önce hatırlat" gibi
|
| 202 |
+
STT/parse sorunlarına doğrudan eğitim verisi ile müdahale.
|
| 203 |
+
8. **packing=True (Unsloth):** v7_natural'da `packing=False` idi, eğitim hızı düşüktü.
|
| 204 |
+
v6N'da Unsloth performans önerisiyle `True`.
|
| 205 |
+
9. **TRL `DataCollatorForCompletionOnlyLM` (built-in):** Custom collator sınıfı kaldırıldı,
|
| 206 |
+
TRL'in built-in maskeleme mekanizması kullanılıyor (daha az özel kod, aynı işlevsellik).
|
| 207 |
+
|
| 208 |
+
## Sınırlamalar
|
| 209 |
|
| 210 |
+
**Kapsam dışı istekler** (model bunlara doğal CHAT yanıtı verir):
|
| 211 |
+
yemek siparişi, web arama, hava durumu, müzik, e-posta, çeviri, taksi, telefon, SMS, haber,
|
| 212 |
+
alışveriş (kendi market listesi hariç), banka, sosyal medya, video, borsa, kripto, matematik,
|
| 213 |
+
tarif, kamera, şarkı sözü, bilet, döviz, şaka, akıllı ev, hikaye yazma.
|
| 214 |
+
|
| 215 |
+
**STT gürbüzlüğü:** Eğitim verisinde SMS kısaltmaları (`yrn`, `sbh`, `aksm`), Türkçe
|
| 216 |
+
karakter düşmeleri (`hastane`→`hastne`, `yarın`→`yrn`), sesli harf kayıpları
|
| 217 |
+
(`dişçi`→`diş`), devrik cümle, birleşik kelime (`kanka`, `hocm`), aşırı kısaltma
|
| 218 |
+
(`slm`, `tmm`) için 40 örnek vardır (KISIM 10).
|
| 219 |
+
|
| 220 |
+
**Negation tespiti:** "Vazgeçtim", "istemiyorum", "yapma", "iptal", "gerek yok", "bırak"
|
| 221 |
+
gibi 30+ diyalogla (KISIM 6) eğitildi; model bunları kalıcı olarak CHAT'e yönlendirir
|
| 222 |
+
ve yeni SET_REMINDER üretmez.
|
| 223 |
+
|
| 224 |
+
**Context:** 1024 token (eğitim) / 2048 token (iOS runtime). Multi-turn diyalogda 5+ tur
|
| 225 |
+
geçince eski bağlam düşebilir — KISIM 9 (karma 5-8 turlu diyaloglar) bu duruma karşı
|
| 226 |
+
eğitildi. Runtime tarafında RAG injection ile aktif görev listesi prompt'a enjekte edilir.
|
| 227 |
|
| 228 |
## Donanım Doğrulamaları (Mobile)
|
| 229 |
|
|
|
|
| 232 |
| POCO X4 GT (Dimensity 8100) | CPU | 2 | 768 | ~6s | ~3 GB (8 GB cihazda rahat) |
|
| 233 |
| iPhone 17 Pro (M3 Max sim) | CPU | 6 | 2048 | <2s | ~2.5 GB unified memory |
|
| 234 |
|
| 235 |
+
Vulkan backend Dimensity 8100 Android 14'te `ggml_backend_alloc_ctx_tensors_from_buft`
|
| 236 |
+
SIGSEGV hatası veriyor (driver coopmat bug). OpenCL llama-cpp-dart 0.6.15'te implemente
|
| 237 |
+
edilmiyor. NPU (APU 580) için llama.cpp backend'i yok.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 238 |
|
| 239 |
## Lisans
|
| 240 |
|
|
|
|
| 243 |
## Atıf
|
| 244 |
|
| 245 |
```
|
| 246 |
+
@misc{mira-turkish-assistant-v6n-2026,
|
| 247 |
author = {Algoritma Turk},
|
| 248 |
+
title = {Mira Turkish Assistant v6N (Natural): Qwen2.5-3B Fine-tuned with Natural-Language SFT for Turkish Personal Assistant Tasks},
|
| 249 |
year = {2026},
|
| 250 |
publisher = {Hugging Face},
|
| 251 |
url = {https://huggingface.co/AlienTurk/Turkish-Asistant-gguf}
|
|
|
|
| 257 |
- **Base model:** https://huggingface.co/Qwen/Qwen2.5-3B-Instruct
|
| 258 |
- **Quantized GGUF:** https://huggingface.co/AlienTurk/Turkish-Asistant-gguf
|
| 259 |
- **Fine-tune framework:** [Unsloth](https://github.com/unslothai/unsloth)
|
| 260 |
+
- **Mobil uygulama (runtime):** Hybrid NLP Engine mimarisi
|