backend
Elysia Voice Assistant
Asisten suara speech-to-speech yang mengutamakan pemrosesan lokal di Linux: wake word, VAD, dan transkripsi berjalan di mesin sendiri, LLM hanya memilih aksi.
- Peran
- Deep Learning
- Tanggal
- Agustus 2026
Teknologi
- python
- asyncio
- faster-whisper
- silero vad
- openwakeword
- gemini
- edge-tts
- piper
- pytorch
- pydantic
- structlog
- pytest
Masalah
Asisten suara berbasis cloud mengirim semua yang kamu ucapkan ke server, dan asisten serbaguna akan menjalankan apa pun yang diminta. Untuk asisten yang membuka mikrofon di mesinmu sendiri sepanjang hari, dua-duanya salah: audionya tidak boleh keluar dari laptop, dan asistennya hanya boleh melakukan hal-hal yang sudah kamu putuskan boleh. Tidak ada yang bisa ditawar kalau ia duduk bersebelahan dengan shell-mu.
Solusi
Ini pipeline lokal dengan anggaran latensi yang ketat (dua sampai tiga detik ujung ke ujung) dan anggaran itulah yang membentuk arsitekturnya. Model wake word offline menyiapkan mikrofon; Silero VAD yang memutuskan kapan kamu benar-benar berhenti bicara alih-alih memercayai timer tetap; faster-whisper mentranskripsi bahasa Indonesia di CPU dengan kuantisasi int8. Baru setelah itu ada yang keluar dari mesin, dan hanya teksnya: modelnya punya tepat satu tugas, memilih tool mana yang dipanggil.
Setiap tahap punya timeout dan fallback, dan begitulah anggaran itu bertahan saat satu komponen melambat. Suaranya mencoba voice online dulu, lalu jatuh ke Piper offline dengan PCM mentah, dan kalau dua-duanya gagal ia mencetak jawabannya ke konsol alih-alih membisu. Transkripsinya dijaga lock sendiri dan melempar error sibuk daripada berjalan dua kali, karena runtime di bawahnya tidak thread-safe; transkrip yang rusak diam-diam lebih buruk daripada permintaan yang ditolak.
Callback audionya hampir tidak mengerjakan apa pun: ia membaca state saat itu dan bercabang. State machine-nya bergerak lewat idle, listening, processing, dan speaking, sementara pekerjaan beratnya berjalan di thread terpisah supaya penangkapan suara tidak pernah macet. Aturan kedua: asistennya tidak boleh mendengar dirinya sendiri, jadi mikrofonnya dibisukan, wake word-nya dijeda, dan ada cooldown selama ia bicara.
Tidak ada yang sampai ke shell dalam bentuk teks bebas. Perintahnya melewati allowlist ketat tanpa interpolasi shell, aksi destruktif seperti shutdown atau reboot butuh konfirmasi verbal dua langkah, dan system prompt-nya membawa pengaman prompt injection. Kalau sebuah aplikasi tidak ada di daftar, asistennya menelusuri exact match, cache sesi, lalu fuzzy matching sebelum meminta model menebak, kemudian mengonfirmasi dengan suara: maksudmu X? Kegagalan model yang bersifat sementara sengaja dibedakan dari permintaan yang tidak dikenali dan tidak di-cache, karena menyimpan kegagalan justru mengajari sistemnya hal yang salah. Ada 184 test case yang menjaga pipeline-nya.
Kontak
Tertarik untuk bekerja sama?
Ceritakan apa yang sedang Anda bangun dan apa yang dibutuhkan. Catatan singkat sudah cukup.