RK
Projects
On-device AI · Local RAG · Model Benchmarking

MERGEN AI

On-device inferenceLocal RAGAndroid / Native C++Model benchmarks

Mergen AI, yapay zekâ modelini bir sunucunun arkasına koymak yerine inference, retrieval ve performans ölçümünü doğrudan cihaz üzerinde çalıştırmaya odaklanan bir mobil AI sistemi. Android tarafındaki runtime Flutter arayüzünden Kotlin ve JNI üzerinden native C++ katmanına, oradan llama.cpp/GGML tabanlı model çalıştırmaya uzanıyor.

Amaç yalnızca “telefonda model çalıştırmak” değil; modelin gerçekten kullanılabilir olup olmadığını gecikme, bellek, kuantizasyon ve retrieval davranışıyla birlikte ölçmek.

Mobil inference tarafında Android cihaz üzerinde Qwen3 4B Q4_K_M GGUF modeli için native çalışma hattı kuruldu. UI ile model runtime’ı arasında Flutter → Kotlin MethodChannel → JNI → C++ → llama.cpp/GGML zinciri kullanılıyor; model yaşam döngüsü init, generate ve dispose sınırlarıyla yönetiliyor.

Mergen’in diğer önemli tarafı cihaz-local RAG ve benchmark yaklaşımı. Farklı model/kuantizasyon seçenekleri yalnız “çalışıyor” diye değerlendirilmek yerine üretim gecikmesi, bellek tüketimi ve cihaz üzerindeki davranışlarıyla kıyaslanıyor. Ayrı Windows prototipinde Phi-4 Mini ONNX INT4 ve ONNX Runtime GenAI ile farklı runtime yaklaşımı da test edildi.

01 / Inference

Model cihazın üzerinde çalışır.

Ana üretim hattı Android ARM64 üzerinde native inference’a dayanır; sunucu round-trip’i sistemin zorunlu parçası değildir.

02 / Local RAG

Retrieval da cihaz-local tasarlanır.

Uygulama yalnız temel LLM inference değil, cihaz üzerinde çalışan RAG altyapısını da aynı ürün sınırında ele alır.

03 / Native Bridge

UI ile runtime katmanları ayrıdır.

Flutter arayüzü Kotlin MethodChannel üzerinden Android katmanına, JNI üzerinden de C++ model runtime’ına bağlanır.

04 / Benchmarks

Model seçimi ölçümle yapılır.

Gecikme, bellek kullanımı ve kuantizasyon farklılıkları cihaz üzerinde karşılaştırılarak donanıma uygun çalışma noktası aranır.

05 / Offline

Release yolu ağ bağımlılığını azaltır.

Release manifestinde internet izni bulunmayan akış, uygulamanın temel inference davranışını cihaz içinde tutma hedefiyle uyumludur.

06 / Portability

Tek runtime deneyiyle sınırlı kalmaz.

Android llama.cpp hattına ek olarak Windows tarafında ONNX Runtime GenAI tabanlı ayrı prototip, model/runtime alternatiflerini kıyaslamak için kullanıldı.

Kullanıcı arayüzündeki bir üretim isteği, UI thread’inden native modele kadar açık sınırlarla ilerliyor.

01
UI isteğiFlutter tarafında kullanıcı girdisi hazırlanır ve native çağrı başlatılır.
02
Android bridgeMethodChannel isteği Kotlin katmanına taşır.
03
JNI boundaryKotlin, JNI üzerinden native C++ API’sine geçer.
04
Model runtimellama.cpp/GGML context’i tokenize/decode döngüsünü yürütür.
05
Üretim + ölçümToken üretimi sırasında timing bilgileri ve runtime davranışı gözlemlenir.
06
TemizlikSpecial-token cleanup ve dispose ile kullanıcı çıktısı ve native kaynak yaşam döngüsü tamamlanır.

Mergen’in model tarafı “en büyük modeli koy” yaklaşımından çok, cihazın sınırları içinde en iyi çalışan kombinasyonu bulmaya odaklanıyor.

Qwen3 4B Q4_K_M

Android hattında GGUF formatlı, kuantize Qwen3 4B modeli cihaz-local inference için kullanılıyor.

ARM64 CPU route

Native runtime CPU ağırlıklı çalışıyor; GPU layer kullanımı kapalı tutulan yol cihaz uyumluluğu ve ölçülebilirlik açısından kontrollü bir baseline sağlıyor.

Latency / Memory

Benchmark yaklaşımı yalnız toplam cevap süresine değil, üretim gecikmesi ve bellek davranışına da bakıyor.

Windows evidence

Phi-4 Mini ONNX INT4 + ONNX Runtime GenAI prototipi, farklı model/runtime kombinasyonunu ayrı platformda karşılaştırma kanıtı sağlıyor.

Hastasına

İçeride ne oluyor?

Burada asıl mesele Flutter ekranı değil; managed mobil katman ile native model runtime’ı arasındaki yaşam döngüsü, bellek sınırı, thread güvenliği, token üretimi ve benchmark ölçümünün birbirini bozmadan çalışması.

runtime/android

Flutter → Kotlin → JNI → C++ sınırı

UI katmanı doğrudan llama.cpp’ye bağlanmıyor. MethodChannel Android platform katmanını, JNI ise native ABI sınırını oluşturuyor; böylece mobil lifecycle ile model lifecycle birbirinden ayrılabiliyor.

  • Flutter MethodChannel
  • Kotlin Android bridge
  • JNI native entry points
  • C++ runtime ownership
runtime/llama

Model init / generate / dispose

Native tarafta model ve context yaşam döngüsü açık init, generate ve dispose sınırlarıyla ele alınıyor. Bu ayrım, tekrar kullanım ve native kaynakların kontrollü bırakılması için kritik.

  • GGUF model load
  • Context initialization
  • Tokenize / decode loop
  • Explicit dispose
concurrency

Mutex ve çağrı güvenliği

Model runtime aynı native state üzerinde kontrolsüz paralel üretime bırakılmıyor. Mutex kullanımı, generate ve lifecycle çağrılarının yarış koşullarına girmesini engelleyen temel sınır.

  • Shared native state
  • Serialized critical sections
  • Lifecycle race prevention
  • Predictable generation path
generation

Tokenizasyon, decode ve çıktı temizliği

Prompt tokenizasyonundan decode döngüsüne ve special token temizliğine kadar kullanıcıya dönen metnin native runtime çıktısından ayrıştırılması gerekiyor.

  • Prompt tokenization
  • Incremental decode
  • EOS / special-token handling
  • User-facing text cleanup
benchmark

Ölçüm model seçiminin parçası

Model/kuantizasyon kararı sadece model boyutuna bakmıyor. Cihaz üzerindeki gecikme ve bellek ölçümleri runtime seçiminin parçası olarak tutuluyor.

  • Latency measurements
  • Memory observations
  • Quantization comparison
  • Device-fit evaluation
security/release

Offline-first release sınırı

Android release manifestinde internet izninin bulunmaması, inference hattının ağ erişimine ihtiyaç duymadan çalışması hedefini teknik olarak güçlendiriyor. Debug/profile internet erişimi Flutter geliştirme akışı için ayrı tutuluyor.

  • Release: no INTERNET permission
  • Debug/profile dev connectivity
  • Local inference boundary
  • No mandatory inference server
Runtime chain — sadeleştirilmişUI → platform → native → model
01 / UI
Flutter

Kullanıcı girdisi ve çıktı gösterimi mobil UI katmanında kalır.

02 / PLATFORM
Kotlin MethodChannel

Flutter ile Android platform API’si arasında mesaj sınırı oluşturur.

03 / ABI
JNI

Managed Android dünyası ile native C++ runtime arasında açık geçiş noktasıdır.

04 / RUNTIME
C++ + llama.cpp / GGML

Model/context sahipliği, tokenizasyon ve decode burada yürür.

05 / RETRIEVAL
Local RAG

Retrieval bağlamı cihaz-local inference akışına beslenir.

06 / EVIDENCE
Benchmarks

Latency, bellek ve kuantizasyon sonuçları model/runtime kararlarına geri beslenir.

AndroidNative inference hattı mevcut.

Flutter → Kotlin → JNI → C++ → llama.cpp zinciriyle cihaz-local model çalıştırma temeli kuruldu.

RAGYerel retrieval altyapısı proje kapsamında.

RAG akışı model inference ile birlikte cihaz-local kullanım hedefinin parçası.

BenchmarksModel/runtime kıyaslaması yapılıyor.

Kuantizasyon, gecikme ve bellek davranışı cihaz üzerinde ölçülerek alternatifler değerlendiriliyor.

Cross-platform evidenceWindows prototipi ayrı tutuluyor.

Phi-4 Mini ONNX INT4 + ONNX Runtime GenAI deneyi Android üretim hattından ayrı bir benchmark/prototip kanıtı.

Sonraki projePRCast