Dokumentasi
Pi
Pi—agen coding terminal milik Earendil, bukan chatbot Inflection dan bukan koin—menggunakan satu blok penyedia kustom di models.json: baseUrl, api, key, dan id model yang Anda inginkan. Isi empat kolom dan Pi siap menggunakan Claude serta GPT melalui satu kunci.
Blok provider khusus di ~/.pi/agent/models.json — baseUrl, api, dan model ids — menempatkan agen coding terminal Pi milik Earendil pada Claude dan GPT melalui satu key.
{
"providers": {
"kunavo": {
"baseUrl": "https://api.kunavo.com/v1",
"api": "openai-completions",
"apiKey": "$KUNAVO_API_KEY",
"models": [
{
"id": "claude-sonnet-5",
"name": "Claude Sonnet 5",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1000000,
"maxTokens": 128000
},
{
"id": "claude-haiku-4-5",
"name": "Claude Haiku 4.5",
"input": ["text", "image"],
"contextWindow": 200000,
"maxTokens": 64000
}
]
}
}
}/v1 pada penyedia openai-completions. Contoh endpoint kompatibel di halaman model Pi memasangkan nilai tersebut dengan http://localhost:11434/v1, dan sebelum dokumentasi ditulis ulang pada 22 September, contoh untuk OpenRouter, Vercel AI Gateway, dan llama.cpp juga menggunakan jalur versi yang sama. Tidak ada kalimat yang menyatakan aturan itu secara langsung, jadi contoh-contoh tersebut yang memastikan formatnya. Base URL tanpa akhiran akan menghasilkan 404, bukan kesalahan autentikasi.cost model kustom secara default semuanya nol—nilai default tersebut terdapat dalam kode sumber Pi (v0.99.2), tetapi dokumentasi tidak lagi menjelaskannya. Karena itu, penyedia yang baru saja Anda tambahkan akan menampilkan $0 di footer dan di /session sampai Anda memasukkan tarifnya sendiri. Dua nilai default tersembunyi di bawahnya lebih bermasalah: contextWindow menggunakan 128000 dan maxTokens menggunakan 16384 secara default, sehingga model yang kolomnya Anda biarkan kosong akan dikompresi dan dipotong jauh sebelum mencapai kapasitas sebenarnya. Blok di atas menetapkan keduanya berdasarkan katalog; lakukan hal yang sama untuk id apa pun yang Anda tambahkan dari tabel di bawah.--api-key runtime terlebih dahulu, lalu kredensial auth.json yang tersimpan, apiKey dari models.json, dan terakhir variabel lingkungan penyedia”. Jadi, kunci lama yang disimpan oleh /login akan mengalahkan kunci di file Anda. Inilah penyebab umum blok yang baru diedit tetap menggunakan autentikasi lain. Halaman yang sama menambahkan bahwa model kustom “dapat dimuat dari models.json tetapi tetap tidak tersedia di /model sampai Pi dapat menemukan kredensialnya”. Model yang tidak muncul di pemilih berarti ada masalah kredensial, bukan sintaks.api. Kunavo belum menjalankan Pi ke endpoint-nya—belum ada sesi, giliran streaming, perjalanan pulang-pergi pemanggilan alat, maupun pemeriksaan model yang akhirnya digunakan oleh suatu permintaan. Halaman penyiapan yang dipublikasikan adalah referensi konfigurasi, bukan uji kompatibilitas, dan jangan menganggapnya sebagai uji tersebut. curl di bawah adalah bagian yang dapat Anda pastikan dalam sepuluh detik; perilaku klien harus Anda periksa sendiri di Pi.sk-kn-) dan tambahkan kredit mulai dari $10 — panggilan dibayar dari saldo tersebut, dan panggilan yang gagal tidak ditagihkan. Dasbor kemudian terbuka pada penyiapan Pi.Langkah demi langkah
- Buat key di
/app/keysdan salin — key hanya ditampilkan sekali. - Simpan di environment sebagai
KUNAVO_API_KEY. Pi memproses"$NAME"atau"${NAME}"di fieldapiKey, serta nilai literal atau awalan!command. Gunakan bentuk kurung kurawal jika teks literal mengikuti nama variabel. - Buat atau edit
~/.pi/agent/models.json, lalu tempel blok di atas. Provider nonbawaan memerlukanbaseUrldan nilaiapidi tingkat provider atau model—sumber Pi menolak memuat model tanpa keduanya—dan semua yang lain bersifat opsional. Membuka/modelakan memuat ulang file. - Jalankan
pi, jalankan/model, lalu pilih salah satu ID yang Anda deklarasikan. Jika ID tersebut tidak tercantum, periksa key sebelum JSON—lihat catatan urutan resolusi di atas. - Berikan tugas yang membaca dan mengedit file sungguhan. Pi mengandalkan pemanggilan alat untuk hampir semua hal yang dilakukannya, jadi uji coba pertama yang menyentuh sistem file memberi Anda jauh lebih banyak informasi daripada sekadar sapaan—dan uji coba inilah yang dapat mengungkap ketidakcocokan streaming atau skema alat, persis jenis hal yang belum diuji Kunavo untuk Anda.
Diperiksa terhadap Dokumentasi Pi tentang Pemilihan Model pada 1 Oktober 2026. Pengaturan pihak ketiga dapat berubah; jika nama bidang di sini tidak lagi sama dengan yang Anda lihat, halaman tersebut adalah acuan, bukan halaman ini.
Verifikasi sebelum men-debug klien
Satu permintaan menentukan apakah masalahnya ada pada endpoint, kunci, atau berkas konfigurasi. Jika ini mengembalikan JSON, base URL dan kunci yang sama berfungsi di Pi.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."ID model yang harus dimasukkan ke bidang
Setiap model teks dapat diakses melalui ID model — daftar terkininya ada di GET /v1/models, dan katalog beserta harga ada di halaman model. Tarif dalam USD per 1 juta token, input / output.
| ID model | Kunavo masuk / keluar | Kegunaannya di Pi |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | model kerja default untuk sesi yang mengedit file |
claude-opus-5 | $3.50 / $17.50 | merencanakan perubahan yang akan mahal jika salah |
claude-haiku-4-5 | $0.70 / $3.50 | giliran murah — triase, ringkasan, loop yang berjalan sepanjang hari |
gpt-5-6-sol | $2.00 / $12.00 | pendapat kedua dari keluarga lain, dengan key dan baseUrl yang sama |
Rute lainnya: anthropic-messages
Sebelum pembaruan dokumentasinya pada 22 September 2026, Pi mendokumentasikan empat nilai untuk api pada provider kustom: openai-completions, openai-responses, anthropic-messages, dan google-generative-ai. Halaman models yang diperbarui tidak mencantumkan satu pun: halaman itu menampilkan openai-completions dalam satu contoh dan menjelaskan kasusnya sebagai “Endpoint yang kompatibel dengan OpenAI, Anthropic, atau Google”. Sumber Pi v0.99.2 mendefinisikan field tersebut sebagai string bebas dan meneruskannya ke salah satu dari sepuluh implementasi bawaan yang cocok—empat nilai tadi ditambah openai-codex-responses, azure-openai-responses, google-vertex, mistral-conversations, bedrock-converse-stream, dan pi-messages. Hanya empat nilai yang pernah didokumentasikan untuk provider kustom, dan tidak satu pun dari enam nilai lainnya diuji di sini; halaman ini tidak menyatakan bahwa salah satunya berfungsi dengan endpoint pihak ketiga.
anthropic-messages adalah salah satu dari empat nilai yang didokumentasikan, dan Kunavo melayani antarmuka Anthropic Messages maupun yang kompatibel dengan OpenAI. Jadi, rute ini dapat dinyatakan dalam konfigurasi. Halaman ini tidak akan menuliskan base URL untuk rute tersebut ke dalam blok yang bisa Anda tempel: dokumentasi Pi belum pernah menetapkan field itu untuk api ini. Hingga 22 September, dokumentasi menampilkannya dalam dua bentuk—https://proxy.example.com/v1 pada satu contoh dan https://proxy.example.com tanpa tambahan pada contoh lain—lalu pembaruan dokumentasi pada hari itu menghapus keduanya tanpa memilih salah satunya. Jika Anda memilih rute ini, coba salah satunya; jika panggilan pertama menghasilkan 404, bukan 401, ubah baris itulah.
Tiga field dalam skema compat Pi untuk api ini perlu Anda ketahui sebelum sampai ke sana (sumber, v0.99.2), dan satu aturan dokumentasi tentang ketiganya layak dikutip terlebih dahulu: pengaturan kompatibilitas “seharusnya menjelaskan perbedaan perilaku permintaan atau respons endpoint yang telah diverifikasi. Jangan aktifkan hanya karena endpoint menyatakan kompatibel dengan OpenAI atau Anthropic.”
compat.supportsEagerToolInputStreaming— untuk backend yang menolak streaming input eager per alat.compat.supportsStrictTools— apakah endpoint menerima definisi alat dengan skema JSON yang ketat; model kustom tidak mewarisi deklarasi model Anthropic bawaan.compat.supportsMidConvoEffort— mengubah tingkat penalaran di tengah percakapan. Apakah endpoint ini memenuhi syarat merupakan pertanyaan runtime, dan Kunavo belum menjawabnya dengan menjalankan apa pun.
Blok openai-completions di bagian atas halaman ini tidak menggunakan ketiganya; itulah alasan yang jujur untuk memulai dari sana, bukan klaim bahwa hasilnya lebih baik.
Pertanyaan umum
Bagaimana cara mengarahkan agen coding Pi ke provider API kustom?
Tambahkan blok provider ke ~/.pi/agent/models.json. Halaman model Pi menyarankan penggunaan models.json “ketika endpoint menggunakan API yang sudah didukung Pi”, dan skemanya (sumber, v0.99.2) menerima baseUrl, apiKey, api, headers, authHeader, models, dan modelOverrides di tingkat provider. Provider nonbawaan memerlukan baseUrl dan nilai api di tingkat provider atau model. Skema tersebut mendefinisikan api sebagai string bebas, bukan daftar: hingga pembaruan dokumentasi pada 22 September 2026, Pi mendokumentasikan empat nilai untuk provider kustom—openai-completions, openai-responses, anthropic-messages, dan google-generative-ai—dan sumbernya pada v0.99.2 meneruskan field tersebut ke salah satu dari sepuluh implementasi bawaan; enam lainnya tidak pernah didokumentasikan untuk penggunaan ini dan belum diuji di sini. Untuk endpoint yang kompatibel dengan OpenAI, openai-completions adalah nilai yang masih ditampilkan dalam dokumentasi terbaru. Setiap entri dalam models setidaknya memerlukan id, yang diteruskan langsung ke endpoint, sehingga bentuk yang sama dapat digunakan untuk gateway, server Ollama atau vLLM lokal, dan host kompatibel lainnya.
Dari mana agen coding Pi mendapatkan API key-nya?
Dari salah satu dari empat tempat; halaman model Pi mencantumkan urutannya: --api-key saat runtime terlebih dahulu, lalu kredensial auth.json yang tersimpan, kemudian apiKey dari models.json, dan terakhir variabel environment provider. Karena itu, key yang sebelumnya disimpan dengan /login akan mengungguli key yang baru saja Anda edit ke models.json. Field apiKey sendiri mendukung interpolasi environment (“$NAME” atau “${NAME}”), nilai literal, atau keluaran perintah shell dengan awalan “!”, sehingga rahasia tidak perlu tersimpan di file. Tanpa kredensial yang dapat digunakan, dokumentasi menyebutkan bahwa model kustom dimuat dari models.json tetapi tetap tidak tersedia di /model.
Apakah baseUrl Pi harus diakhiri dengan /v1?
Untuk provider openai-completions, ya. Dokumentasi Pi tidak pernah menyatakan aturan ini dalam sebuah kalimat, tetapi contoh endpoint kompatibelnya menggunakan http://localhost:11434/v1 untuk Ollama, dan sebelum pembaruan dokumentasi pada 22 September 2026, contoh OpenRouter, Vercel AI Gateway, serta llama.cpp juga menyertakan jalur versi yang sama. Jadi, nilai untuk endpoint yang kompatibel dengan OpenAI adalah root /v1, misalnya https://api.kunavo.com/v1. Kasus anthropic-messages memang belum ditetapkan: dokumentasi lama menampilkannya dengan dan tanpa /v1, lalu pembaruan menghapus kedua contoh tersebut tanpa memilih salah satunya.
Mengapa provider kustom Pi saya menampilkan $0 di footer?
Karena Pi menetapkan semua nilai objek biaya model kustom ke nol secara default (sumber, v0.99.2), dan footer menampilkan data dalam katalog, bukan biaya yang dikenakan endpoint. Tidak ada yang gratis; angka tersebut hanya belum memiliki sumber sampai Anda mengisi tarif input, output, cacheRead, dan cacheWrite per sejuta token, serta tier apa pun, berdasarkan daftar harga provider Anda sendiri. Ada dua nilai default lain yang berdekatan dan perlu diperhatikan saat Anda mengedit file: contextWindow menggunakan 128000 sebagai nilai fallback dan maxTokens menggunakan 16384, sehingga model dengan jendela konteks lebih besar akan lebih cepat dipadatkan dan balasannya terpotong jika keduanya tidak ditetapkan secara eksplisit.
Apakah Kunavo sudah menguji agen coding Pi?
Belum. Konfigurasi di halaman ini diambil dari dokumentasi Pi sendiri dan, jika pembaruan dokumentasi 22 September menghapus suatu detail, dari sumber Pi yang dirilis pada tanggal yang ditunjukkan; tetapi belum ada sesi, giliran streaming, perjalanan pulang-pergi pemanggilan alat, atau pemeriksaan perutean model yang dijalankan terhadap endpoint ini dengan klien ini—dan hal yang sama berlaku untuk setiap klien di bagian ini. Perlakukan blok penyiapan sebagai referensi tentang hal-hal yang diterima skema Pi, verifikasi endpoint dan key dengan perintah curl di atas, dan siapkan rute yang sudah berfungsi saat Anda mencobanya.