Melodi, Windows üzerinde çalışan Türkçe sesli ve yazılı kişisel asistandır. Gemini ile doğal dil işleme yapar; mikrofon, seslendirme, kalıcı hafıza, yapılacaklar listesi, takvim ve güvenli uygulama açma araçlarını tek bir masaüstü arayüzünde birleştirir.
- Türkçe sesli komut algılama
- Yazılı sohbet desteği
- Gemini tool-calling altyapısı
- Duruma göre renk ve hareket değiştiren animasyonlu orb
- Edge TTS ile Türkçe sesli yanıt
- Kalıcı kullanıcı hafızası
- Tarihli veya tarihsiz yapılacaklar listesi
- Takvim etkinlikleri ve yaklaşan plan görünümü
- Kalıcı hızlı not alanı
- Canlı CPU, RAM ve disk göstergeleri
- Hafızadaki şehre göre hava durumu
- TCMB'den ücretsiz ve tarihli döviz kurları
- Hava, takvim ve görevleri birleştiren günlük “Günaydın” özeti
- Ayarlardan özelleştirilebilen Günaydın bölümleri ve kelime/cümle tetiklemeli özel rutinler
- Bilinmeyen veya ücretli modele geçişi engelleyen ücretsiz mod koruması
- Canlı internet bağlantısı ve mikrofon kullanılabilirlik göstergeleri
- Ctrl + Space genel mikrofon kısayolu ve güvenli dinleme iptali
- İsteğe bağlı sürekli dinleme
- Kaynak bağlantılı yerel Markdown araştırma raporları
- YouTube ve Spotify araması
- Trendyol'da ürün araması
- Türkçe Wikipedia'dan kaynaklı kısa bilgi ve isteğe bağlı sayfa açma
- Güvenli whitelist üzerinden Windows uygulaması açma
- Hareketli sistem tepsisi ikonu
- Pencereyi tray'e gizleme ve geri açma
- Windows 10 veya Windows 11
- Python 3.11 veya üzeri
- Mikrofon ve ses çıkışı
- İnternet bağlantısı
- Gemini API anahtarı
Projeyi klonlayın:
git clone https://github.com/EgeGermen/Melodi.git
cd MelodiSanal ortam oluşturup etkinleştirin:
py -m venv .venv
.\.venv\Scripts\Activate.ps1Bağımlılıkları yükleyin:
py -m pip install -r requirements.txtTest araçlarını da yüklemek için:
py -m pip install -r requirements-dev.txt.env.example dosyasını .env adıyla kopyalayın:
Copy-Item .env.example .envArdından .env içine Gemini API anahtarınızı yazın:
GEMINI_API_KEY=your_gemini_api_key_herepy main.pyUygulama açılırken mikrofon, ortam gürültüsünü yaklaşık bir saniye ölçer.
Ardından mikrofon düğmesiyle sesli komut verebilir veya sağ paneldeki alana
mesaj yazabilirsiniz. Melodi arka plandayken Ctrl + Space ile dinlemeyi
başlatabilirsiniz. Dinleme sırasında aynı kısayola veya mikrofon düğmesine
tekrar basmak isteği iptal eder ve algılanan komut işlenmez.
- “Bugün hava nasıl?”
- “Yarın saat 14.00 için diş hekimi etkinliği ekle.”
- “Ekmek almayı yapılacaklara ekle.”
- “Yapılacaklar listemde ne var?”
- “Not defterini aç.”
- “YouTube'da Barış Manço ara.”
- “Spotify'da Sezen Aksu ara.”
- “Ben Antalya'da yaşıyorum.”
- “Günaydın.”
Özel rutinler Ayarlar ekranında her satıra
tetikleyici = adım; adım biçiminde eklenebilir. Örneğin:
işe başlıyorum = görevleri listele; Spotify'ı aç
Rutin yalnız tetikleyici cümle tam olarak söylendiğinde çalışır.
Arayüz üç ana bölümden oluşur:
- Sol panel: Saat, hava durumu, sistem kullanımı, günlük plan ve hızlı not
- Orta panel: Animasyonlu orb, asistan durumu, anlaşılan komut ve mikrofon
- Sağ panel: Kaydırılabilir sohbet geçmişi ve yazılı mesaj alanı
Orb uygulamanın durumunu otomatik gösterir:
| Durum | Renk | Anlam |
|---|---|---|
| Bekliyor | Mor | Yeni komuta hazır |
| Dinliyor | Yeşil | Mikrofon kullanıcıyı dinliyor |
| Düşünüyor | Sarı | Gemini isteği işliyor |
| Konuşuyor | Mavi | Melodi yanıtı seslendiriyor |
main.py
├── config/
│ ├── app_preferences.py
│ ├── secret_store.py
│ └── settings.py
├── core/
│ ├── agent.py
│ ├── app_paths.py
│ ├── data_migration.py
│ └── tool_registry.py
├── tools/
│ ├── todo_tools.py
│ ├── calendar_tools.py
│ ├── weather_tool.py
│ ├── open_app_tool.py
│ └── ...
├── storage/
│ ├── memory_store.py
│ ├── todo_store.py
│ ├── calendar_store.py
│ └── quick_note_store.py
├── speech/
│ ├── listener.py
│ └── speaker.py
└── ui/
├── app.py
├── animated_orb.py
├── chat_view.py
├── quick_note.py
├── system_stats.py
└── theme.py
Tkinter ana thread'i yalnızca arayüzü günceller. Mikrofon, Gemini ve seslendirme işlemleri ayrı worker thread'inde sırayla çalışır. Worker ile arayüz arasındaki iletişim thread-safe kuyruklar üzerinden yapılır.
Uygulama açma aracı yalnızca tools/open_app_tool.py içindeki whitelist'te
tanımlı programları çalıştırır. Kullanıcı girdisi doğrudan shell komutu olarak
çalıştırılmaz.
Kalıcı kullanıcı verileri kaynak koddan ayrı tutulur:
%LOCALAPPDATA%\Melodi\
├── data\ # Ayarlar, hafıza, görevler, takvim ve hızlı not
├── logs\ # Dönen uygulama günlükleri
├── cache\ # Yeniden üretilebilen geçici dosyalar
└── secrets.dat # Windows DPAPI ile şifrelenmiş Gemini API anahtarı
Araştırma raporları kullanıcının kolayca bulabilmesi için
Belgeler\Melodi\Raporlar klasöründe oluşturulur. Eski storage/ JSON
dosyaları ve proje içindeki Markdown raporları ilk çalıştırmada, yeni hedefte
aynı dosya yoksa güvenli biçimde kopyalanır; kaynak dosyalar silinmez.
Gemini API anahtarı paketlenmiş kullanımda Windows DPAPI ile mevcut Windows
kullanıcısına özel olarak şifrelenir. Geliştirme ortamındaki .env desteği
geri dönüş seçeneği olarak korunur ve .gitignore ile Git dışında bırakılır.
Hızlı notlar agent hafızasından ayrı saklanır; not içeriği Gemini sistem promptuna eklenmez.
Tüm testleri çalıştırmak için:
py -m pytest tests/ -vMevcut test paketi storage sınıflarını, araçları, tool registry'yi ve önemli regresyon senaryolarını kapsar.
Dashboard'u gerçek mikrofon ve Gemini akışını başlatmadan görüntülemek için:
py -m ui.dashboard_skeleton_preview- Gemini Live API ile gerçek zamanlı ses akışı
- Melodi konuşurken araya girebilme
- Daha düşük sesli yanıt gecikmesi
- Gelişmiş ses seviyesi görselleştirmesi
Ege Germen