Notula: Pipeline Notulen Rapat Dua Tahap yang Terukur
Transkrip sebagai system of record membuat ringkasan bilingual EN/ID bisa dijalankan ulang tanpa menyentuh audio lagi, dengan metering biaya per tahap di API

- Proyek open source
- Agen AI
- Indonesia
- 16 Agustus 2026
Tangkapan layar

Gambar tidak dapat dimuat.

Gambar tidak dapat dimuat.
Masalahnya
Kebanyakan aplikasi notulen rapat mengklaim kualitas, bukan mengukurnya. Dan secara arsitektur mereka mencampur dua hal yang biayanya jauh berbeda: mengubah audio menjadi transkrip adalah panggilan yang mahal dan lambat, sedangkan mengubah transkrip menjadi ringkasan adalah teks-masuk-teks-keluar yang murah. Tanpa memisahkan keduanya, setiap perbaikan prompt ringkasan berarti membayar ulang transkripsi.
Yang kami bangun
Notula — bahasa Indonesia untuk “notulen” — adalah pipeline dua tahap: audio masuk, dinormalisasi ffmpeg, ditranskripsikan sekaligus didiariskan oleh Gemini dalam satu panggilan berskema, lalu diringkas oleh DeepSeek dari teks transkrip menjadi TL;DR, keputusan, action item berpemilik, dan pertanyaan terbuka — dalam bahasa Inggris atau Indonesia.
Transkrip adalah system of record. Menyimpannya membuat ringkasan bisa dijalankan
ulang: ganti bahasa ringkasan atau perbaiki prompt, dan hanya tahap dua yang berjalan
ulang — state machine mengizinkan COMPLETED → SUMMARIZING → COMPLETED, dan re-run yang
gagal mempertahankan ringkasan terakhir yang baik. Setiap tahap melaporkan waktu, token,
dan biaya yang dihitung dari metadata usage provider sendiri, dan metering itu tampil di
API maupun UI.
Keputusan rekayasa
Dua provider, dua alasan. Gemini adalah salah satu dari sedikit API yang mentranskripsikan dan mendiariskan audio dalam satu panggilan; DeepSeek v4-flash adalah model teks termurah yang cukup mampu, jadi ia mengerjakan separuh pipeline yang re-runnable.
Schema repair, bukan schema hope. Mode json_object menegakkan JSON, bukan skema
Anda. Parser memvalidasi field per field dengan pesan error yang menyebut path persisnya,
dan loop repair mengembalikan error itu plus output gagal ke model — maksimal dua kali,
lalu gagal dengan jelas.
Audio panjang dipotong di jeda. Rekaman di atas 20 menit dibelah pada batas senyap dengan overlap 15 detik, ditranskripsikan per potong, lalu digabung — duplikat di overlap dibuang, dan label pembicara generik direkonsiliasi lintas potong.
Hasil yang diukur
Pada rekaman rapat publik 60 detik lewat pipeline live: total $0,0050 — $0,0046 untuk transkripsi, $0,0003 untuk ringkasan, dan ringkasan ulang ke bahasa Indonesia menambah $0,0003 tanpa menyentuh audio lagi. Observasi jujurnya disimpan, tidak dirapikan: latensi tahap transkripsi bervariasi 20x antar dua run identik (tertelusuri ke koneksi IPv6 yang macet — sejak itu semua klien provider membawa timeout eksplisit), dan nama diri tidak stabil lintas run, persis mode kegagalan yang dijawab fitur roster peserta.
Evaluasi live (2026-08-16, 5 kasus golden bilingual, judge deepseek-v4-flash): 5/5
lolos, schema validity 1.00, faithfulness 1.00. Kasus “tanpa keputusan” yang sengaja
disertakan benar-benar menghasilkan daftar kosong — tidak ada keputusan yang dikarang.
Semua angka offline dari mock provider diberi label mock; ia membuktikan mesinnya, bukan
modelnya.
Menjalankannya
git clone https://github.com/ridwanspace/notula && cd notula, lalu make install && make demo — sampel audio bawaan diproses, event pipeline di-stream, dan tabel biaya per
tahap dicetak, semuanya offline tanpa API key. make run membuka UI web di
http://localhost:8000.
Ada proses serupa di tim Anda?
Ceritakan alur kerja dan kendalanya. Kita mulai dengan lingkup yang bisa dijelaskan dan diperiksa.


