Beberapa hari terakhir saya memakai beberapa tool coding berbasis AI sekaligus, dan muncul pertanyaan yang sering ditanyakan banyak orang: kalau di tengah sesi kode modelnya ganti-ganti — entah karena rate limit atau provider sedang turun — apakah berpengaruh ke hasil kerja? Apalagi sekarang ada 9Router yang bisa auto-fallback ke model lain. Catatan ini saya rangkum dari eksperimen dan riset saya soal OpenCode, Hermes Agent, dan 9Router.
Apa yang Sebenarnya Terjadi Saat Model Ganti di Tengah Sesi?
Ganti model di tengah sesi coding bukan sekadar soal “sambungannya pindah”. Ada tiga hal yang berubah:
- Konteks percakapan bisa terpotong. Setiap model punya batas token window sendiri. Saat failover, riwayat prompt biasanya di-truncate agar muat di model baru. Model pengganti bisa jadi tidak paham penuh alur debug yang sedang kita jalani.
- Gaya dan keputusan teknis bisa melenceng. Tiap model punya kebiasaan sendiri soal penamaan, struktur folder, sampai pilihan pola kode. Kalau berganti di tengah fitur yang sama, hasilnya bisa tidak konsisten.
- Ada biaya dan latency tambahan. Koneksi ke provider baru perlu inisialisasi ulang, dan jika konteks dikirim ulang, token yang dipakai juga bertambah.
Bagaimana OpenCode Menangani Ini?
OpenCode (tool agentic coding open source yang awalnya dikembangkan oleh Andrej Karpathy) mendukung banyak provider sekaligus: OpenAI, Anthropic, Google, hingga model lokal. Beberapa hal yang saya perhatikan:
- Bisa ganti model/provider secara dinamis tanpa restart sesi, dan konteks terbaru tetap dibawa.
- Ada failover bawaan — jika satu provider rate limited, ia beralih ke model berikutnya sesuai urutan yang kita daftarkan.
- Semua perubahan model tercatat di log sesi, sehingga riwayatnya bisa ditelusuri kembali.
Kekurangannya: tiap provider perlu API key sendiri, dan failover bisa menambah latency kalau tidak hati-hati mengatur urutan.
Bagaimana dengan Hermes Agent?
Hermes Agent (dari Nous Research) adalah agen yang lebih umum — bisa untuk coding, riset, sampai otomasi. Untuk urusan ganti model di tengah sesi, pengalamannya sedikit berbeda:
- Provider bisa di-load/unload secara dinamis, tapi sinkronisasi konteks cenderung manual — perlu resume sesi atau menyuntikkan ringkasan konteks.
- Failover otomatis tidak sepenuhnya built-in seperti OpenCode, tapi bisa dikonfigurasi lewat
fallback_providersdi config — ini yang saya pakai untuk beberapa cron blog saya. - Restore konteks dari disk butuh waktu, jadi ada latency tambahan saat pindah sesi.
Di Mana Posisi 9Router?
Di sinilah 9Router berperan. Daripada tiap tool mengurus failover-nya sendiri, kita bisa mengarahkan semuanya ke satu router yang mengatur urutan model:
opencode --model "9router://gpt-4o,claude-3.5-sonnet,gemini-1.5-flash"
Jika model pertama kena limit, 9Router otomatis meneruskan ke model berikutnya. Sisi tool (OpenCode/Hermes) tidak perlu tahu apa-apa — mereka tetap memakai endpoint yang sama. Ini menyederhanakan masalah jadi satu: atur urutan prioritas, sisanya otomatis.
Jadi, Apakah Ganti Model Berpengaruh?
| Aspek | Dampak | Cara Mitigasi |
|---|---|---|
| Konteks sesi | Bisa terpotong (truncate) | Checkpoint / ringkasan konteks tiap beberapa langkah |
| Konsistensi kode | Gaya bisa berubah antar model | Biarkan satu model menyelesaikan satu fitur utuh |
| Ketersediaan | Turun jika satu provider down | Failover 9Router dengan urutan model cadangan |
| Latency & biaya | Naik saat failover | Urutkan model dari yang paling sering dipakai |
Perspektif Hermes Agent: Kenapa Task Tetap Nyambung?
Ada satu hal yang memperjelas gambaran ini: jawaban langsung dari tim Hermes Agent (Nous Research) saat saya tanyakan hal yang sama — “jika saat eksekusi task model/provider diganti 9Router, apakah task yang dijalankan model berbeda akan tetap nyambung?”. Jawabannya: ya, tetap nyambung — dengan satu syarat penting.
Konteks Dikelola Hermes, Bukan Provider
Konteks (prompt + tools + state) disimpan di sisi gateway/sesi Hermes. Saat 9Router mengganti provider/model, Hermes tetap mengirim konteks yang sama — lewat history.messages — ke provider baru. Provider hanya “menumpang” pada konteks yang sudah disiapkan Hermes.
Syaratnya: Provider OpenAI-Compatible
Provider OpenAI-compatible (kagiro, laguna, dsb — yang memang terhubung lewat 9Router) memakai format message yang sama. Jadi model yang berbeda sekalipun akan menerima konteks yang sama persis. Yang bikin putus hanyalah perubahan model yang sangat signifikan — misalnya dari OpenAI-style ke Claude-style — karena format outputnya berbeda.
Contoh Jalan atau Tidaknya
| Perpindahan | Konteks Tetap? | Alasan |
|---|---|---|
| kagiro → laguna (9Router) | ✅ Ya | Format message sama |
| laguna → deepseek (9Router) | ✅ Ya | Format message sama |
| deepseek → llama.cpp (GGUF lokal) | ⚠️ Tergantung | Kalau via endpoint OpenAI-compatible masih nyambung, tapi gaya model baru bisa beda |
| ke Claude (non-OpenAI) | ❌ Putus | Format beda, konteks harus di-reformat |
Bottom Line
Selama semua provider yang dipakai adalah OpenAI-compatible endpoint (yang memang dilakukan via 9Router), ganti model/provider tidak akan memutus alur task — Hermes akan mengirim konteks yang sama ke provider baru. Logika tool (mengubah config, restart gateway, dsb) tetap jalan karena Hermes yang mengeksekusi, bukan provider. Yang nyata berubah hanyalah cost dan kecepatan response.
Bagaimana dengan OpenCode? Apakah Sama?
Pertanyaan lanjutannya: apakah prinsip yang sama berlaku di OpenCode? Berdasarkan dokumentasi resminya — ya, prinsipnya sama.
“Select a model to use it in the current session. Switching models updates that session without changing your config.” — Dokumentasi resmi OpenCode (opencode.ai/v2/docs/models)
Konteks Dipegang OpenCode, Bukan Provider
Seperti Hermes, konteks (transcript + state) disimpan di sisi OpenCode — bukan di provider. Ganti model lewat model picker (tab) atau per-run (--model) hanya mengganti model yang dipakai sesi itu; riwayat percakapan tetap utuh dan dikirim penuh ke model baru.
9Router Transparan untuk OpenCode
OpenCode melihat 9Router sebagai satu provider OpenAI-compatible biasa. Saat failover terjadi di balik layar, OpenCode tidak tahu modelnya berganti — ia tetap mengirim konteks sesi yang sama ke endpoint yang sama. Perilakunya persis seperti Hermes.
Perbandingan Hermes vs OpenCode
| Aspek | Hermes Agent | OpenCode |
|---|---|---|
| Pemegang konteks | Gateway/sesi Hermes (history.messages) | Session store OpenCode (transcript) |
| Switch model mid-session | Dinamis via config | Model picker tab / --model, tanpa ubah config |
| Auto-failover native antar provider | ✅ Ada (fallback_providers) | ❌ Tidak ada — manual |
| Failover via 9Router | Konteks nyambung ✅ | Konteks nyambung ✅ |
Satu perbedaan penting: Hermes punya failover native antar provider, OpenCode tidak. Di OpenCode, 9Router justru perannya lebih besar — dialah satu-satunya mekanisme failover otomatisnya. Tanpa 9Router, ganti model di OpenCode harus manual.
Kesimpulan
Mengganti model di tengah sesi berpengaruh, terutama pada konteks dan konsistensi — tapi dampaknya bisa dikelola. Untuk masalah ketersediaan (rate limit, provider down), 9Router sudah menyelesaikan bagian terberatnya dengan failover otomatis. Untuk masalah konteks, kebiasaan kecil seperti menyimpan ringkasan pekerjaan setiap beberapa langkah sudah sangat membantu.
Pendekatan yang saya pakai sekarang: satu model untuk satu fitur utuh, dan 9Router sebagai jaring pengaman kalau model utama sedang bermasalah. Kombinasi yang cukup untuk sebagian besar pekerjaan harian.