Melampaui batas penggunaan: meningkatkan akses ke Codex dan Sora
Oleh Jonah Cohen, Anggota Staf Teknis
Dalam setahun terakhir, baik Codex maupun Sora telah mengalami adopsi yang pesat, dengan penggunaan yang cepat melampaui apa yang kami perkirakan sebelumnya. Kami telah melihat pola yang konsisten: pengguna langsung terjun, menemukan nilai nyata, dan kemudian menemui batas laju.
Batas laju dapat membantu meratakan permintaan dan memastikan akses yang adil; tetapi, ketika pengguna mendapatkan manfaat, mengalami penghentian mendadak bisa membuat frustrasi. Kami menginginkan cara agar pengguna dapat terus melanjutkan, sambil melindungi kinerja sistem dan kepercayaan pengguna terhadap pendekatan kami.
Untuk menyelesaikan ini, kami membangun mesin akses waktu nyata yang menghitung penggunaan. Salah satu lapisan dalam mesin tersebut adalah kemampuan untuk membeli kredit. Ketika pengguna melebihi batas penggunaan mereka, kredit memungkinkan mereka untuk terus menggunakan produk kami dengan mengurangi saldo kredit mereka.
Di bawah ini terdapat sistem kompleks yang menggabungkan batas, pelacakan penggunaan secara waktu nyata, dan saldo kredit dalam satu model akses. Postingan ini membahas mengapa penskalaan Codex dan Sora memerlukan pemikiran ulang tentang kontrol akses, bagaimana sistem real-time yang terbukti benar memadukan batasan laju dan kredit per permintaan, serta bagaimana fondasi tersebut kini membuka akses tambahan untuk kedua produk.
Secara lebih luas, model akses tradisional cenderung memaksa adanya pilihan:
- Batas penggunaan dapat membantu pada awalnya, tetapi memberikan pengalaman buruk kepada pengguna saat batas tersebut habis: “silakan kembali nanti”
- Penagihan berbasis penggunaan bersifat fleksibel, tetapi membuat pengguna harus membayar sejak token pertama—tidak ideal untuk mendukung eksplorasi awal
Dalam konteks Codex dan Sora, tidak satu pun dari keduanya memadai jika diterapkan secara terpisah. Jika kami sekadar menaikkan batas laju, kami akan kehilangan kontrol penting untuk pemerataan permintaan dan keadilan serta kehabisan kapasitas untuk melayani semua orang. Jika sepenuhnya bergantung pada penagihan penggunaan secara asinkron, hal itu berpotensi menimbulkan latensi, kelebihan biaya, atau persoalan rekonsiliasi—yakni jenis gangguan yang paling terasa ketika pengguna sedang sangat terlibat.
Yang kami perlukan sebagai gantinya adalah satu sistem hybrid yang menggabungkan batasan waktu nyata dengan akses bayar sesuai pemakaian:
Sistem ini harus:
- Terapkan batas laju sampai batas tersebut tercapai
- Beralih dengan mulus ke kredit dalam permintaan yang sama
- Buat keputusan itu dalam waktu nyata
- Pastikan pelacakan konsumsi kredit dilakukan secara sangat akurat dan dapat diaudit
Salah satu pergeseran konseptual utama yang kami lakukan adalah memodelkan akses sebagai alur keputusan berjenjang (decision waterfall). Alih-alih bertanya “apakah ini diperbolehkan?”, kami bertanya “berapa banyak yang diperbolehkan, dan dari mana?” Saat menghitung penggunaan, sistem melalui urutan berikut:
Model ini mencerminkan bagaimana pengguna sebenarnya menikmati produk. Batas laju, tingkatan gratis, kredit, promosi, dan hak istimewa perusahaan semuanya hanyalah lapisan dalam tumpukan keputusan yang sama. Dari sudut pandang pengguna, mereka tidak 'beralih sistem'—mereka hanya terus menggunakan Codex dan Sora. Itulah sebabnya kredit terasa tak terlihat: mereka hanyalah elemen lain dalam waterfall/aliran.
Kami mengevaluasi platform penagihan dan pengukuran penggunaan pihak ketiga untuk menangani konsumsi kredit. Platform ini sangat cocok untuk penagihan dan pelaporan, tetapi tidak memenuhi dua persyaratan penting:
Ketika seorang pengguna mencapai batas dan memiliki kredit yang tersedia, sistem harus mengetahui segera. Penghitungan yang dilakukan dengan upaya terbaik atau yang tertunda muncul sebagai blok yang mengejutkan, saldo yang tidak konsisten, dan tagihan yang salah. Untuk produk interaktif seperti Codex dan Sora, kegagalan tersebut menjadi terlihat dan membuat frustrasi.
Kami juga perlu memberikan transparansi terhadap setiap hasil:
- Mengapa permintaan diizinkan atau diblokir
- Berapa banyak penggunaan yang telah digunakan
- Batasan atau saldo mana yang diterapkan
Kapabilitas ini perlu diintegrasikan secara erat ke dalam alur pengambilan keputusan (decision waterfall) kami, alih-alih diselesaikan secara terpisah melalui platform penagihan penggunaan yang berdiri sendiri dan hanya melihat satu bagian dari keseluruhan proses yang terjadi. Agar pengguna dapat mengakses produk kami tanpa mengorbankan kepercayaan, kami memerlukan kendali penuh atas ketepatan, waktu, dan kemampuan pengamatan. Hal itu mendorong kami menuju solusi internal.
Untuk mendukung hal ini, kami membangun sistem penggunaan dan saldo terdistribusi yang dirancang khusus untuk keputusan akses sinkron.
Pada tingkat tinggi, sistem:
- Melacak penggunaan per pengguna, per fitur
- Mempertahankan jendela batas tarif
- Memelihara saldo kredit secara real-time
- Melakukan pendebitan saldo secara idempoten melalui pemroses asinkron berbasis streaming
Setiap permintaan melewati satu jalur evaluasi yang membuat keputusan waktu nyata tentang seberapa banyak penggunaan yang diizinkan dengan secara sinkron mengonsumsi dari batas laju dan, jika diperlukan, memverifikasi kredit yang mencukupi; kemudian mengembalikan satu hasil yang pasti sambil menyelesaikan setiap debit kredit secara asinkron. Ini memastikan perilaku yang konsisten di seluruh produk dan menghilangkan logika yang terduplikasi di seluruh tim.
Salah satu prinsip desain utama dari sistem ini adalah bahwa kami harus dapat membuktikan bahwa penagihan kami akurat. Ini mencerminkan akar dukungan kredit kami, yang berasal dari pelanggan perusahaan. Dalam diagram sistem di atas, kami memiliki tiga kumpulan data terpisah yang semuanya saling terhubung:
- Peristiwa penggunaan produk: Apa yang sebenarnya dilakukan oleh pengguna
- Peristiwa monetisasi: Apa yang kami kenakan kepada pengguna untuk penggunaan mereka
- Pembaruan saldo: Seberapa banyak kami menyesuaikan saldo kredit pengguna dan alasannya
Dataset ini bukan sekadar produk sampingan; justru dataset tersebut menggerakkan sistem, dengan setiap dataset memicu dataset berikutnya. Memisahkan kejadian, biaya terkait, dan apa yang kami debit memungkinkan kami untuk mengaudit, memutar ulang, dan merekonsiliasi setiap lapisan secara independen. Ini adalah kompromi yang disengaja, di mana kami memprioritaskan kebenaran yang dapat dibuktikan, dengan mengorbankan pembaruan saldo kredit yang sedikit tertunda. Bagaimana kami mencapai hal ini:
- Peristiwa penggunaan produk dipublikasikan untuk semua aktivitas pengguna, baik yang menyebabkan konsumsi kredit maupun tidak. Ini menyediakan jejak audit untuk aktivitas pengguna dan memungkinkan kami menjelaskan mengapa kami mengenakan, atau tidak mengenakan, kredit.
- Setiap peristiwa memiliki kunci idempotensi yang stabil, sehingga percobaan ulang, pemutaran ulang, atau pengulangan worker tidak akan pernah mendebit saldo dua kali, yang mencegah penagihan ganda. Ini juga memungkinkan kami melakukan rekonsiliasi batch untuk memverifikasi pekerjaan kami secara offline.
- Kami melakukan pembaruan saldo secara asinkron (tetapi tetap hampir real-time) daripada pembaruan sinkron untuk menciptakan jejak audit. Kami menoleransi sedikit keterlambatan dalam memperbarui saldo pengguna agar kami dapat membuktikan bahwa sistem berfungsi dan meyakinkan pengguna kami bahwa kami tidak salah menagih mereka. Ketika penundaan singkat tersebut menyebabkan kami melampaui saldo kredit pengguna, kami secara otomatis mengembalikannya; kami memilih ketepatan yang dapat dibuktikan dan kepercayaan pengguna dibandingkan penegakan yang ketat.
- Kami mengurangi Saldo Kredit dan memasukkan catatan Pembaruan Saldo dalam satu transaksi basis data atomik. Pembaruan saldo diserialisasi per akun, sehingga permintaan yang berjalan secara bersamaan tidak akan pernah saling berpacu untuk menggunakan kredit yang sama. Catatan Pembaruan Saldo mencakup jumlah debit serta atribusi kembali ke peristiwa monetisasi yang memicu pembaruan; membungkus ini dalam satu transaksi basis data menjamin kami memiliki jejak audit untuk setiap penyesuaian pada saldo kredit.
Semua ketelitian ini mendukung satu tujuan: membuat akses sederhana dan aman. Saat orang sedang menyusun atau menulis kode, mereka tidak seharusnya mempertanyakan apakah permintaan akan diproses, apakah akan terjadi kelebihan penagihan, atau apakah saldo yang tercatat sudah akurat. Dengan memastikan penggunaan, penagihan, dan saldo dapat dibuktikan kebenarannya, kami memberikan sistem kepada pengguna yang tidak mengganggu pengalaman mereka. Itulah yang memungkinkan kami mengganti penghentian mendadak dengan akses berkelanjutan—dan itulah yang membuat kredit dapat digunakan di tengah pekerjaan nyata, bukan hanya pada faktur.
Prinsip utama di balik pendekatan kami adalah melindungi momentum pengguna. Setiap keputusan arsitektural berhubungan langsung dengan hasil yang dihadapi pengguna: saldo real-time mencegah gangguan yang tidak perlu, konsumsi atomik mencegah penagihan ganda, dan logika akses terpadu memastikan perilaku yang dapat diprediksi. Hasilnya adalah orang-orang dapat bekerja lebih lama, menjelajah lebih dalam, dan membawa proyek lebih jauh tanpa menghadapi penghentian mendadak atau perubahan rencana sebelum waktunya.
Ketika pengguna terlibat, sistem harus membantu mereka untuk melanjutkan, bukan menghalangi. Batasan dan kredit menghilang ke dalam latar belakang.
Membangun pengalaman tersebut memerlukan pemikiran ulang tentang akses, penggunaan, dan penagihan sebagai satu sistem serta membangun infrastruktur yang memperlakukan ketepatan sebagai fitur utama produk. Fondasi yang sama dapat diperluas ke lebih banyak produk seiring waktu; Codex dan Sora hanyalah permulaan.


