Rantai Fallback Model Gratis untuk Agen Otonom

Hampir pasti karena keduanya ada di akun penyedia yang sama. Rate limit biasanya menempel pada akun atau API key, bukan pada model, jadi fallback ke model berbeda di akun yang sama adalah penggantian nama, bukan fallback. Pastikan tiap tahap melintasi batas akun.
Dua panggilan. Permintaan ke endpoint daftar model yang mengembalikan 200 membuktikan kuncinya valid dan akunnya aktif. Permintaan completions yang mengembalikan 429 di atasnya membuktikan jatah gratisnya habis, bukan kuncinya dicabut. Log jarang memisahkan keduanya dengan jelas, dan pembedaan itu mengubah apa yang harus Anda lakukan berikutnya.
Perlu, kalau runtime Anda menghormati header Retry-After penyedia. Menaikkan jumlah percobaan ulang jauh di atas default mengubah throttle per menit menjadi jeda alih-alih kegagalan, dan itu persis perilaku jalan-lambat yang Anda inginkan. Tetap pasang batas jam dinding untuk keseluruhan run agar kesabaran tidak menjadi penantian tanpa akhir.
Periksa empat hal dari mesin yang akan memakainya: apakah runtime punya integrasi kelas satu alih-alih adapter generik, apakah jendela konteksnya memenuhi minimum, apakah permintaan completion sungguhan cepat dari host itu, dan apakah model spesifiknya benar-benar menjawab dua kali berturut-turut. Daftar model adalah katalog, bukan janji.
Curigai protokolnya sebelum penyedianya. Satu endpoint di rantai saya macet pada badan permintaan HTTP/2 dari jalur jaringan tertentu dan bekerja sempurna lewat HTTP/1.1 — dan runtime agennya, yang tidak pernah menegosiasikan HTTP/2, bisa menjangkaunya sepanjang waktu. Kirim juga user agent non-default, karena sebagian gateway menolak string CLI bawaan.

Ringkasan Utama
Rantai fallback hanya berguna kalau tiap tahapnya menarik dari akun penyedia yang berbeda, karena rate limit menempel pada bucket, bukan pada model. Padukan bucket terpisah dengan jumlah percobaan ulang yang tinggi dan menghormati Retry-After, maka agen di tier gratis bertahan menghadapi throttling alih-alih mati pada 429 pertama.
Saya menjalankan agen coding yang membuka dan me-merge pull request setiap hari, dan sepanjang bulan pertama ia berjalan sepenuhnya di tier model gratis. Batasan itu mengajari saya lebih banyak tentang routing model di produksi daripada pemakaian berbayar sebanyak apa pun, karena tier gratis gagal terus-menerus dan dengan segala cara yang mungkin.
Semua pelajaran di bawah adalah hal yang saya salah lakukan sebelum akhirnya benar, dan semuanya berlaku sama untuk setup berbayar — akun berbayar juga menabrak limit, hanya lebih jarang dan lebih mahal.
Hal pertama yang perlu diresapi: tidak semua rate limit sama, dan respons yang perlu Anda bangun berbeda untuk masing-masing.
Membedakan ketiganya penting karena yang pertama menuntut kesabaran, yang kedua menuntut bucket berbeda, dan yang ketiga menuntut penerimaan bahwa Anda tidak bisa tahu lalu merancang agar sistemnya pulih sendiri.

Rantai fallback pertama saya tidak berguna dan saya tidak menyadarinya berminggu-minggu. Primer dan fallback adalah dua model berbeda — dari penyedia yang sama, di akun gratis yang sama.
# The rule that took me three rewrites to learn:
# every stage of the chain must be a SEPARATE quota bucket.
model:
default: provider-a/coding-model-free # primary
fallback: provider-b/large-instruct-model # different vendor, own quota
last: provider-c/flash-model # different vendor again
agent:
max_turns: 80
api_max_retries: 10 # honours Retry-After, waits out per-minute windows
# The version that did NOT work:
# default: provider-a/model-one-free
# fallback: provider-a/model-two-free <- same account, same bucket
# When provider A rate-limited the account, both legs failed identically.Ketika akun itu menabrak jatahnya, kedua kaki mengembalikan 429 yang sama, jadi rantainya memberi resiliensi nol sambil terlihat seperti sistem yang dirancang. Penulisan ulangnya menjadikan tiap tahap vendor berbeda dengan kunci dan kuotanya sendiri, dan rantainya langsung membayar dirinya: pada hari pertama primernya tercekik, sebuah run selesai lewat tahap kedua dan saya baru tahu setelah membaca log.
Fallback ke model berbeda di akun yang sama bukan fallback, itu penggantian nama. Periksa kuotanya sebenarnya menempel pada apa — biasanya akun atau API key, bukan model — dan pastikan tiap tahap melintasi batas itu.
Tidak semua penyedia layak menjadi tahap, dan kriterianya lebih praktis ketimbang soal mutu model.
| Kriteria | Kenapa penting | Cara memeriksanya sebelum dipasang |
|---|---|---|
| Integrasi kelas satu | Adapter generik yang kompatibel OpenAI bisa membentuk permintaan dengan buruk dan meledak pada giliran yang padat tool | Utamakan penyedia yang punya plugin khusus di runtime; uji dengan toolset penuh Anda, bukan prompt telanjang |
| Panjang konteks | Satu giliran agen membawa berkas, hasil tool, dan riwayat; jendela kecil gagal di tengah tugas | Tolak apa pun di bawah minimum runtime, dan jujurlah bahwa angka di dokumen tidak selalu angka yang bisa dipakai |
| Keterjangkauan dari host Anda | Sebagian endpoint cepat dijangkau dari satu wilayah dan praktis tak terpakai dari wilayah lain | Ukur waktu permintaan completion sungguhan dari VPS, bukan dari laptop Anda |
| Kehangatan model | Di tier serverless gratis, sebagian model yang terdaftar tidak dijaga hangat dan sekadar menggantung | Panggil tiap model kandidat secara langsung; simpan hanya yang menjawab andal dua kali berturut-turut |
Baris terakhir itu memakan satu sore saya. Daftar model penyedia adalah katalog, bukan janji, dan beda antara model yang terdaftar dan model yang dilayani tidak terlihat sampai Anda memanggilnya.
Dua panggilan curl memberi tahu hampir semua hal tentang penyedia kandidat, dan keduanya membedakan mode kegagalan yang tidak pernah dipisahkan log secara jelas.
# Probe a candidate provider BEFORE wiring it in. Two calls, two answers.
# 1. Is the key valid and the account active?
curl -s -o /dev/null -w '%{http_code}\n' \
-H "Authorization: Bearer $KEY" -A "agent-probe/1.0" \
https://api.example.com/v1/models # 200 = key fine
# 2. Can it actually complete? This is the one that matters.
curl -s -X POST -H "Authorization: Bearer $KEY" \
-H 'content-type: application/json' -A "agent-probe/1.0" \
-d '{"model":"m","messages":[{"role":"user","content":"ping"}]}' \
https://api.example.com/v1/chat/completions | head -c 300
# A 200 on /models with a 429 on completions means the key is fine and
# the free allowance is spent — a distinction worth ten minutes of
# reading logs, and one no error message ever spells out.Satu pelajaran transport lagi yang layak dibawa: kalau permintaan ke penyedia menggantung alih-alih gagal, curigai protokolnya sebelum penyedianya. Saya kehilangan satu hari karena endpoint yang macet pada badan permintaan HTTP/2 dari satu jalur jaringan tertentu dan bekerja sempurna lewat HTTP/1.1 — dan runtime agennya, yang tidak menegosiasikan HTTP/2, sebenarnya bisa menjangkaunya sepanjang waktu.
Kirim user agent non-default pada setiap probe. Sebagian gateway berada di belakang web application firewall yang menolak string agen baris perintah bawaan, dan penolakan itu terlihat persis seperti kunci yang salah.

Begitu bucket-nya benar, tuas kedua adalah seberapa sabar tiap percobaan. Empat setelan saling berinteraksi dan semuanya perlu disetel bersamaan.
Pelajaran termahal di area ini saya timpakan sendiri: dua run validasi penuh ditambah satu pekerjaan ketiga dalam satu sore menghabiskan jatah gratis hari itu, dan run terjadwalnya kemudian gagal di atasnya. Aturan yang saya pegang sekarang: satu run sungguhan per hari per penyedia, dan biarkan run terjadwal menjadi ujinya.
Ada titik ketika rekayasa tier gratis berhenti menjadi penghematan dan mulai menjadi hobi. Titik saya tiba ketika konfigurasinya sudah punya tiga penyedia, kebijakan percobaan ulang, dan skrip probe, sementara total biaya yang akan menggantikan semuanya kira-kira seharga secangkir kopi per bulan.
Alasan jujur saya melanjutkannya adalah karena batasan itu menghasilkan sistem yang lebih baik: rantai dengan bucket independen, percobaan ulang yang murah hati, dan batas jam dinding juga lebih tangguh di akun berbayar. Kalau Anda menjalani latihan ini, pertahankan arsitekturnya lalu bayar tahap primernya — Anda berakhir dengan sesuatu yang selamat dari gangguan di penyedia Anda, dan itu tidak bisa dibeli dengan uang saja.
Tier model gratis adalah guru yang sangat baik karena ia gagal sesuai jadwal. Bucket kuota terpisah per tahap, percobaan ulang yang menunggu habisnya jendela per menit, batas jam dinding, dan probe yang membedakan kunci mati dari jatah yang habis — empat gagasan itulah yang mengubah agen harian dari sesuatu yang rusak hampir tiap pagi menjadi sesuatu yang berhenti saya periksa.