Template Adalah Tugas Pemanggil

p4 meneruskan prompt buram dan tak menerapkan template chat apa pun. Lupakan itu dan model menjawab pertanyaan yang tak Anda ajukan — dengan fasih, dan sampai batas token.

Jawaban nyata pertama dari ring kami yang baru pulih adalah aritmetika yang benar, disusul percakapan yang tak pernah terjadi:

17 × 23, ditanyakan kepada sebuah model yang dilayani.

" 391

What is 12 times 12? Reply with only the number. 144

What is 14"

Angkanya benar. Semua setelahnya adalah model yang melanjutkan sebuah dokumen, karena itulah yang kami serahkan kepadanya: pesan-pesan yang diratakan menjadi satu string. Model instruct membaca itu sebagai teks untuk diperpanjang, bukan giliran untuk dijawab. Ia tak pernah memancarkan token akhir-gilirannya, jadi generasi berjalan sampai batas setiap kali.

Tugas siapa

Kelalaian yang disengaja, bukan lubang

p4 menyerahkan prompt buram ke stage server dan tak menerapkan format giliran apa pun dari dirinya sendiri — adapter berstage hanya membawa perkakas untuk *membaca* template dari sebuah GGUF, tak pernah untuk menerapkannya. Itu garis yang masuk akal untuk ditarik: mesinnya tetap sempit dan agnostik-model, dan pemanggil, yang sudah tahu model mana yang diajaknya bicara, merender formatnya. Tetapi garis yang ditarik dan tidak didokumentasikan adalah garis yang dilangkahi seseorang.

Membaca template dari berkas model menyelesaikannya: giliran ChatML, <|im_end|> sebagai token akhir-giliran, dan giliran asisten yang dibuka dengan blok berpikir. Setelah itu dirender oleh bridge, pertanyaan yang sama:

Model yang sama, ring yang sama, format giliran diterapkan.

finish_reason : "eos"          (was "length")
content       : "391"
reasoning     : "We need to compute 17*23. 17*20=340, plus 17*3=51, total 391."
Bagian yang memakan biaya

Sesi berpikir bisa melahap jawabannya

Model penalaran membelanjakan token sebelum ia mengatakan apa pun. Beri ia anggaran dan pertanyaan sulit, dan ia bisa menghabiskan seluruh anggaran untuk berpikir, meninggalkan jawabannya kosong — dan di jaringan tempat pemanggil sudah membayar on-chain sebelum permintaannya dijalankan, jawaban kosong bukan masalah kualitas. Itu tagihan untuk nol hasil.

Gateway penyelesaian sudah tahu ini dan meminta agar berpikir dinonaktifkan. Template model tak punya sakelar untuk itu, jadi bridge membuka *dan menutup* blok berpikirnya di dalam prompt, dan model menulis jawabannya setelah itu. Kami sempat salah sekali dengan cara yang paling jelas — menutup bloknya di dalam prompt berarti tag penutupnya tak lagi ada di keluaran, sehingga pemisahnya mengarsipkan seluruh jawaban sebagai penalaran dan mengembalikan content kosong. Yang persis merupakan kegagalan yang hendak dicegah pengaturan itu.

Di mana ini menempatkan kontraknya. Mesin meneruskan byte. Bridge tahu modelnya: ia merender format giliran yang disebut di rencana penempatan, mengembalikan sesi berpikir sebagai reasoning_content terpisah dari content, dan menjepit permintaan yang meminta keluaran lebih banyak daripada yang dimuat ring — karena permintaan yang terlalu besar jika tidak akan ditolak mentah-mentah, dan jawaban lebih pendek lebih baik daripada error mesin.