Skip to content

Releases: DolbyDAX2/LlamaTray

v1.1.3 - Stability Refactor & Crash Prevention Update

13 Jun 05:03

Choose a tag to compare

🌐 v1.1.3 Release Notes / Sürüm Notları

🇬🇧 English

v1.1.3 - Stability Refactor & Crash Prevention Update

This update is a comprehensive stability and code quality release, derived from three independent code review reports. It focuses on eliminating crash risks, memory leaks, performance bottlenecks, and security vulnerabilities without changing any UI functionality.

Critical Fixes:

  • Unified _tray_instance Architecture: Resolved a critical global variable conflict where _tray_instance was defined in two places (ui.py and ui_utils.py) with different references, causing cleanup_tray_icon() and cleanup_on_exit() to silently fail. Now a single centralized reference in ui_utils.py is used, ensuring reliable tray icon and server process cleanup on application exit or crash.
  • Removed Fragile sys.modules Access: Eliminated all race-condition-prone dynamic module lookups via sys.modules['LlamaTray.ui'] in cleanup_tray_icon(), cleanup_on_exit(), and AboutDialog. All components now use the centralized ui_utils._tray_instance reference directly.
  • Duplicate Cleanup Registration Prevented: Removed the duplicate atexit.register(cleanup_on_exit) mechanism. Cleanup is now handled exclusively through the Qt aboutToQuit signal, preventing double-execution and potential crashes.
  • closeEvent NoneType Crash Prevention: Added callable(original_close_event) check and safe QMainWindow.closeEvent(self.window, event) delegation to prevent TypeError: 'NoneType' object is not callable crashes when closing the window.
  • QComboBox Validator Fix: Fixed QComboBox.setValidator() which silently fails in PyQt6. Now correctly uses self.context_size_combobox.lineEdit().setValidator(QIntValidator(512, 1000000)) to properly validate context size input.

Server Process Management Hardening:

  • Shell Injection Prevention: Replaced ["bash", "-c", f"lsof -ti:{port} | xargs kill -9"] with safe list-based subprocess.run(["lsof", "-ti", str(port)]) calls, eliminating shell injection risk.
  • Graceful Process Termination: Port cleanup now sends SIGTERM first, polls for port release with 0.5s intervals (up to 3 seconds), and only falls back to SIGKILL if the process doesn't respond gracefully.
  • find_llama_server() Caching: Results of shutil.which("llama-server") are now cached at module level, eliminating redundant which lookups in start_server().

Performance Optimizations:

  • Non-blocking CPU Monitoring: Changed psutil.cpu_percent(interval=0.1) to interval=0, removing the 100ms UI thread blockage that occurred every second during system monitor updates.
  • NVML Resource Leak Fix: Added pynvml.nvmlShutdown() call in SystemMonitor.__del__() and a dedicated _shutdown_gpu() method, preventing NVIDIA driver resource leaks on application exit.

Desktop Environment Compatibility:

  • Dynamic QT Theme Detection: Replaced hardcoded os.environ["QT_QPA_PLATFORM_THEME"] = "kde" with dynamic detection using XDG_CURRENT_DESKTOP. Now correctly sets the theme for KDE, GNOME, or falls back to Qt defaults for other environments (XFCE, i3, Sway, etc.).

Code Quality Cleanup:

  • Removed Unused Imports: Cleaned up unused import json and import os in profile_manager.py.
  • Version Bump: All version strings updated to v1.1.3.

🇹🇷 Türkçe

v1.1.3 - Kararlılık Refactoring ve Çökme Önleme Güncellemesi

Bu güncelleme, üç bağımsız kod inceleme raporundan elde edilen bulgular doğrultusunda hazırlanmış kapsamlı bir kararlılık ve kod kalitesi sürümüdür. Herhangi bir UI işlevselliğini değiştirmeden çökme risklerini, bellek sızıntılarını, performans darboğazlarını ve güvenlik açıklarını ortadan kaldırmaya odaklanır.

Kritik Düzeltmeler:

  • Birleşik _tray_instance Mimarisi: _tray_instance değişkeninin iki ayrı yerde (ui.py ve ui_utils.py) farklı referanslarla tanımlanmasından kaynaklanan kritik global değişken çakışması giderildi. Artık ui_utils.py'deki tek bir merkezi referans kullanılarak, uygulama kapanışında veya çökmesinde tepsi ikonu ve sunucu sürecinin güvenilir şekilde temizlenmesi sağlanıyor.
  • Kırılgan sys.modules Erişimi Kaldırıldı: cleanup_tray_icon(), cleanup_on_exit() ve AboutDialog içindeki race-condition riskli tüm dinamik modül okumaları (sys.modules['LlamaTray.ui']) temizlendi. Tüm bileşenler artık doğrudan merkezi ui_utils._tray_instance referansını kullanıyor.
  • Çifte Temizlik Kaydı Önlendi: Yinelenen atexit.register(cleanup_on_exit) mekanizması kaldırıldı. Temizlik artık yalnızca Qt aboutToQuit sinyali ile yönetilerek çift çalıştırma ve olası çökmeler önleniyor.
  • closeEvent NoneType Çökme Önleme: Pencere kapatılırken TypeError: 'NoneType' object is not callable hatasıyla çökmeyi önlemek için callable(original_close_event) kontrolü ve güvenli QMainWindow.closeEvent(self.window, event) delegasyonu eklendi.
  • QComboBox Validator Düzeltmesi: PyQt6'da sessizce başarısız olan QComboBox.setValidator() kullanımı düzeltildi. Artık self.context_size_combobox.lineEdit().setValidator(QIntValidator(512, 1000000)) ile context size girişi doğru şekilde doğrulanıyor.

Sunucu Süreç Yönetimi Güçlendirmesi:

  • Shell Injection Önlemi: ["bash", "-c", f"lsof -ti:{port} | xargs kill -9"] yapısı güvenli liste tabanlı subprocess.run(["lsof", "-ti", str(port)]) çağrılarıyla değiştirilerek shell injection riski tamamen ortadan kaldırıldı.
  • Kademeli Süreç Sonlandırma: Port temizliği artık önce SIGTERM gönderiyor, 0.5 saniye aralıklarla portun boşalmasını poll ediyor (maksimum 3 saniye) ve sadece süreç yanıt vermezse SIGKILL aşamasına geçiyor.
  • find_llama_server() Önbellekleme: shutil.which("llama-server") sonucu modül seviyesinde önbelleğe alınarak start_server() içindeki gereksiz ikincil which aramaları ortadan kaldırıldı.

Performans İyileştirmeleri:

  • Bloke Etmeyen CPU İzleme: psutil.cpu_percent(interval=0.1) değeri interval=0 olarak değiştirilerek sistem monitörü güncellemeleri sırasında her saniye yaşanan 100ms'lik UI thread blokajı kaldırıldı.
  • NVML Kaynak Sızıntısı Düzeltmesi: SystemMonitor.__del__() içine pynvml.nvmlShutdown() çağrısı ve özel _shutdown_gpu() metodu eklenerek uygulama kapanışında NVIDIA sürücü kaynak sızıntısı önlendi.

Masaüstü Ortamı Uyumluluğu:

  • Dinamik QT Tema Algılama: Sabit os.environ["QT_QPA_PLATFORM_THEME"] = "kde" satırı, XDG_CURRENT_DESKTOP değişkenini kullanan dinamik algılama ile değiştirildi. Artık KDE, GNOME için doğru tema ayarlanıyor, diğer ortamlarda (XFCE, i3, Sway vb.) Qt varsayılanları kullanılıyor.

Kod Kalitesi Temizliği:

  • Kullanılmayan Import'lar Temizlendi: profile_manager.py'deki kullanılmayan import json ve import os satırları kaldırıldı.
  • Sürüm Güncellemesi: Tüm sürüm bilgileri v1.1.3 olarak güncellendi.

Full Changelog: v1.1.2...v1.1.3

v1.1.2 - Bug Fix, Cleanup & Language Compliance Update

02 Jun 00:01

Choose a tag to compare

🌐 v1.1.2 Release Notes / Sürüm Notları

🇬🇧 English

v1.1.2 - Bug Fix, Cleanup & Language Compliance Update

This update focuses on fixing critical application bugs, removing dead code, improving language consistency, and enhancing the hardware monitoring display.

What's New & Bug Fixes:

  • Critical Bug Fixes: Resolved the non-functional cleanup_tray_icon() and cleanup_on_exit() methods by fixing incorrect instance access, ensuring reliable tray icon and server cleanup on exit. Fixed model_path being silently reset after configuration load, allowing immediate server start without re-selecting the model file.
  • Language Compliance: Fixed the system monitor widget labels to properly respect the selected language at runtime, eliminating hardcoded Turkish strings that persisted even after switching to English.
  • Enhanced Monitoring Display: RAM and VRAM usages now show precise Gigabyte values alongside percentage progress bars, providing clearer resource insight.
  • Process Management Hardening: Removed the aggressive killall -9 llama-server call to prevent unintended termination of other system processes. Eliminated redundant os.kill calls in the cleanup flow.
  • Codebase Cleanup: Removed 323 lines of dead code (base_widget.py, main_window.py), duplicate icon files, unused imports (ctypes, signal, atexit), and a dead conditional block in the logging method for improved maintainability.
  • Dependencies & Warnings: Updated requirements from deprecated pynvml to nvidia-ml-py and suppressed related FutureWarning messages for a cleaner console output.

🇹🇷 Türkçe

v1.1.2 - Hata Düzeltme, Temizlik ve Dil Uyumluluğu Güncellemesi

Bu güncelleme, kritik uygulama hatalarını gidererek, ölü kodları temizleyerek, dil tutarlılığını iyileştirerek ve donanım izleme görüntüsünü geliştirerek uygulamayı daha kararlı ve kullanıcı dostu hale getirmektedir.

Yenilikler ve Hata Düzeltmeleri:

  • Kritik Hata Düzeltmeleri: Çalışmayan cleanup_tray_icon() ve cleanup_on_exit() metodları yanlış instance erişimi düzeltilerek onarıldı; böylece uygulama kapanışında tepsi ikonu ve sunucu süreci güvenilir şekilde temizleniyor. Yapılandırma yüklemesinden sonra model_path değerinin sessizce sıfırlanması sorunu giderildi; böylece uygulama yeniden başlatıldığında model dosyasını yeniden seçmeye gerek kalmadan doğrudan sunucu başlatılabiliyor.
  • Dil Uyumluluğu: Sistem monitörü bileşenindeki etiketlerin seçili dili çalışma anında doğru şekilde yansıtması sağlandı; İngilizce'ye geçildiğinde bile görünen Türkçe sabit metinler sorunu tamamen giderildi.
  • Gelişmiş İzleme Görünümü: RAM ve VRAM kullanımları artık yüzde çubuklarının yanında Gigabyte cinsinden hassas değerlerle gösterilerek daha net kaynak bilgisi sunuyor.
  • Süreç Yönetimi Güçlendirmesi: Diğer sistem süreçlerini yanlışlıkla sonlandırmayı önlemek için agresif killall -9 llama-server çağrısı kaldırıldı. Temizlik akışındaki gereksiz os.kill çağrıları da elimine edildi.
  • Kod Tabanı Temizliği: 323 satır ölü kod (base_widget.py, main_window.py), yinelenen ikon dosyaları, kullanılmayan import'lar (ctypes, signal, atexit) ve log metodundaki ölü koşul bloğu temizlenerek bakım kolaylığı artırıldı.
  • Bağımlılıklar ve Uyarılar: Bağımlılıklar güncellenerek kullanım dışı pynvml paketi yerine nvidia-ml-py eklendi ve ilişkili FutureWarning mesajları bastırılarak daha temiz bir konsol çıktısı sağlandı.

Full Changelog: v1.1.1...v1.1.2

v1.1.1 - System Stability and Security Update

28 May 19:41

Choose a tag to compare

🌐 v1.1.1 Release Notes / Sürüm Notları

🇬🇧 English

v1.1.1 - System Stability and Security Update

This update significantly improves application robustness and security by addressing critical process management vulnerabilities, enhancing hardware monitoring, and optimizing code structure.

What's New & Bug Fixes:

  • Security Enhancements: Fixed a shell injection vulnerability by eliminating shell=True in subprocess calls and added input overflow protection for context sizes.
  • AMD GPU & VRAM Monitoring: Introduced precise VRAM tracking for AMD hardware via direct file checks (mem_info_vram_used), moving away from generic assumptions.
  • Robust Process Management: Implemented PID-based zombie process prevention to ensure that process termination only affects intended instances, improving overall system stability.
  • Exception Handling & Codebase Optimization: Enhanced error logging for hardware monitoring and refactored the UI components into a base class (ResourceMonitorBase) to reduce code duplication and improve maintainability.

🇹🇷 Türkçe

v1.1.1 - Sistem Kararlılığı ve Güvenlik Güncellemesi

Bu güncelleme; kritik süreç yönetimi açıklarını kapatarak, donanım izleme mekanizmalarını güçlendirerek ve kod yapısını optimize ederek uygulamanın kararlılığını ve güvenliğini önemli ölçüde artırmaktadır.

Yenilikler ve Hata Düzeltmeleri:

  • Güvenlik İyileştirmeleri: shell=True kullanımı kaldırılarak shell injection güvenlik açığı kapatıldı ve bağlam (context) boyutu için girdi taşma koruması eklendi.
  • AMD GPU ve VRAM İzleme: AMD donanımları için varsayımlar yerine doğrudan dosya kontrolü (mem_info_vram_used) kullanan hassas VRAM takip yöntemi getirildi.
  • Güçlü Süreç Yönetimi: PID tabanlı zombi süreç engelleme mekanizması uygulandı; böylece süreç sonlandırma işlemlerinin sadece hedeflenen instance'ı etkilemesi sağlanarak sistem kararlılığı artırıldı.
  • Hata Yönetimi ve Kod Optimizasyonu: Donanım izleme için detaylı hata günlükleri eklendi ve kod tekrarını azaltmak adına UI bileşenleri bir temel sınıfa (ResourceMonitorBase) taşınarak sürdürülebilirlik iyileştirildi.

Full Changelog: v1.1.0...v1.1.1

v1.1.0 - Multilingual Support & Code Architecture Refactoring

25 May 15:08

Choose a tag to compare

🌐 v1.1.0 Release Notes / Sürüm Notları

🇬🇧 English

v1.1.0 - Multilingual Support & Code Architecture Refactoring

This major release introduces full English language support, a completely restructured modular codebase, and critical UI/UX improvements based on extensive code analysis.

What's New & Bug Fixes:

  • Full English Language Support: The entire application interface, configuration settings, log outputs, and notifications have been fully translated into English to provide global usability.

  • Code Architecture Refactoring (Modular UI): Decoupled the monolytic ui.py file into separate, logical modules (tabs, widgets, dialogs). Functions and business logic are kept fully intact, drastically improving code maintainability.

  • Smart Profile Verification: Added verification to check if any configuration changes were actually made before allowing a profile update, preventing accidental duplicate rewrites.

🇹🇷 Türkçe

v1.1.0 - Çok Dilli Dil Desteği ve Kod Mimarisi Yenilenmesi

Bu majör sürüm; tam İngilizce dil desteğini, tamamen yeniden yapılandırılmış modüler bir kod tabanını ve kapsamlı kod analizine dayalı kritik UI/UX iyileştirmelerini içermektedir.

Yenilikler ve Hata Düzeltmeleri:

  • Tam İngilizce Dil Desteği: Uygulama arayüzü, yapılandırma ayarları, log çıktıları ve bildirimlerin tamamı, küresel kullanılabilirlik sağlamak amacıyla tamamen İngilizceye çevrildi.

  • Kod Mimarisi Yenilenmesi (Modüler Arayüz): Tek parça halindeki devasa ui.py dosyası; mantıksal alt modüllere (tabs, widgets, dialogs) bölündü. Fonksiyon bütünlüğü korunarak kodun bakımı ve geliştirilebilirliği ciddi oranda artırıldı.

  • Akıllı Profil Doğrulaması: Profil güncelleme işlemi öncesine aktif değişiklik kontrolü eklendi; böylece ekranda hiçbir değişiklik yapılmadıysa profilin gereksiz yere tekrar yazılması engellendi.

Full Changelog: v1.0.2...v1.1.0

v1.0.2 - Profile Management Improvements

24 May 22:48

Choose a tag to compare

🌐 v1.0.2 Release Notes / Sürüm Notları

🇬🇧 English

v1.0.2 - Profile Management Improvements

This release focuses on profile management improvements and user experience enhancements for better control over your LLM server configurations.

What's New & Bug Fixes:

  • Disable Automatic Config Update on Model Selection: Fixed an issue where selecting a different model while a profile was active would automatically update the config, potentially corrupting profiles during model switching. Model selection no longer triggers automatic config updates.

  • "Update Profile" Button Added: A new "🔄 Update Profile" button has been added between the "Save Profile" and "Delete Profile" buttons. This button allows you to update the currently selected profile with the current form values displayed on the screen.

  • Profile-Specific Context Size Support: The context size combobox now properly shows profile-specific custom values (e.g., 128000) when loading profiles, while still maintaining the predefined options list (16384, 32768, 65536, 131072, 262144).


🇹🇷 Türkçe

v1.0.2 - Profil Yönetimi İyileştirmeleri

Bu sürüm, LLM sunucu yapılandırmalarınız için daha iyi kontrol sağlayacak profil yönetimi iyileştirmelerine ve kullanıcı deneyimi geliştirmelerine odaklanmaktadır.

Yenilikler ve Hata Düzeltmeleri:

  • Model Seçiminde Otomatik Config Güncellemesinin Devre Dışı Bırakılması: Aktif bir profil seçiliyken farklı bir model seçildiğinde, config'in otomatik olarak güncellenmesi sorunu düzeltildi. Bu durum model değiştirme sırasında profillerin bozulmasına yol açıyordu. Artık model seçimi otomatik config güncellemesini tetiklemiyor.

  • "Profili Güncelle" Butonu Eklendi: "💾 Profili Kaydet" ve "🗑 Profili Sil" butonları arasına yeni bir "🔄 Profili Güncelle" butonu eklendi. Bu buton, ekranda görünen mevcut değerlerle seçili profili güncellemenizi sağlar.

  • Profil-Spesifik Context Boyutu Desteği: Context boyutu combobox'ı artık profilleri yüklerken profil-spesifik custom değerleri (örn: 128000) doğru şekilde gösteriyor, aynı zamanda hazır seçenekler listesini (16384, 32768, 65536, 131072, 262144) de koruyor.

Full Changelog: v1.0.1...v1.0.2

v1.0.1 - Thread-Safety Hotfix

22 May 19:03

Choose a tag to compare

🌐 v1.0.1 Release Notes / Sürüm Notları

🇬🇧 English

v1.0.1 - Thread-Safety Hotfix

This release focuses on critical stability improvements on Linux systems (Arch Linux / CachyOS).

What's New & Bug Fixes:

  • Thread-Safe Logging Implemented: Fixed a critical issue where background server logs directly modified UI components outside the Main UI Thread, which previously risked random application crashes or segmentation faults. Appending logs to QTextEdit is now completely thread-safe.

🇹🇷 Türkçe

v1.0.1 - Thread-Safe Loglama Yaması

Bu sürüm, Linux (Arch Linux / CachyOS) sistemleri üzerinde kritik kararlılık iyileştirmelerine odaklanmaktadır.

Yenilikler ve Hata Düzeltmeleri:

  • Thread-Safe Loglama Altyapısı: Arka plandaki sunucu loglarının, Ana UI İş Parçacığı (Main UI Thread) dışından arayüz bileşenlerine doğrudan müdahale etmesiyle oluşan ve uygulamanın rastgele çökmesine (Segmentation Fault) yol açabilen kritik hata düzeltildi. Logların QTextEdit'e yazılması tamamen güvenli hale getirildi.

Full Changelog: v1.0.0...v1.0.1

LlamaTray v1.0.0

22 May 03:20

Choose a tag to compare

LlamaTray v1.0.0 — Initial Stable Release 🦙

English | Türkçe


English

PyQt6 based Llama.cpp (llama-server) Tray Manager for Linux (Arch Linux / CachyOS).

✨ Features

  • Effortless Server Management: Start/stop llama-server with a single click
  • Zombie Process Prevention: Automatic cleanup on close or crash
  • Real-Time Monitoring: CPU, RAM, GPU, VRAM tracking (1s refresh)
  • Profile Management: Save/load/delete named configurations
  • Advanced Configuration: GPU layers, context size, port, extra params
  • Web UI Integration: One-click to open llama.cpp web interface
  • Persistent Settings: Auto-saved to ~/.llamatray/
  • GPU Agnostic: NVIDIA (pynvml), AMD (rocm-smi), integrated GPUs
  • Native Linux: Wayland & KDE Plasma support

📦 Arch Linux Package

sudo pacman -U llamatray-1.0.0-1-any.pkg.tar.zst
LlamaTray

Türkçe

Linux için PyQt6 tabanlı Llama.cpp (llama-server) Tepsi Yöneticisi.

✨ Özellikler

  • Kolay Sunucu Yönetimi: llama-server'ı tek tıkla başlatın/durdurun
  • Zombi Süreç Koruması: Kapatma veya çökme durumunda otomatik temizlik
  • Gerçek Zamanlı İzleme: CPU, RAM, GPU, VRAM takibi (1sn aralık)
  • Profil Yönetimi: İsimli yapılandırmaları kaydedin/yükleyin/silin
  • Gelişmiş Yapılandırma: GPU katmanları, context boyutu, port, ek parametreler
  • Web UI Entegrasyonu: Tek tıkla llama.cpp web arayüzünü açın
  • Kalıcı Ayarlar: ~/.llamatray/ dizinine otomatik kayıt
  • GPU Bağımsız: NVIDIA (pynvml), AMD (rocm-smi), tümleşik GPU'lar
  • Yerel Linux: Wayland & KDE Plasma desteği

📦 Arch Linux Paketi

sudo pacman -U llamatray-1.0.0-1-any.pkg.tar.zst
LlamaTray

🔗 Links / Bağlantılar