Dokumentasi
DeepSeek Harness
DeepSeek Harness mempertahankan kartu DeepSeek miliknya dan menambahkan kartu Anda di sebelahnya. Lima kolom di “Add model provider” → “Custom model API” menempatkan Claude dan GPT dalam pemilih model yang sama, dengan satu kunci.
Settings → Models → “Add model provider” → “Custom model API” menerima lima field — Provider ID, display name, base URL, API protocol, dan API key — lalu menempatkan Claude dan GPT dalam pemilih yang sama dengan kartu DeepSeek bawaan.
# Settings → Models → Add model provider → Custom model API
#
# Provider ID kunavo (lowercase, and permanent)
# display name Kunavo
# base URL https://api.kunavo.com/v1
# API protocol OpenAI Chat Completions (openai-completions)
# API key sk-kn-...
#
# Then Model catalog → Fetch available models → Add selected,
# or type the ids by hand. The page writes the active profile's
# $DSH_HOME/profiles/<profile>/cordis.patch.yml — profile "web" under
# `dsh web`. The same provider there, plus an optional second one
# that sends Claude ids over Anthropic Messages, whose base URL has
# NO /v1. This entry replaces the whole llm-pi-ai config: keep any
# provider already in it.
- id: llm-pi-ai
config:
providers:
kunavo:
apiKeyEnv: KUNAVO_API_KEY
api: openai-completions
baseURL: https://api.kunavo.com/v1 # → /v1/chat/completions
models:
- id: claude-sonnet-5
- id: claude-opus-5
- id: claude-haiku-4-5
- id: gpt-5-6-sol
kunavo-claude:
apiKeyEnv: KUNAVO_API_KEY
api: anthropic-messages
baseURL: https://api.kunavo.com # → /v1/messages
models:
- id: claude-sonnet-5
- id: claude-haiku-4-5openai-completions menggunakan https://api.kunavo.com/v1; anthropic-messages menggunakan https://api.kunavo.com, tanpa /v1, karena dsh menambahkan /v1/messages sendiri. Pengujian dsh 0.2.0-rc.2 terhadap sistem pengganti yang merekam permintaan memastikan keduanya: yang pertama mengirim permintaan ke /v1/chat/completions, yang kedua ke /v1/messages?beta=true dari root tanpa sufiks — dan ke /v1/v1/messages jika URL dasarnya tetap menyertakan /v1, yang akan dijawab gateway sungguhan dengan 404, bukan kesalahan autentikasi.reasoningEfforts mengubah peran prompt sistem, bukan apakah prompt itu sampai. Harness mendokumentasikan bahwa model yang mendeklarasikan penalaran mengirim prompt sistemnya sebagai role: "developer". Kunavo membaca peran itu sebagai giliran sistem pada setiap keluarga, termasuk Claude, jadi tidak perlu menggunakan sakelar compat. Hingga 2026-09-30, jalur Claude menghilangkan peran tersebut, dan kartu ini menyarankan Anda untuk mengatur compat.supportsDeveloperRole: false; jika Anda melakukannya, itu tidak berbahaya dan boleh tetap diaktifkan.deepseek-, dan gunakan kunci ini untuk ID Claude dan GPT dalam tabel di bawah. Artinya, sakelar compat.thinkingFormat: deepseek yang didokumentasikan harness untuk “DeepSeek V4 di balik gateway yang kompatibel dengan OpenAI” tidak memiliki fungsi di sini.dsh_session_log, peristiwa sesi termasuk path direktori kerja Anda, dan dsh_plugin_packages. Dalam pengujian, kedua penyedia kustom tidak mengirim salah satunya, jadi penyedia Kunavo tidak menerimanya. Bobot data tersebut dan sakelar untuk menonaktifkan unggahan dijelaskan di Harga DeepSeek Harness.curl di bawah ini adalah bagian Kunavo dan dapat Anda periksa dalam sepuluh detik; dsh adalah pratinjau pengembang yang masih terus berubah.sk-kn-) dan tambahkan kredit mulai dari $10 — panggilan dibayar dari saldo tersebut, dan panggilan yang gagal tidak ditagihkan. Dasbor kemudian terbuka pada penyiapan DeepSeek Harness.Langkah demi langkah
- Buat key di
/app/keysdan salin — key hanya ditampilkan sekali. - Jalankan Web UI (
dsh web) dan buka Pengaturan → Model. Pilih Tambah penyedia model. Kartu terbuka pada Penyedia model pihak ketiga, yang hanya menampilkan penyedia yang disertakan dalamdsh— ubah ke API model kustom. - Isi ID penyedia (huruf kecil dan permanen — dokumentasi menyebutkan bahwa permintaan, sesi tersimpan, default model, dan referensi kredensial semuanya menggunakannya; untuk mengganti nama, Anda harus menambahkan penyedia baru dan menghapus yang lama), nama tampilan, URL dasar
https://api.kunavo.com/v1, protokol API OpenAI Chat Completions, dan kunci API. Kunci hanya bisa ditulis; dsh menyimpannya di$DSH_HOME/.credentials.yamldan hanya menyimpan referensinya di profil. - Di bagian Katalog model, pilih Ambil model yang tersedia — Kunavo merespons dengan
GET /v1/models, sehingga pemilih akan terisi otomatis. Centang model yang Anda inginkan, lalu pilih Tambahkan yang dipilih. ID yang dimasukkan secara manual juga berfungsi, dan dokumentasi menyarankan cara itu setiap kali penemuan model tidak menampilkan apa pun. - Opsional: untuk ID Claude melalui protokol Anthropic sendiri, tambahkan API model kustom kedua dengan ID Penyedia dan URL dasar tersendiri
https://api.kunavo.com— tanpa/v1— serta protokol API Anthropic Messages dan kunci yang sama. Pengambilan model juga menampilkan seluruh katalog di sini; tambahkan hanya IDclaude-(mengapa hanya itu). - Pilih model di kolom penulisan, lalu kirim giliran yang menyentuh sebuah file, bukan sekadar sapaan — harness banyak mengandalkan pemanggilan alat, jadi pengujian pertama yang membaca dan mengedit sesuatu akan memberi Anda informasi lebih banyak. Perubahan model berlaku pada permintaan berikutnya; dokumentasi secara jelas menyatakan bahwa tidak perlu memulai ulang.
Diperiksa terhadap halaman “Configure models” DeepSeek Harness (teks yang sama dengan docs/user/guide/providers.md pada tag dsh-v0.2.0-rc.2) 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 DeepSeek Harness.
# 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 DeepSeek Harness |
|---|---|---|
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 kunci dan penyedia yang sama |
gpt-5-6-terra | $0.70 / $4.20 | input panjang, ketika tarif per token menentukan tagihan |
Claude melalui Anthropic Messages
Kunavo juga menjawab API Anthropic Messages, dan anthropic-messages adalah salah satu dari tiga protokol yang ditawarkan formulir. Dokumentasi harness dengan jelas menyatakan bahwa “Satu penyedia menggunakan satu protokol, jadi gateway yang melayani dua protokol memerlukan dua penyedia” — jadi ini adalah penyedia kedua di samping yang pertama, bukan pengaturan pada penyedia itu.
- URL dasar
https://api.kunavo.com, root tanpa sufiks. Dalam pengujian, root tersebut mengirim permintaan ke/v1/messages?beta=true— path yang juga digunakan Claude Code dan dijawab oleh Kunavo. Jika ditambahkan/v1di bagian akhir, permintaan dikirim ke/v1/v1/messages. DeepSeek Harness vs Claude Code membandingkan permintaan dari kedua klien secara berdampingan. - Hanya ID Claude.
/v1/messagesKunavo menyediakan IDclaude-saja; IDgpt-di sana akan menghasilkan404yang menyebutkan/v1/chat/completions. Tetap gunakan penyediaopenai-completionsuntuk GPT. - Pengambilan model menampilkan setiap model; tambahkan hanya model Claude. README
llm-pi-aidsh menyebutkan bahwa penemuan model pada protokol ini mengirim permintaan keGET /v1/modelsdengan headerx-api-keymilik Anthropic, dan daftar model Kunavo menerima kunci pada header tersebut seperti halnya diAuthorization: Bearer— kesimpulan itu berasal dari kode sumber dsh dan pengujian Kunavo sendiri, bukan dari pengujian tersebut. Hasil yang diperoleh melalui Ambil model yang tersedia adalah seluruh katalog, termasuk GPT dan model gambar, jadi centang hanya IDclaude-; memasukkannya secara manual juga berfungsi. Daftar lengkap tidak membuktikan sebanyak yang terlihat: README yang sama menyebutkan bahwa URL daftar diterima dengan atau tanpa/v1, sedangkan permintaan model menggunakan URL dasar tanpa perubahan — jadi pengambilan model juga mengisi daftar darihttps://api.kunavo.com/v1, dan giliran pertama dari URL dasar itu dikirim ke/v1/v1/messages. - Manfaatnya. Permintaan tiba dalam format Anthropic — dalam pengujian, prompt sistem dikirim sebagai kolom tingkat atas
system, sehingga perandevelopertidak digunakan — dan Kunavo meneruskannya apa adanya, alih-alih menerjemahkannya dari format OpenAI. Penyediaopenai-completionsmenjangkau ID Claude yang sama melalui penerjemahan, itulah sebabnya penyedia tersebut digunakan dalam langkah-langkahnya.
File di balik formulir
Halaman Models menulis $DSH_HOME/profiles/<profile>/cordis.patch.yml — $DSH_HOME/profiles/web/cordis.patch.yml jika Anda memulai dengan dsh web. Dokumentasi dsh yang lebih lama menunjuk ke $DSH_HOME/settings.yaml; dokumentasi versi 0.2.0-rc.2 tidak. Jika browser berada di mesin yang sama dengan server, Buka file konfigurasi di header Settings akan membukanya, dan adaptor membacanya ulang pada permintaan berikutnya. Untuk endpoint ini, lima hal perlu diperhatikan:
- Jendela konteks dan token keluaran maksimum — di formulir, pada Pengaturan yang disesuaikan → Opsi model. ID yang dimasukkan secara manual tidak membawa keduanya, sehingga nilai cadangan rute berlaku: konteks 262,144 token dan keluaran 32,768 token, menurut README
llm-pi-ai— dan dalam pengujian, kedua penyedia kustom meminta tepatmax_tokens: 32768. Setiap ID dalam tabel di atas mendukung nilai yang lebih besar; periksa barisnya, lalu tingkatkan dari entri katalog model jika Anda menginginkan nilai yang lebih besar. Kunavo menagihkan token yang ditulis model, bukan batasnya. compat.supportsDeveloperRole— tidak diperlukan. Harness menyarankannya untuk gateway yang menolak perandeveloper; Kunavo membaca peran itu sebagai giliran sistem pada setiap keluarga, termasuk Claude. (Hingga 2026-09-30, jalur Claude menghilangkannya, dan item ini menyarankan Anda mengaktifkan sakelar tersebut — jika tetap aktif, itu tidak berbahaya.)compat.maxTokensField— biarkan sebagaimana adanya. Harness memasangkannya dengan sakelar di atas sebagai perbaikan pertama yang lazim, tetapi penangan Kunavo sendiri membacamax_completion_tokensdan menggunakanmax_tokenssebagai nilai cadangan, sehingga nilai default sudah berfungsi.reasoningEfforts— tidak ada kolom untuknya di formulir. Model yang Anda masukkan secara manual tidak mendeklarasikan tingkat penalaran, sehingga menu Upaya tidak muncul dan default endpoint menentukan apakah model akan berpikir. Deklarasikan tingkatnya sendiri jika Anda menginginkan menu; padaopenai-completionssetiap kunci adalah satu tingkat, dan nilainya adalah penulisan yang dikirim sebagaireasoning_effort. Ini menjangkau IDgpt-; pada IDclaude-, pengaturan ini tidak berpengaruh karena antarmuka obrolan Kunavo tidak meneruskanreasoning_effortke Anthropic (/docs/chat#reasoning).- Jenis input (
input: [text, image]di dalam file) — dokumentasi dengan jelas menyatakan bahwa ini “menyatakan klaim tentang endpoint Anda, bukan memeriksanya”. Mencentang Image pada ID yang tidak menerima gambar tidak akan terdeteksi oleh harness; permintaan akan ditolak lebih lanjut dalam proses. Periksa ID di/modelssebelum mencentang kotak.
Bagian lain yang dikirim sesi — 24 definisi alat per giliran, permintaan judul singkat untuk setiap sesi baru, dan kolom tambahan pada rute DeepSeek sendiri — dihitung dalam Harga DeepSeek Harness.
Pertanyaan umum
Bagaimana cara menambahkan penyedia API kustom ke DeepSeek Harness?
Jalankan Web UI dengan dsh web, buka Settings → Models, lalu pilih "Add model provider". Kartu terbuka pada "Third-party model provider", yang hanya menampilkan penyedia yang disertakan dalam dsh; ubah ke "Custom model API". Formulir meminta Provider ID dalam huruf kecil, nama tampilan, URL dasar, protokol API, dan kunci API, lalu setidaknya satu model di bagian Model catalog. Provider ID bersifat permanen karena permintaan, sesi tersimpan, default model, dan referensi kredensial semuanya menggunakannya; untuk mengganti nama, Anda harus menambahkan penyedia baru dan menghapus yang lama. Pada 0.2.0-rc.2, halaman ini menyimpan konfigurasi ke cordis.patch.yml profil aktif — $DSH_HOME/profiles/web/cordis.patch.yml saat menjalankan dsh web.
Apakah URL dasar DeepSeek Harness harus diakhiri dengan /v1?
Tergantung protokol API. Untuk openai-completions, ya: https://api.kunavo.com/v1, yang dalam pengujian dsh 0.2.0-rc.2 mengirim permintaan ke /v1/chat/completions. Untuk anthropic-messages, tidak: https://api.kunavo.com, karena dsh menambahkan /v1/messages sendiri — root tanpa sufiks mengirim permintaan ke /v1/messages?beta=true, sedangkan URL dasar yang diakhiri /v1 mengirim permintaan ke /v1/v1/messages, yang akan dijawab gateway sungguhan dengan 404, bukan kesalahan autentikasi. Pengujian dilakukan terhadap sistem pengganti lokal yang merekam permintaan, bukan terhadap Kunavo.
Bisakah DeepSeek Harness menggunakan model Claude atau GPT, bukan DeepSeek?
Ya. Kolom protokol API menunjukkan format wire, bukan vendor: openai-completions adalah OpenAI Chat Completions, openai-responses adalah Responses API, dan anthropic-messages adalah Anthropic Messages API. Penyedia kustom meneruskan ID model Anda langsung ke URL dasar yang dikonfigurasi, sehingga ID Claude atau GPT ditentukan di endpoint tersebut, bukan di dalam harness. Di Kunavo, penyedia openai-completions di https://api.kunavo.com/v1 dapat menjangkau ID Claude dan GPT; penyedia kedua dengan anthropic-messages di https://api.kunavo.com hanya dapat menjangkau ID Claude, dalam format permintaan Anthropic sendiri. Keduanya berada di samping kartu DeepSeek bawaan, bukan menggantikannya, sehingga ID DeepSeek tetap menggunakan kunci DeepSeek Anda.
Apa yang dikirim DeepSeek Harness ke penyedia kustom?
Dalam pengujian terekam dsh 0.2.0-rc.2, kedua penyedia kustom — openai-completions dan anthropic-messages — mengirim 24 definisi alat pada setiap giliran agen, meminta max_tokens 32,768, yang merupakan nilai cadangan harness untuk model yang dimasukkan tanpa ukuran, dan membuat satu permintaan judul singkat per sesi baru dengan max_tokens 64. Keduanya tidak mengirim dsh_session_log atau dsh_plugin_packages: kedua kolom tersebut, yaitu log peristiwa sesi dan daftar plugin terpasang, hanya dikirim melalui rute DeepSeek bawaan. Pengujian menggunakan sistem pengganti yang merekam permintaan, bukan Kunavo, sehingga menunjukkan apa yang dikirim dsh, bukan apa yang dilakukan penyedia mana pun terhadapnya.
Mengapa DeepSeek Harness berperilaku seolah mengabaikan prompt sistem saya?
Periksa apakah model mendeklarasikan tingkat penalaran. Pada openai-completions, harness mengirim prompt sistem model penalaran dengan peran "developer", bukan "system", karena harness menyimpulkan format permintaan dari URL endpoint dan menganggap alamat yang tidak dikenal sebagai alamat selain OpenAI sendiri. Kunavo membaca peran tersebut sebagai giliran sistem pada setiap keluarga model, termasuk Claude, sehingga prompt tetap sampai saat menggunakan Kunavo. Hingga 2026-09-30, jalur Claude diam-diam menghilangkan peran tersebut; jika prompt hilang sebelum tanggal itu, itulah penyebabnya, dan compat.supportsDeveloperRole: false pada rute atau model di cordis.patch.yml profil merupakan solusi sementara. Pengaturan itu kini tidak diperlukan, tetapi tidak berbahaya jika tetap ada. Penyedia anthropic-messages tidak pernah mengirim peran tersebut: prompt sistemnya dikirim sebagai kolom system tingkat atas milik Anthropic.
Mengapa "Ambil model yang tersedia" tidak menampilkan apa pun atau menghasilkan 401 di DeepSeek Harness?
Penemuan model menggunakan URL dasar, protokol, dan kunci yang saat ini ada di formulir, sehingga 401 biasanya mengarah pada masalah kunci, sedangkan daftar kosong mengarah pada URL dasar atau format daftar yang tidak dibaca oleh penemuan model. Harness mendokumentasikan kedua kemungkinan tersebut dan menyarankan memasukkan ID secara manual, yang berfungsi dengan cara yang sama. Kedua protokol mengirim kunci dengan cara berbeda — openai-completions menggunakan Authorization: Bearer, sedangkan anthropic-messages menggunakan header x-api-key milik Anthropic — dan daftar model Kunavo menerima keduanya. Pastikan bagian mana yang bermasalah dengan menjalankan curl biasa ke https://api.kunavo.com/v1/models menggunakan kunci yang sama di header yang sama: jika JSON dikembalikan, masalahnya ada di formulir; 401 berarti masalah kunci; 404 berarti masalah URL. Pada anthropic-messages, daftar lengkap menyisakan dua hal yang belum dipastikan: apakah URL dasar benar, karena penemuan model menghapus satu /v1 di akhir URL daftar sedangkan permintaan model tidak; dan ID mana yang dapat dipanggil oleh penyedia, karena daftar tersebut mencakup seluruh katalog dan hanya ID claude- yang berfungsi di sana. Penyedia bawaan selalu mengambil jawaban dari katalog terpasang, meskipun URL dasarnya mengarah ke tempat lain, jadi gunakan penyedia kustom untuk melihat apa yang benar-benar disediakan endpoint.