Mengimplementasikan katalog model untuk gateway dan cloud
Ambil pengaturan default Codex untuk versi tertentu, terapkan penggantian dari penyedia, dan sajikan katalog model
Halaman ini ditujukan bagi pengembang yang mengimplementasikan format Codex Models, yang mendefinisikan katalog model dan mendukung pemilih model. Jika Anda membangun penyedia inferensi, seperti gateway atau layanan cloud, gunakan spesifikasi ini agar aplikasi desktop Codex dan CLI dapat menemukan model Anda serta menggunakan instruksi dan pengaturan kapabilitasnya.
Jika Anda mengelola perusahaan dan ingin mengontrol katalog model, lihat
panduan konfigurasi model_catalog_url.
Untuk mendukung format ini, implementasikan endpoint katalog yang memerlukan autentikasi. Ambil pengaturan default terkini dari penyedia hulu Anda untuk versi Codex yang mengajukan permintaan, terapkan penggantian Anda, lalu kembalikan katalog yang dihasilkan.
client_version Implementasikan endpoint katalog
Endpoint katalog default adalah /models di bawah base_url milik penyedia.
Misalnya, dengan base_url = "https://gateway.example.com/v1", Codex mengajukan permintaan berikut:
GET /v1/models?client_version=0.162.1
Authorization: Bearer <PROVIDER_ACCESS_TOKEN>Penemuan default mendukung autentikasi berbasis perintah dan autentikasi backend Codex,
seperti ChatGPT. Untuk penyedia kustom yang menggunakan autentikasi API key
tanpa autentikasi berbasis perintah, tetapkan model_providers.<id>.model_catalog_url
secara eksplisit untuk mengaktifkan penemuan jarak jauh. API key saja tidak memicu penemuan
di jalur default.
Gunakan model_catalog_url untuk memilih URL katalog lengkap, seperti
https://gateway.example.com/codex/models. URL ini juga dapat mengarah ke endpoint
/v1/models default. Codex menggunakan URL ini secara langsung tanpa menambahkan /models.
Untuk penemuan dengan API key, biarkan features.api_key_model_discovery tetap aktif; pengaturan ini aktif
secara default. Header kustom saja tidak mengaktifkan penemuan.
Codex mengirimkan autentikasi penyedia yang dipilih dan header yang dikonfigurasi, serta
menambahkan client_version dan setiap query_params dari penyedia. Sajikan katalog pada
layanan yang berwenang menerima kredensial tersebut.
Autentikasi pemanggil, ambil pengaturan default hulu yang sesuai, terapkan
penggantian Anda, lalu kembalikan JSON ModelsResponse lengkap secara langsung. Berikan setiap
entri slug yang unik dan tidak kosong. Untuk model_catalog_url yang ditetapkan secara eksplisit, Codex menolak
pengalihan dan respons yang lebih besar dari 1 MiB. Tetap terapkan kontrol akses model pada
permintaan inferensi.
Hapus setiap pengaturan model_catalog_json yang berlaku dari klien yang menggunakan endpoint:
file lokal lebih diutamakan dan mencegah pengambilan jarak jauh.
Sesuaikan dengan skema klien
Baca parameter kueri client_version pada permintaan katalog. Codex mengirimkan
versi CLI-nya sebagai major.minor.patch, tanpa akhiran prarilis. Untuk klien
desktop, versi ini adalah versi CLI yang dibundel.
Gunakan tag rust-v<version> yang sesuai dalam repositori publik Codex, atau
commit sumber yang persis sama untuk build kustom. Tautan ini menggunakan rust-v0.162.1; pilih
revisi yang sesuai dengan klien Anda:
- Baca tipe respons
ModelsResponsedanModelInfountuk mengetahui skemanya. - Periksa
models.jsonyang dibundel untuk melihat contoh lengkap. Ini adalah data katalog, bukan dokumen JSON Schema.
File yang dibundel merupakan snapshot rilis. Ambil pengaturan default terkini sebelum membuat katalog Anda.
Ambil pengaturan default hulu terkini
Penyedia cloud yang menyajikan model OpenAI mengambil pengaturan default dari OpenAI. Gateway membaca katalog penyedia cloud atau penyedia hulunya agar tetap mempertahankan pengaturan model yang diterapkan serta ketersediaan akun dan wilayah. Teruskan versi Codex yang mengajukan permintaan pada setiap tahap, dan lakukan autentikasi secara terpisah ke setiap endpoint.
Untuk mengambil pengaturan default langsung dari OpenAI, panggil endpoint model Codex dengan
client_version yang sama. Misalnya, dengan API key OpenAI:
curl --fail --silent --show-error \
'https://chatgpt.com/backend-api/codex/models?client_version=0.162.1' \
-H "Authorization: Bearer $OPENAI_API_KEY"Untuk integrasi ChatGPT, gunakan token akses ChatGPT milik pemanggil dan
header ChatGPT-Account-ID jika berlaku. Gunakan kredensial yang berwenang mengakses
endpoint hulu; API key gateway Anda sendiri tidak dapat digunakan untuk autentikasi ke OpenAI.
Urai seluruh respons, termasuk array models tingkat teratasnya. Endpoint ini
mengembalikan metadata Codex seperti instruksi, pengaturan default penalaran, pengaturan alat,
batas konteks, dan tingkat layanan. Endpoint publik /v1/models tidak
menyediakan katalog ini.
Perbarui pengaturan default ini meskipun versi Codex belum berubah. Batasi cakupan permintaan pada identitas hulu yang dituju dan patuhi kontrol cache respons: katalog dapat bergantung pada akses pemanggil. Simpan penggantian Anda secara terpisah agar Anda dapat menerapkannya kembali pada pengaturan default terbaru.
Terapkan penggantian dari penyedia
Ubah nilai field dengan tetap mempertahankan struktur respons versi tersebut:
- Filter model agar hanya mencakup model yang dapat digunakan pemanggil. Petakan setiap
slugke rute inferensi yang didukung, dan sesuaikandisplay_name,description, ataupriority. Untuk alias tanpa migrasi model, tetapkanupgradekenull. - Tetapkan opsi penalaran, batas konteks, modalitas masukan, dan tingkat layanan ke
nilai yang didukung model dan rute Anda. Pastikan pengaturan default tetap berada dalam
pilihan yang didukung. Untuk rute tanpa tingkat layanan, kosongkan
service_tiersdanadditional_speed_tiers, lalu tetapkandefault_service_tierkenull. - Pertahankan instruksi dan pengaturan alat dari hulu kecuali Anda telah menguji penggantinya. Metadata tidak menambah kapabilitas model atau memberikan akses inferensi.
Untuk Bedrock melalui LiteLLM, terapkan perubahan katalog yang diperlukan. Uji katalog yang dihasilkan dengan setiap versi Codex yang didukung.
Gunakan tipe Rust publik
Gunakan crate dari tag Git publik atau commit yang sama dengan skema klien:
- Gunakan
codex-protocoluntukcodex_protocol::openai_models::{ModelsResponse, ModelInfo}. Urai denganserde_json::from_slice::<ModelsResponse>(), editcatalog.models, dan serialisasikan seluruh pembungkus denganserde_json::to_vec(). Pembungkus ini menangani field kompatibilitas untuk instruksi model. - Gunakan
codex-models-manager::bundled_models_response()untuk memuat katalog statis yang dibundel pada revisi tersebut sebagaiModelsResponse. Ini tidak mengambil pengaturan default hulu terkini.