{
  "aboutHtml": "<p>Gemini 3.1 Pro Preview Custom Tools ialah varian khusus Google untuk aliran kerja ejen yang mencampurkan arahan terminal dengan alat tersuai. Tingkah laku pembezanya ialah mengutamakan alat takrifan aplikasi, dengan pengeluar memberikan view_file dan search_code sebagai contoh. Ia merupakan varian bernama berasingan Gemini 3.1 Pro Preview, bukannya label lain bagi setiap permintaan Pro. Tugas yang berguna bergantung pada alat betul untuk mendapatkan bukti sebelum menyediakan hasil teks akhir.</p><p>Barisan Pro Preview menerima teks, imej, video, audio dan PDF serta mengembalikan teks. Pembuat menyenaraikan had input 1,048,576 token dan had output 65,536 token bagi barisan itu. Penyiasatan repositori boleh menggabungkan fail sumber, keperluan bertulis dan tangkapan skrin antara muka; aliran kerja dokumen boleh menggabungkan halaman dan soalan. Labelkan sumber dan tetapkan artifak akhir supaya belanjawan input besar menyokong tugas khusus, bukannya longgokan arkib tanpa fokus.</p><p>Untuk ejen perisian, tetapkan matlamat, alat tersedia dan skop perubahan yang diminta. Alat carian tersuai mungkin mengembalikan lokasi fail sepadan, manakala alat baca fail membekalkan kandungan berkaitan yang tepat. Nyatakan argumen yang diterima dan medan yang dikembalikannya. Aplikasi melaksanakan panggilan diterima dan menghantar hasil kembali kepada model, yang boleh memilih langkah seterusnya berdasarkan perkara yang benar-benar berlaku. Laluan yang dikembalikan ialah bukti hasil carian, bukannya bukti fail diubah atau ujian dijalankan.</p><p>Varian Custom Tools ditujukan untuk keadaan apabila tindakan khusus itu perlu didahulukan daripada arahan bash umum. Contohnya, ejen boleh mencari pelaksanaan tingkah laku bernama dahulu, membaca fail berkaitan, membandingkannya dengan keperluan pengguna dan kemudian mencadangkan perubahan terbatas. Tetapkan antara muka dan tingkah laku yang mesti dikekalkan, serta minta senarai akhir perubahan cadangan bersama maklumat sumber yang digunakan. Jika pelaksana ujian terkawal tersedia, kembalikan hasil sebenar sebelum meminta kesimpulan tentang perubahan.</p><p>Dokumentasi 3.1 Pro pembuat merangkumi pemikiran, output berstruktur dan pemanggilan fungsi, bersama pelaksanaan kod, pembumian carian, pembumian Google Maps, konteks URL dan cache. Senarai carian failnya dihadkan secara jelas kepada Google AI Studio. Oleh itu, ketersediaan alat ialah sebahagian daripada antara muka pengeluar terpilih dan persediaan aplikasi. Keutamaan khas varian untuk alat tersuai tidak dengan sendirinya membekalkan alat itu atau menjalankan operasi luar. Simpan rekod nama fungsi, argumen yang disahkan dan hasil bagi setiap tindakan aplikasi yang selesai.</p><p>Panduan Gemini 3 menerangkan aras pemikiran low, medium dan high bagi 3.1 Pro, dengan high sebagai lalai. Ini ialah peruntukan analisis relatif, bukannya jaminan token ketat. Pilih aras mengikut tugas dan berikan arahan terus, bukannya ritual prom yang rumit. Jika output berstruktur diperlukan, tetapkan medan, jenis dan peraturan nilai tiada. Untuk laporan pelaksanaan, rekod akhir boleh mengenal pasti fail diperiksa, tingkah laku wajib, pengubahsuaian dicadangkan dan persoalan berbaki. Semak bahawa setiap entri berpunca daripada hasil alat atau sumber sebenar.</p><p>Ejen berbilang giliran mesti mengekalkan perbualan dan konteks penaakulan wajib. Panduan pembuat menerangkan tandatangan pemikiran serta membezakan sejarah berkeadaan terurus daripada sejarah tanpa keadaan yang diurus secara manual. Gunakan pengendalian yang didokumenkan dalam antara muka terpilih, terutamanya semasa menyambung selepas hasil alat. Untuk bahan sumber panjang, letakkan soalan khusus selepas konteks dan kaitkan jawapan diminta dengannya. Panduan turut mengesyorkan temperature lalai 1.0, daripada memindahkan tetapan suhu rendah yang mungkin menyebabkan gelung dalam tugas kompleks.</p><p>Pengeluar memberi amaran bahawa kualiti boleh berubah-ubah dalam kes penggunaan yang tidak mendapat manfaat daripada alat tersuai. Ini ialah sempadan pemilihan bermakna: gunakan profil ini untuk ejen berpusatkan alat daripada mengandaikan penambahbaikan umum bagi setiap prom terpencil. Output teks boleh berupa pelan, cadangan kod, penerangan atau hasil berstruktur; input imej atau audio tidak menjadikan varian penjana media. Semak kod dicadangkan, sahkan pengiraan dan bezakan operasi disahkan daripada cadangan. Kekalkan identiti model Custom Tools yang tepat bersama tugas, takrif alat dan bukti dikembalikan supaya sambungan kemudian mempunyai asas konkrit.</p>",
  "aboutText": "Gemini 3.1 Pro Preview Custom Tools ialah varian khusus Google untuk aliran kerja ejen yang mencampurkan arahan terminal dengan alat tersuai. Tingkah laku pembezanya ialah mengutamakan alat takrifan aplikasi, dengan pengeluar memberikan view_file dan search_code sebagai contoh. Ia merupakan varian bernama berasingan Gemini 3.1 Pro Preview, bukannya label lain bagi setiap permintaan Pro. Tugas yang berguna bergantung pada alat betul untuk mendapatkan bukti sebelum menyediakan hasil teks akhir.\n\nBarisan Pro Preview menerima teks, imej, video, audio dan PDF serta mengembalikan teks. Pembuat menyenaraikan had input 1,048,576 token dan had output 65,536 token bagi barisan itu. Penyiasatan repositori boleh menggabungkan fail sumber, keperluan bertulis dan tangkapan skrin antara muka; aliran kerja dokumen boleh menggabungkan halaman dan soalan. Labelkan sumber dan tetapkan artifak akhir supaya belanjawan input besar menyokong tugas khusus, bukannya longgokan arkib tanpa fokus.\n\nUntuk ejen perisian, tetapkan matlamat, alat tersedia dan skop perubahan yang diminta. Alat carian tersuai mungkin mengembalikan lokasi fail sepadan, manakala alat baca fail membekalkan kandungan berkaitan yang tepat. Nyatakan argumen yang diterima dan medan yang dikembalikannya. Aplikasi melaksanakan panggilan diterima dan menghantar hasil kembali kepada model, yang boleh memilih langkah seterusnya berdasarkan perkara yang benar-benar berlaku. Laluan yang dikembalikan ialah bukti hasil carian, bukannya bukti fail diubah atau ujian dijalankan.\n\nVarian Custom Tools ditujukan untuk keadaan apabila tindakan khusus itu perlu didahulukan daripada arahan bash umum. Contohnya, ejen boleh mencari pelaksanaan tingkah laku bernama dahulu, membaca fail berkaitan, membandingkannya dengan keperluan pengguna dan kemudian mencadangkan perubahan terbatas. Tetapkan antara muka dan tingkah laku yang mesti dikekalkan, serta minta senarai akhir perubahan cadangan bersama maklumat sumber yang digunakan. Jika pelaksana ujian terkawal tersedia, kembalikan hasil sebenar sebelum meminta kesimpulan tentang perubahan.\n\nDokumentasi 3.1 Pro pembuat merangkumi pemikiran, output berstruktur dan pemanggilan fungsi, bersama pelaksanaan kod, pembumian carian, pembumian Google Maps, konteks URL dan cache. Senarai carian failnya dihadkan secara jelas kepada Google AI Studio. Oleh itu, ketersediaan alat ialah sebahagian daripada antara muka pengeluar terpilih dan persediaan aplikasi. Keutamaan khas varian untuk alat tersuai tidak dengan sendirinya membekalkan alat itu atau menjalankan operasi luar. Simpan rekod nama fungsi, argumen yang disahkan dan hasil bagi setiap tindakan aplikasi yang selesai.\n\nPanduan Gemini 3 menerangkan aras pemikiran low, medium dan high bagi 3.1 Pro, dengan high sebagai lalai. Ini ialah peruntukan analisis relatif, bukannya jaminan token ketat. Pilih aras mengikut tugas dan berikan arahan terus, bukannya ritual prom yang rumit. Jika output berstruktur diperlukan, tetapkan medan, jenis dan peraturan nilai tiada. Untuk laporan pelaksanaan, rekod akhir boleh mengenal pasti fail diperiksa, tingkah laku wajib, pengubahsuaian dicadangkan dan persoalan berbaki. Semak bahawa setiap entri berpunca daripada hasil alat atau sumber sebenar.\n\nEjen berbilang giliran mesti mengekalkan perbualan dan konteks penaakulan wajib. Panduan pembuat menerangkan tandatangan pemikiran serta membezakan sejarah berkeadaan terurus daripada sejarah tanpa keadaan yang diurus secara manual. Gunakan pengendalian yang didokumenkan dalam antara muka terpilih, terutamanya semasa menyambung selepas hasil alat. Untuk bahan sumber panjang, letakkan soalan khusus selepas konteks dan kaitkan jawapan diminta dengannya. Panduan turut mengesyorkan temperature lalai 1.0, daripada memindahkan tetapan suhu rendah yang mungkin menyebabkan gelung dalam tugas kompleks.\n\nPengeluar memberi amaran bahawa kualiti boleh berubah-ubah dalam kes penggunaan yang tidak mendapat manfaat daripada alat tersuai. Ini ialah sempadan pemilihan bermakna: gunakan profil ini untuk ejen berpusatkan alat daripada mengandaikan penambahbaikan umum bagi setiap prom terpencil. Output teks boleh berupa pelan, cadangan kod, penerangan atau hasil berstruktur; input imej atau audio tidak menjadikan varian penjana media. Semak kod dicadangkan, sahkan pengiraan dan bezakan operasi disahkan daripada cadangan. Kekalkan identiti model Custom Tools yang tepat bersama tugas, takrif alat dan bukti dikembalikan supaya sambungan kemudian mempunyai asas konkrit.",
  "editorialOverlay": {
    "copy_fields": {
      "practical_html": "<h3>Tugas praktikal</h3><p>Contoh teknikal dalam bahasa Inggeris</p><pre><code>Interpret custom-tool evidence\n\nUse this supplied tool transcript. search_code returned settings.py:12 and view_file returned: &#x27;RETRY_LIMIT = 3&#x27;. No edit or test result is present. Requirement: increase the retry limit to five. Return the examined file, the exact proposed edit and the remaining check. Distinguish the retrieved value from actions that have not occurred.</code></pre><h4>Hasil yang dijangka</h4><pre><code>A file-linked proposed edit and an explicitly unexecuted validation step.</code></pre><h4>Semak hasil</h4><pre><code>The answer must not claim that settings.py was changed or a test passed.</code></pre>"
    },
    "copy_sha256": "b98c86b2fb771b4e636d2df431f6657b6b541861b05ca6f80f95f94a6b62077e",
    "copy_source": {
      "locale": "ms",
      "pack_sha256": "0f56d90ba41881e1134accf82e57338f246f8753ca4c0cee929aaffada5d10e7",
      "record_model_id": "google/gemini-3.1-pro-preview-customtools",
      "source_facts_sha256": "c8f1c8a486dfa0ef9dbfadc3e62105fda24a57798cad0dc088c4108c58919518",
      "validation_sha256": "a2ac2f28056280fc0b2ea34a501bf156d5ce155406e57e708edf30bfdf6bfdc6"
    },
    "html_sha256": "34df77cbd56a43e29343102608b63f204fa71da97dad559645f16b36197fe150",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ms",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">G</span><h2 id=\"sheet-title\">Google: Gemini 3.1 Pro Preview Custom Tools</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Tutup\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemini-3.1-pro-preview-customtools</code><button type=\"button\" id=\"copy-id\">Salin ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Bahagian kad model\"><button type=\"button\" data-card-jump=\"overview\">Pengenalan</button><button type=\"button\" data-card-jump=\"methods\">Input &amp; kaedah</button><button type=\"button\" data-card-jump=\"pricing\">Pelan harga</button><button type=\"button\" data-card-jump=\"examples\">Contoh</button><button type=\"button\" data-card-jump=\"results\">Hasil</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Kaedah API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|chat|/v1/chat/completions|google%2Fgemini-3.1-pro-preview-customtools\">Chat</button><button type=\"button\" role=\"tab\" tabindex=\"-1\" aria-controls=\"card-method-content\" aria-selected=\"false\" id=\"card-method-tab-1\" data-card-method=\"Ultra|messages|/v1/messages|google%2Fgemini-3.1-pro-preview-customtools\">Messages</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Pengenalan</h3><p class=\"mdesc-full\">Gemini 3.1 Pro Preview Custom Tools ialah varian berorientasikan ejen yang berbeza dan mengutamakan alat takrifan aplikasi bersama arahan terminal. Gunakannya apabila tindakan seperti membaca fail atau mencari kod perlu memacu tugas berbilang langkah, dengan aplikasi melaksanakan dan mengembalikan setiap hasil alat.</p><dl class=\"card-io\" data-card-io><div><dt>Input yang diterima</dt><dd>Teks</dd></div><div><dt>Hasil</dt><dd>Teks</dd></div></dl><details class=\"card-about\"><summary>Tentang model</summary><p class=\"note-s\" data-model-method-boundary>Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.</p><div class=\"mabout\" id=\"m-about\"><p>Gemini 3.1 Pro Preview Custom Tools ialah varian khusus Google untuk aliran kerja ejen yang mencampurkan arahan terminal dengan alat tersuai. Tingkah laku pembezanya ialah mengutamakan alat takrifan aplikasi, dengan pengeluar memberikan view_file dan search_code sebagai contoh. Ia merupakan varian bernama berasingan Gemini 3.1 Pro Preview, bukannya label lain bagi setiap permintaan Pro. Tugas yang berguna bergantung pada alat betul untuk mendapatkan bukti sebelum menyediakan hasil teks akhir.</p><p>Barisan Pro Preview menerima teks, imej, video, audio dan PDF serta mengembalikan teks. Pembuat menyenaraikan had input 1,048,576 token dan had output 65,536 token bagi barisan itu. Penyiasatan repositori boleh menggabungkan fail sumber, keperluan bertulis dan tangkapan skrin antara muka; aliran kerja dokumen boleh menggabungkan halaman dan soalan. Labelkan sumber dan tetapkan artifak akhir supaya belanjawan input besar menyokong tugas khusus, bukannya longgokan arkib tanpa fokus.</p><p>Untuk ejen perisian, tetapkan matlamat, alat tersedia dan skop perubahan yang diminta. Alat carian tersuai mungkin mengembalikan lokasi fail sepadan, manakala alat baca fail membekalkan kandungan berkaitan yang tepat. Nyatakan argumen yang diterima dan medan yang dikembalikannya. Aplikasi melaksanakan panggilan diterima dan menghantar hasil kembali kepada model, yang boleh memilih langkah seterusnya berdasarkan perkara yang benar-benar berlaku. Laluan yang dikembalikan ialah bukti hasil carian, bukannya bukti fail diubah atau ujian dijalankan.</p><p>Varian Custom Tools ditujukan untuk keadaan apabila tindakan khusus itu perlu didahulukan daripada arahan bash umum. Contohnya, ejen boleh mencari pelaksanaan tingkah laku bernama dahulu, membaca fail berkaitan, membandingkannya dengan keperluan pengguna dan kemudian mencadangkan perubahan terbatas. Tetapkan antara muka dan tingkah laku yang mesti dikekalkan, serta minta senarai akhir perubahan cadangan bersama maklumat sumber yang digunakan. Jika pelaksana ujian terkawal tersedia, kembalikan hasil sebenar sebelum meminta kesimpulan tentang perubahan.</p><p>Dokumentasi 3.1 Pro pembuat merangkumi pemikiran, output berstruktur dan pemanggilan fungsi, bersama pelaksanaan kod, pembumian carian, pembumian Google Maps, konteks URL dan cache. Senarai carian failnya dihadkan secara jelas kepada Google AI Studio. Oleh itu, ketersediaan alat ialah sebahagian daripada antara muka pengeluar terpilih dan persediaan aplikasi. Keutamaan khas varian untuk alat tersuai tidak dengan sendirinya membekalkan alat itu atau menjalankan operasi luar. Simpan rekod nama fungsi, argumen yang disahkan dan hasil bagi setiap tindakan aplikasi yang selesai.</p><p>Panduan Gemini 3 menerangkan aras pemikiran low, medium dan high bagi 3.1 Pro, dengan high sebagai lalai. Ini ialah peruntukan analisis relatif, bukannya jaminan token ketat. Pilih aras mengikut tugas dan berikan arahan terus, bukannya ritual prom yang rumit. Jika output berstruktur diperlukan, tetapkan medan, jenis dan peraturan nilai tiada. Untuk laporan pelaksanaan, rekod akhir boleh mengenal pasti fail diperiksa, tingkah laku wajib, pengubahsuaian dicadangkan dan persoalan berbaki. Semak bahawa setiap entri berpunca daripada hasil alat atau sumber sebenar.</p><p>Ejen berbilang giliran mesti mengekalkan perbualan dan konteks penaakulan wajib. Panduan pembuat menerangkan tandatangan pemikiran serta membezakan sejarah berkeadaan terurus daripada sejarah tanpa keadaan yang diurus secara manual. Gunakan pengendalian yang didokumenkan dalam antara muka terpilih, terutamanya semasa menyambung selepas hasil alat. Untuk bahan sumber panjang, letakkan soalan khusus selepas konteks dan kaitkan jawapan diminta dengannya. Panduan turut mengesyorkan temperature lalai 1.0, daripada memindahkan tetapan suhu rendah yang mungkin menyebabkan gelung dalam tugas kompleks.</p><p>Pengeluar memberi amaran bahawa kualiti boleh berubah-ubah dalam kes penggunaan yang tidak mendapat manfaat daripada alat tersuai. Ini ialah sempadan pemilihan bermakna: gunakan profil ini untuk ejen berpusatkan alat daripada mengandaikan penambahbaikan umum bagi setiap prom terpencil. Output teks boleh berupa pelan, cadangan kod, penerangan atau hasil berstruktur; input imej atau audio tidak menjadikan varian penjana media. Semak kod dicadangkan, sahkan pengiraan dan bezakan operasi disahkan daripada cadangan. Kekalkan identiti model Custom Tools yang tepat bersama tugas, takrif alat dan bukti dikembalikan supaya sambungan kemudian mempunyai asas konkrit.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tersedia di Ailoot · input &amp; kaedah</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · OpenAI Chat</b> <code>POST /v1/chat/completions</code></summary><dl class=\"method-capabilities\"><div><dt>Input</dt><dd><code>text</code></dd></div><div><dt>Output</dt><dd><code>text</code></dd></div><div><dt>Format output</dt><dd>json atau SSE</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Medan</th><th>Jenis</th><th>Keperluan</th><th>Nilai &amp; had</th><th>Lalai</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>google/gemini-3.1-pro-preview-customtools</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>message[]</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Item minimum: 1</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].role</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Contoh: system, user, assistant, tool, function</div><div>Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model.</div><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].content</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string|content_part[]|null</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].tool_calls</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>tool_call[]</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].tool_call_id</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].name</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].reasoning_content</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].reasoning_details</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>object|array</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">max_tokens</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>integer</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Minimum: 1</div><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">max_completion_tokens</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>integer</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Minimum: 1</div><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>boolean</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"known\"><span class=\"card-cell-label\">Lalai</span>false</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">stream_options.include_usage</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>boolean</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">temperature</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>number</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">top_p</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>number</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">stop</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string|string[]</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">tools</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>function_tool[]</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">tools[].type</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>function</div><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">tools[].function.name</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Terpakai apabila: alat fungsi dibekalkan</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">tools[].function.description</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">tools[].function.parameters</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>JSON_schema</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">tool_choice</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string|object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">parallel_tool_calls</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>boolean</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">reasoning_effort</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">reasoning</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">service_tier</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_compatibility\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">instructions</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Medan keserasian</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">functions</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>function[]</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">function_call</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string|object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"model_dependent\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">prompt_cache_options</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div class=\"note-s\">Bergantung pada model</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">modalities</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string[]</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>text</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>object</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Syarat: provider.options ditolak pada laluan teks Ultra ini</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">cache_control.ttl</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>Syarat: 1h ditolak pada lokasi cache prompt yang digunakan</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Gabungan bahan input</summary><p class=\"note-s\"><b>Teks</b> · Teks UTF8</p><p class=\"note-s\"><code>messages[].content</code></p></details><details class=\"note-s\" data-method-contract><summary>Parameter kaedah dan kitar hayat</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrak</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>model, messages</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>text</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>messages</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>tatasusunan mesej dengan struktur role/content</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>file_material</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>dokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>stream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>control_scope</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>khusus model; alat fungsi pengguna berbeza daripada alat yang dihoskan</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>output_modalities</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>text</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>hosted_operations</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>false</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>multimodal_input_binding</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>null</td></tr></tbody></table></div><p>Kitar hayat: <code>synchronous_or_streamed</code></p><p class=\"note-s\">Hantar ID model yang tepat bersama messages.</p><p class=\"note-s\">Panjang konteks bukan had output.</p><p class=\"note-s\">Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Pelan harga</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.</p><dl data-price-conditions><dt>Mod pantas</dt><dd>Kadar standard <span class=\"note-s\">Apabila mod pantas dipilih</span></dd><dt>Mod flex</dt><dd>Kadar standard <span class=\"note-s\">Apabila mod flex dipilih</span></dd><dt>Usaha penaakulan maksimum</dt><dd>Kadar standard <span class=\"note-s\">Apabila usaha penaakulan maksimum menggunakan pelarasan default</span></dd><dt>Usaha penaakulan · high</dt><dd>Kadar standard <span class=\"note-s\">Apabila usaha penaakulan ditetapkan kepada high</span></dd><dt>Usaha penaakulan · low</dt><dd>Kadar standard <span class=\"note-s\">Apabila usaha penaakulan ditetapkan kepada low</span></dd><dt>Usaha penaakulan · medium</dt><dd>Kadar standard <span class=\"note-s\">Apabila usaha penaakulan ditetapkan kepada medium</span></dd><dt>Harga cache eksplisit</dt><dd>Tidak diaktifkan <span class=\"note-s\">Apabila cache eksplisit diminta</span></dd><dt>Output penaakulan</dt><dd>Penaakulan menggunakan kadar subset yang disenaraikan dalam output terkumpul; jangan tambah token tersebut dua kali. <span class=\"note-s\">Apabila output merangkumi token penaakulan</span></dd></dl></div><div data-declared-tariff-pricing><h4>Kadar Ailoot</h4><h4>Harga mengikut konfigurasi</h4><p class=\"note-s\">Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Jadual kadar</th><th>Token konteks, melebihi</th><th>Token konteks, sehingga dan termasuk</th><th>Caj</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Kadar asas token</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>Kadar asas</td><td data-cell-label=\"Token konteks, melebihi\"><span class=\"card-cell-label\">Token konteks, melebihi</span>—</td><td data-cell-label=\"Token konteks, sehingga dan termasuk\"><span class=\"card-cell-label\">Token konteks, sehingga dan termasuk</span>Tiada had atas</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input</span> <b>$0.004</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output</span> <b>$0.024</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache</span> <b>$0.0004</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache</span> <b>$0.00075</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token keluaran penaakulan</span> <b>$0.024</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Tahap panjang permintaan 1</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Token konteks, melebihi\"><span class=\"card-cell-label\">Token konteks, melebihi</span>0</td><td data-cell-label=\"Token konteks, sehingga dan termasuk\"><span class=\"card-cell-label\">Token konteks, sehingga dan termasuk</span>200,000</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input</span> <b>$0.004</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output</span> <b>$0.024</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache</span> <b>$0.0004</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache</span> <b>$0.00075</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Tahap panjang permintaan 2</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Token konteks, melebihi\"><span class=\"card-cell-label\">Token konteks, melebihi</span>200,000</td><td data-cell-label=\"Token konteks, sehingga dan termasuk\"><span class=\"card-cell-label\">Token konteks, sehingga dan termasuk</span>Tiada had atas</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input</span> <b>$0.008</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output</span> <b>$0.036</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache</span> <b>$0.0008</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache</span> <b>$0.00075</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. <a href=\"/docs/ms/billing/reserve/\">Cara rizab dan penyelesaian caj berfungsi →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Contoh permintaan</h3><h4>Ailoot Ultra · OpenAI Chat</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><button class=\"cg-tab\" id=\"model-code-1462-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1462-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl</button><button class=\"cg-tab\" id=\"model-code-1462-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1462-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python SDK</button><button class=\"cg-tab\" id=\"model-code-1462-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1462-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Penstriman Python</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1462-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1462-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;google/gemini-3.1-pro-preview-customtools&quot;, &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Explain the difference between an observation and a hypothesis in three sentences.&quot;}]}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&quot;result.json&quot;).read_text())\nfor x in r.get(&quot;choices&quot;,[]):\n    if x.get(&quot;message&quot;,{}).get(&quot;content&quot;): print(x[&quot;message&quot;][&quot;content&quot;])\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1462-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1462-tab-1\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport os\n\nif not os.environ.get(&quot;AILOOT_API_KEY&quot;, &quot;&quot;).strip(): raise SystemExit(&quot;Set AILOOT_API_KEY before making a request&quot;)\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nresult=client.chat.completions.create(model=&#39;google/gemini-3.1-pro-preview-customtools&#39;,messages=[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;Explain observations and hypotheses in three sentences.&quot;}])\nimport base64, json\nfrom pathlib import Path\n\ndef save_result(data, stem=&quot;result&quot;):\n    # Keep every field, including usage, IDs, reasoning and tool requests.\n    Path(stem + &quot;.json&quot;).write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=&quot;utf-8&quot;)\n    print(json.dumps(data, ensure_ascii=False, indent=2))\n    def save_blob(encoded, suffix, label):\n        raw = base64.b64decode(encoded, altchars=b&quot;-_&quot;, validate=True)\n        ext = &quot;png&quot; if raw.startswith(b&quot;\\x89PNG\\r\\n\\x1a\\n&quot;) else &quot;jpg&quot; if raw.startswith(b&quot;\\xff\\xd8&quot;) else &quot;webp&quot; if raw[:4] == b&quot;RIFF&quot; and raw[8:12] == b&quot;WEBP&quot; else suffix\n        file = Path(stem + &quot;-&quot; + label + &quot;.&quot; + ext)\n        file.write_bytes(raw)\n        print(&quot;Saved&quot;, file)\n    for index, block in enumerate(data.get(&quot;content&quot;) or []):\n        print(&quot;Content&quot;, index, json.dumps(block, ensure_ascii=False))\n    for choice in data.get(&quot;choices&quot;) or []:\n        print(&quot;Choice&quot;, choice.get(&quot;index&quot;), json.dumps(choice.get(&quot;message&quot;, choice.get(&quot;delta&quot;, {})), ensure_ascii=False))\n    for index, item in enumerate(data.get(&quot;output&quot;) or []):\n        print(&quot;Output&quot;, index, json.dumps(item, ensure_ascii=False))\n        if item.get(&quot;type&quot;) == &quot;image_generation_call&quot; and item.get(&quot;result&quot;):\n            save_blob(item[&quot;result&quot;], item.get(&quot;output_format&quot;) or &quot;bin&quot;, &quot;output-&quot; + str(index))\n    for ci, candidate in enumerate(data.get(&quot;candidates&quot;) or []):\n        for pi, part in enumerate((candidate.get(&quot;content&quot;) or {}).get(&quot;parts&quot;) or []):\n            print(&quot;Candidate/part&quot;, ci, pi, json.dumps(part, ensure_ascii=False))\n            blob = part.get(&quot;inlineData&quot;) or part.get(&quot;inline_data&quot;)\n            if blob and blob.get(&quot;data&quot;):\n                mime = blob.get(&quot;mimeType&quot;) or blob.get(&quot;mime_type&quot;)\n                suffix = {&quot;image/png&quot;:&quot;png&quot;, &quot;image/jpeg&quot;:&quot;jpg&quot;, &quot;image/webp&quot;:&quot;webp&quot;, &quot;audio/wav&quot;:&quot;wav&quot;, &quot;audio/mpeg&quot;:&quot;mp3&quot;, &quot;video/mp4&quot;:&quot;mp4&quot;}.get(mime, &quot;bin&quot;)\n                save_blob(blob[&quot;data&quot;], suffix, &quot;candidate-&quot; + str(ci) + &quot;-part-&quot; + str(pi))\n\nsave_result(result.to_dict(mode=&quot;json&quot;))\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1462-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1462-tab-2\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport os\nfrom pathlib import Path\n\nif not os.environ.get(&quot;AILOOT_API_KEY&quot;, &quot;&quot;).strip(): raise SystemExit(&quot;Set AILOOT_API_KEY before making a request&quot;)\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nimport base64, json\nfrom pathlib import Path\n\ndef save_result(data, stem=&quot;result&quot;):\n    # Keep every field, including usage, IDs, reasoning and tool requests.\n    Path(stem + &quot;.json&quot;).write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=&quot;utf-8&quot;)\n    print(json.dumps(data, ensure_ascii=False, indent=2))\n    def save_blob(encoded, suffix, label):\n        raw = base64.b64decode(encoded, altchars=b&quot;-_&quot;, validate=True)\n        ext = &quot;png&quot; if raw.startswith(b&quot;\\x89PNG\\r\\n\\x1a\\n&quot;) else &quot;jpg&quot; if raw.startswith(b&quot;\\xff\\xd8&quot;) else &quot;webp&quot; if raw[:4] == b&quot;RIFF&quot; and raw[8:12] == b&quot;WEBP&quot; else suffix\n        file = Path(stem + &quot;-&quot; + label + &quot;.&quot; + ext)\n        file.write_bytes(raw)\n        print(&quot;Saved&quot;, file)\n    for index, block in enumerate(data.get(&quot;content&quot;) or []):\n        print(&quot;Content&quot;, index, json.dumps(block, ensure_ascii=False))\n    for choice in data.get(&quot;choices&quot;) or []:\n        print(&quot;Choice&quot;, choice.get(&quot;index&quot;), json.dumps(choice.get(&quot;message&quot;, choice.get(&quot;delta&quot;, {})), ensure_ascii=False))\n    for index, item in enumerate(data.get(&quot;output&quot;) or []):\n        print(&quot;Output&quot;, index, json.dumps(item, ensure_ascii=False))\n        if item.get(&quot;type&quot;) == &quot;image_generation_call&quot; and item.get(&quot;result&quot;):\n            save_blob(item[&quot;result&quot;], item.get(&quot;output_format&quot;) or &quot;bin&quot;, &quot;output-&quot; + str(index))\n    for ci, candidate in enumerate(data.get(&quot;candidates&quot;) or []):\n        for pi, part in enumerate((candidate.get(&quot;content&quot;) or {}).get(&quot;parts&quot;) or []):\n            print(&quot;Candidate/part&quot;, ci, pi, json.dumps(part, ensure_ascii=False))\n            blob = part.get(&quot;inlineData&quot;) or part.get(&quot;inline_data&quot;)\n            if blob and blob.get(&quot;data&quot;):\n                mime = blob.get(&quot;mimeType&quot;) or blob.get(&quot;mime_type&quot;)\n                suffix = {&quot;image/png&quot;:&quot;png&quot;, &quot;image/jpeg&quot;:&quot;jpg&quot;, &quot;image/webp&quot;:&quot;webp&quot;, &quot;audio/wav&quot;:&quot;wav&quot;, &quot;audio/mpeg&quot;:&quot;mp3&quot;, &quot;video/mp4&quot;:&quot;mp4&quot;}.get(mime, &quot;bin&quot;)\n                save_blob(blob[&quot;data&quot;], suffix, &quot;candidate-&quot; + str(ci) + &quot;-part-&quot; + str(pi))\n\nwith client.chat.completions.stream(model=&#39;google/gemini-3.1-pro-preview-customtools&#39;,messages=[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;Explain observations and hypotheses in three sentences.&quot;}]) as stream:\n    with Path(&quot;stream-events.jsonl&quot;).open(&quot;w&quot;,encoding=&quot;utf-8&quot;) as log:\n        for event in stream:\n            payload=event.to_dict(mode=&quot;json&quot;)\n            log.write(json.dumps(payload,ensure_ascii=False)+&quot;\\n&quot;); log.flush()\n            print(json.dumps(payload,ensure_ascii=False))\n    final=stream.get_final_completion()\n    save_result(final.to_dict(mode=&quot;json&quot;),&quot;stream-result&quot;)\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Terima dan simpan hasil</h3><h4>Ailoot Ultra · OpenAI Chat</h4><p class=\"note-s\">json atau SSE</p><div class=\"card-result-process\" data-all-results><h5>Simpan semua hasil yang selesai</h5><p class=\"note-s\">Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.</p><p class=\"note-s\">Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jika respons asal perlu disemak</h5><p class=\"note-s\">Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.</p></div><details class=\"card-about\" data-output-fields><summary>Medan respons</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Medan</th><th>Jenis</th></tr></thead><tbody><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">choices[].index</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>integer</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">choices[].message.content</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string|null</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">choices[].message.tool_calls</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>tool_call[]</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">choices[].message.reasoning_content</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">choices[].message.reasoning_details</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>object|array</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">choices[].finish_reason</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string|null</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Ralat dan langkah seterusnya</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respons</th><th>Syarat</th><th>Langkah seterusnya</th></tr></thead><tbody><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Medan wajib, perwakilan bahan atau nilai parameter tidak sah</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Betulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias model</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=google%2Fgemini-3.1-pro-preview-customtools&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-pro-preview-customtools&amp;fmt=chat\"><code>google/gemini-3.1-pro-preview-customtools</code></a></span></p><h4>Alias laluan kaedah</h4><p class=\"note-s\">Gunakan laluan kaedah yang dipaparkan di atas.</p><h4>ID pemanggil berkaitan</h4><p class=\"note-s\"><a href=\"#m=google%2Fgemini-3.1-pro-preview-customtools&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-pro-preview-customtools&amp;fmt=chat\"><code>google/gemini-3.1-pro-preview-customtools</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "fmt": "chat",
        "http": "POST",
        "path": "/v1/chat/completions",
        "request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|chat|/v1/chat/completions|google%2Fgemini-3.1-pro-preview-customtools",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": 0.4,
        "cache_write": 0.75,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every choice and its content/tool calls/reasoning. In SSE assemble deltas by choice/tool index, retain the final finish reason and usage.",
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "errors": [
              {
                "code": null,
                "condition": "Medan wajib, perwakilan bahan atau nilai parameter tidak sah",
                "http_status": 400,
                "recovery": "Betulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [
              "Model context is not an output cap.",
              "A model-dependent field needs the exact published model profile; unspecified defaults/enums are not guessed.",
              "Tool calls propose actions; the client application returns actual observations with the returned call ID.",
              "Guarded canonical keys must occur once; duplicate or case-varied model/tools/cap fields are rejected."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "messages[].content",
                "required_material": "Teks UTF8"
              }
            ],
            "operation_modes": [
              "conversation",
              "function_tool_continuation",
              "streaming"
            ],
            "outputs": {
              "all_results": "Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "choices[].index",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "choices[].message.content",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "choices[].message.tool_calls",
                  "type": "tool_call[]"
                },
                {
                  "description": null,
                  "name": "choices[].message.reasoning_content",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "choices[].message.reasoning_details",
                  "type": "object|array"
                },
                {
                  "description": null,
                  "name": "choices[].finish_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json atau SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-3.1-pro-preview-customtools"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_items": 1,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "model_dependent",
                "conditions": "Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model.",
                "default": null,
                "default_known": false,
                "enum": [
                  "system",
                  "user",
                  "assistant",
                  "tool",
                  "function"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": false,
                "type": "string|content_part[]|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].tool_calls",
                "required": false,
                "type": "tool_call[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].tool_call_id",
                "required": false,
                "type": "string",
                "when": "role=tool; gunakan ID sebenar yang dipulangkan"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].name",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].reasoning_content",
                "required": false,
                "type": "string",
                "when": "Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].reasoning_details",
                "required": false,
                "type": "object|array"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "max_tokens",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "max_completion_tokens",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "stream_options.include_usage",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "temperature",
                "required": false,
                "type": "number"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "top_p",
                "required": false,
                "type": "number"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "stop",
                "required": false,
                "type": "string|string[]"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tools",
                "required": false,
                "type": "function_tool[]"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": [
                  "function"
                ],
                "enum_known": true,
                "name": "tools[].type",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tools[].function.name",
                "required": true,
                "type": "string",
                "when": "alat fungsi dibekalkan"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tools[].function.description",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tools[].function.parameters",
                "required": false,
                "type": "JSON_schema"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tool_choice",
                "required": false,
                "type": "string|object"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "parallel_tool_calls",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "response_format",
                "required": false,
                "type": "object"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "reasoning_effort",
                "required": false,
                "type": "string"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "reasoning",
                "required": false,
                "type": "object"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "service_tier",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_compatibility",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "instructions",
                "required": false,
                "type": "string"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "functions",
                "required": false,
                "type": "function[]"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "function_call",
                "required": false,
                "type": "string|object"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "prompt_cache_options",
                "required": false,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "text"
                ],
                "enum_known": true,
                "name": "modalities",
                "required": false,
                "type": "string[]"
              },
              {
                "availability": "source_interface",
                "conditions": "provider.options ditolak pada laluan teks Ultra ini",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "provider",
                "required": false,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "conditions": "1h ditolak pada lokasi cache prompt yang digunakan",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "cache_control.ttl",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "additional models/models list",
              "plugins",
              "route",
              "hosted tools; ordinary client function tools remain separate",
              "non-text output modalities",
              "provider.options overrides",
              "one-hour prompt-cache TTL"
            ]
          },
          "hints": [
            "Hantar ID model yang tepat bersama messages.",
            "Panjang konteks bukan had output.",
            "Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat."
          ],
          "input": {
            "content_type": "application/json",
            "control_scope": "khusus model; alat fungsi pengguna berbeza daripada alat yang dihoskan",
            "file_material": "dokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan",
            "hosted_operations": false,
            "material_types": [
              "text"
            ],
            "messages": "tatasusunan mesej dengan struktur role/content",
            "multimodal_input_binding": null,
            "optional_controls": [
              "stream",
              "temperature",
              "top_p",
              "stop",
              "max_tokens",
              "max_completion_tokens",
              "reasoning",
              "response_format",
              "tools",
              "tool_choice"
            ],
            "output_modalities": [
              "text"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "mode": "synchronous_or_streamed",
            "unknown": "preserve original request id; no generic chat job retrieval path"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_chat"
          ],
          "output": {
            "content": "choices[].message.content or stream delta",
            "family": "text",
            "format": "json or supported SSE",
            "tool_calls": "retain actual returned function calls"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Kadar asas token",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "reasoning_output_price",
                "label": "Reasoning output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "reasoning_output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "reasoning_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Tahap panjang permintaan 1",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Tahap panjang permintaan 2",
            "units": [
              {
                "amount": "0.008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000008",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.036000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000036",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000008",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/gemini-3.1-pro-preview-customtools\", \"messages\": [{\"role\": \"user\", \"content\": \"Explain the difference between an observation and a hypothesis in three sentences.\"}]}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"result.json\").read_text())\nfor x in r.get(\"choices\",[]):\n    if x.get(\"message\",{}).get(\"content\"): print(x[\"message\"][\"content\"])\nPY_RESULT\n",
            "label": "curl · retained exact creation",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.chat.completions.create(model='google/gemini-3.1-pro-preview-customtools',messages=[{\"role\":\"user\",\"content\":\"Explain observations and hypotheses in three sentences.\"}])\nimport base64, json\nfrom pathlib import Path\n\ndef save_result(data, stem=\"result\"):\n    # Keep every field, including usage, IDs, reasoning and tool requests.\n    Path(stem + \".json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\n    print(json.dumps(data, ensure_ascii=False, indent=2))\n    def save_blob(encoded, suffix, label):\n        raw = base64.b64decode(encoded, altchars=b\"-_\", validate=True)\n        ext = \"png\" if raw.startswith(b\"\\x89PNG\\r\\n\\x1a\\n\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4] == b\"RIFF\" and raw[8:12] == b\"WEBP\" else suffix\n        file = Path(stem + \"-\" + label + \".\" + ext)\n        file.write_bytes(raw)\n        print(\"Saved\", file)\n    for index, block in enumerate(data.get(\"content\") or []):\n        print(\"Content\", index, json.dumps(block, ensure_ascii=False))\n    for choice in data.get(\"choices\") or []:\n        print(\"Choice\", choice.get(\"index\"), json.dumps(choice.get(\"message\", choice.get(\"delta\", {})), ensure_ascii=False))\n    for index, item in enumerate(data.get(\"output\") or []):\n        print(\"Output\", index, json.dumps(item, ensure_ascii=False))\n        if item.get(\"type\") == \"image_generation_call\" and item.get(\"result\"):\n            save_blob(item[\"result\"], item.get(\"output_format\") or \"bin\", \"output-\" + str(index))\n    for ci, candidate in enumerate(data.get(\"candidates\") or []):\n        for pi, part in enumerate((candidate.get(\"content\") or {}).get(\"parts\") or []):\n            print(\"Candidate/part\", ci, pi, json.dumps(part, ensure_ascii=False))\n            blob = part.get(\"inlineData\") or part.get(\"inline_data\")\n            if blob and blob.get(\"data\"):\n                mime = blob.get(\"mimeType\") or blob.get(\"mime_type\")\n                suffix = {\"image/png\":\"png\", \"image/jpeg\":\"jpg\", \"image/webp\":\"webp\", \"audio/wav\":\"wav\", \"audio/mpeg\":\"mp3\", \"video/mp4\":\"mp4\"}.get(mime, \"bin\")\n                save_blob(blob[\"data\"], suffix, \"candidate-\" + str(ci) + \"-part-\" + str(pi))\n\nsave_result(result.to_dict(mode=\"json\"))\n",
            "label": "Python SDK · all choices",
            "language": "python"
          },
          {
            "code": "from openai import OpenAI\nimport os\nfrom pathlib import Path\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nimport base64, json\nfrom pathlib import Path\n\ndef save_result(data, stem=\"result\"):\n    # Keep every field, including usage, IDs, reasoning and tool requests.\n    Path(stem + \".json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\n    print(json.dumps(data, ensure_ascii=False, indent=2))\n    def save_blob(encoded, suffix, label):\n        raw = base64.b64decode(encoded, altchars=b\"-_\", validate=True)\n        ext = \"png\" if raw.startswith(b\"\\x89PNG\\r\\n\\x1a\\n\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4] == b\"RIFF\" and raw[8:12] == b\"WEBP\" else suffix\n        file = Path(stem + \"-\" + label + \".\" + ext)\n        file.write_bytes(raw)\n        print(\"Saved\", file)\n    for index, block in enumerate(data.get(\"content\") or []):\n        print(\"Content\", index, json.dumps(block, ensure_ascii=False))\n    for choice in data.get(\"choices\") or []:\n        print(\"Choice\", choice.get(\"index\"), json.dumps(choice.get(\"message\", choice.get(\"delta\", {})), ensure_ascii=False))\n    for index, item in enumerate(data.get(\"output\") or []):\n        print(\"Output\", index, json.dumps(item, ensure_ascii=False))\n        if item.get(\"type\") == \"image_generation_call\" and item.get(\"result\"):\n            save_blob(item[\"result\"], item.get(\"output_format\") or \"bin\", \"output-\" + str(index))\n    for ci, candidate in enumerate(data.get(\"candidates\") or []):\n        for pi, part in enumerate((candidate.get(\"content\") or {}).get(\"parts\") or []):\n            print(\"Candidate/part\", ci, pi, json.dumps(part, ensure_ascii=False))\n            blob = part.get(\"inlineData\") or part.get(\"inline_data\")\n            if blob and blob.get(\"data\"):\n                mime = blob.get(\"mimeType\") or blob.get(\"mime_type\")\n                suffix = {\"image/png\":\"png\", \"image/jpeg\":\"jpg\", \"image/webp\":\"webp\", \"audio/wav\":\"wav\", \"audio/mpeg\":\"mp3\", \"video/mp4\":\"mp4\"}.get(mime, \"bin\")\n                save_blob(blob[\"data\"], suffix, \"candidate-\" + str(ci) + \"-part-\" + str(pi))\n\nwith client.chat.completions.stream(model='google/gemini-3.1-pro-preview-customtools',messages=[{\"role\":\"user\",\"content\":\"Explain observations and hypotheses in three sentences.\"}]) as stream:\n    with Path(\"stream-events.jsonl\").open(\"w\",encoding=\"utf-8\") as log:\n        for event in stream:\n            payload=event.to_dict(mode=\"json\")\n            log.write(json.dumps(payload,ensure_ascii=False)+\"\\n\"); log.flush()\n            print(json.dumps(payload,ensure_ascii=False))\n    final=stream.get_final_completion()\n    save_result(final.to_dict(mode=\"json\"),\"stream-result\")\n",
            "label": "Python SDK streaming · all events",
            "language": "python"
          }
        ],
        "family": "openai",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "chat",
        "hints": [
          "Send exact model ID with messages.",
          "Context length is not an output cap.",
          "A text file may supply literal text; image/audio/file-object inputs need exact binding."
        ],
        "http": "POST",
        "in": 4,
        "input": [
          "text"
        ],
        "label": "OpenAI Chat",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [],
        "out": 24,
        "output": [
          "text"
        ],
        "path": "/v1/chat/completions",
        "price_conditions": [
          {
            "label": "Mod pantas",
            "value": "Kadar standard",
            "when": "Apabila mod pantas dipilih"
          },
          {
            "label": "Mod flex",
            "value": "Kadar standard",
            "when": "Apabila mod flex dipilih"
          },
          {
            "label": "Usaha penaakulan maksimum",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan maksimum menggunakan pelarasan default"
          },
          {
            "label": "Usaha penaakulan · high",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada high"
          },
          {
            "label": "Usaha penaakulan · low",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada low"
          },
          {
            "label": "Usaha penaakulan · medium",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada medium"
          },
          {
            "label": "Harga cache eksplisit",
            "value": "Tidak diaktifkan",
            "when": "Apabila cache eksplisit diminta"
          },
          {
            "label": "Output penaakulan",
            "value": "Penaakulan menggunakan kadar subset yang disenaraikan dalam output terkumpul; jangan tambah token tersebut dua kali.",
            "when": "Apabila output merangkumi token penaakulan"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "reasoning_output_price": 2.4e-05
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "reasoning_output_price",
                "label": "Reasoning output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "reasoning_output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "reasoning_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Request-length tier 1",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Request-length tier 2",
            "units": [
              {
                "amount": "0.008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000008",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.036000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000036",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000008",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "reasoning_effort_multipliers": {
          "high": 1,
          "low": 1,
          "medium": 1
        },
        "request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [
          {
            "cache_read": 0.4,
            "cache_read_multiplier": null,
            "cache_write": 0.75,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 4,
            "input_multiplier": null,
            "interval_boundary": "min_exclusive_max_inclusive",
            "max": 200000,
            "max_tokens": 200000,
            "min": 0,
            "min_tokens": 0,
            "null_rate_policy": "unknown or inherited; never zero",
            "out": 24,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 0,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          },
          {
            "cache_read": 0.8,
            "cache_read_multiplier": null,
            "cache_write": 0.75,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 8,
            "input_multiplier": null,
            "interval_boundary": "min_exclusive_max_inclusive",
            "max": null,
            "max_tokens": null,
            "min": 200000,
            "min_tokens": 200000,
            "null_rate_policy": "unknown or inherited; never zero",
            "out": 36,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 1,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          }
        ],
        "units": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "reasoning_output_price",
            "label": "Reasoning output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "reasoning_output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "reasoning_output_token"
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">G</span><h2 id=\"sheet-title\">Google: Gemini 3.1 Pro Preview Custom Tools</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Tutup\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemini-3.1-pro-preview-customtools</code><button type=\"button\" id=\"copy-id\">Salin ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Bahagian kad model\"><button type=\"button\" data-card-jump=\"overview\">Pengenalan</button><button type=\"button\" data-card-jump=\"methods\">Input &amp; kaedah</button><button type=\"button\" data-card-jump=\"pricing\">Pelan harga</button><button type=\"button\" data-card-jump=\"examples\">Contoh</button><button type=\"button\" data-card-jump=\"results\">Hasil</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Kaedah API\"><button type=\"button\" role=\"tab\" tabindex=\"-1\" aria-controls=\"card-method-content\" aria-selected=\"false\" id=\"card-method-tab-0\" data-card-method=\"Ultra|chat|/v1/chat/completions|google%2Fgemini-3.1-pro-preview-customtools\">Chat</button><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-1\" data-card-method=\"Ultra|messages|/v1/messages|google%2Fgemini-3.1-pro-preview-customtools\">Messages</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-1\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Pengenalan</h3><p class=\"mdesc-full\">Gemini 3.1 Pro Preview Custom Tools ialah varian berorientasikan ejen yang berbeza dan mengutamakan alat takrifan aplikasi bersama arahan terminal. Gunakannya apabila tindakan seperti membaca fail atau mencari kod perlu memacu tugas berbilang langkah, dengan aplikasi melaksanakan dan mengembalikan setiap hasil alat.</p><dl class=\"card-io\" data-card-io><div><dt>Input yang diterima</dt><dd>Teks</dd></div><div><dt>Hasil</dt><dd>json · sse</dd></div></dl><details class=\"card-about\"><summary>Tentang model</summary><p class=\"note-s\" data-model-method-boundary>Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.</p><div class=\"mabout\" id=\"m-about\"><p>Gemini 3.1 Pro Preview Custom Tools ialah varian khusus Google untuk aliran kerja ejen yang mencampurkan arahan terminal dengan alat tersuai. Tingkah laku pembezanya ialah mengutamakan alat takrifan aplikasi, dengan pengeluar memberikan view_file dan search_code sebagai contoh. Ia merupakan varian bernama berasingan Gemini 3.1 Pro Preview, bukannya label lain bagi setiap permintaan Pro. Tugas yang berguna bergantung pada alat betul untuk mendapatkan bukti sebelum menyediakan hasil teks akhir.</p><p>Barisan Pro Preview menerima teks, imej, video, audio dan PDF serta mengembalikan teks. Pembuat menyenaraikan had input 1,048,576 token dan had output 65,536 token bagi barisan itu. Penyiasatan repositori boleh menggabungkan fail sumber, keperluan bertulis dan tangkapan skrin antara muka; aliran kerja dokumen boleh menggabungkan halaman dan soalan. Labelkan sumber dan tetapkan artifak akhir supaya belanjawan input besar menyokong tugas khusus, bukannya longgokan arkib tanpa fokus.</p><p>Untuk ejen perisian, tetapkan matlamat, alat tersedia dan skop perubahan yang diminta. Alat carian tersuai mungkin mengembalikan lokasi fail sepadan, manakala alat baca fail membekalkan kandungan berkaitan yang tepat. Nyatakan argumen yang diterima dan medan yang dikembalikannya. Aplikasi melaksanakan panggilan diterima dan menghantar hasil kembali kepada model, yang boleh memilih langkah seterusnya berdasarkan perkara yang benar-benar berlaku. Laluan yang dikembalikan ialah bukti hasil carian, bukannya bukti fail diubah atau ujian dijalankan.</p><p>Varian Custom Tools ditujukan untuk keadaan apabila tindakan khusus itu perlu didahulukan daripada arahan bash umum. Contohnya, ejen boleh mencari pelaksanaan tingkah laku bernama dahulu, membaca fail berkaitan, membandingkannya dengan keperluan pengguna dan kemudian mencadangkan perubahan terbatas. Tetapkan antara muka dan tingkah laku yang mesti dikekalkan, serta minta senarai akhir perubahan cadangan bersama maklumat sumber yang digunakan. Jika pelaksana ujian terkawal tersedia, kembalikan hasil sebenar sebelum meminta kesimpulan tentang perubahan.</p><p>Dokumentasi 3.1 Pro pembuat merangkumi pemikiran, output berstruktur dan pemanggilan fungsi, bersama pelaksanaan kod, pembumian carian, pembumian Google Maps, konteks URL dan cache. Senarai carian failnya dihadkan secara jelas kepada Google AI Studio. Oleh itu, ketersediaan alat ialah sebahagian daripada antara muka pengeluar terpilih dan persediaan aplikasi. Keutamaan khas varian untuk alat tersuai tidak dengan sendirinya membekalkan alat itu atau menjalankan operasi luar. Simpan rekod nama fungsi, argumen yang disahkan dan hasil bagi setiap tindakan aplikasi yang selesai.</p><p>Panduan Gemini 3 menerangkan aras pemikiran low, medium dan high bagi 3.1 Pro, dengan high sebagai lalai. Ini ialah peruntukan analisis relatif, bukannya jaminan token ketat. Pilih aras mengikut tugas dan berikan arahan terus, bukannya ritual prom yang rumit. Jika output berstruktur diperlukan, tetapkan medan, jenis dan peraturan nilai tiada. Untuk laporan pelaksanaan, rekod akhir boleh mengenal pasti fail diperiksa, tingkah laku wajib, pengubahsuaian dicadangkan dan persoalan berbaki. Semak bahawa setiap entri berpunca daripada hasil alat atau sumber sebenar.</p><p>Ejen berbilang giliran mesti mengekalkan perbualan dan konteks penaakulan wajib. Panduan pembuat menerangkan tandatangan pemikiran serta membezakan sejarah berkeadaan terurus daripada sejarah tanpa keadaan yang diurus secara manual. Gunakan pengendalian yang didokumenkan dalam antara muka terpilih, terutamanya semasa menyambung selepas hasil alat. Untuk bahan sumber panjang, letakkan soalan khusus selepas konteks dan kaitkan jawapan diminta dengannya. Panduan turut mengesyorkan temperature lalai 1.0, daripada memindahkan tetapan suhu rendah yang mungkin menyebabkan gelung dalam tugas kompleks.</p><p>Pengeluar memberi amaran bahawa kualiti boleh berubah-ubah dalam kes penggunaan yang tidak mendapat manfaat daripada alat tersuai. Ini ialah sempadan pemilihan bermakna: gunakan profil ini untuk ejen berpusatkan alat daripada mengandaikan penambahbaikan umum bagi setiap prom terpencil. Output teks boleh berupa pelan, cadangan kod, penerangan atau hasil berstruktur; input imej atau audio tidak menjadikan varian penjana media. Semak kod dicadangkan, sahkan pengiraan dan bezakan operasi disahkan daripada cadangan. Kekalkan identiti model Custom Tools yang tepat bersama tugas, takrif alat dan bukti dikembalikan supaya sambungan kemudian mempunyai asas konkrit.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tersedia di Ailoot · input &amp; kaedah</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Anthropic Messages</b> <code>POST /v1/messages</code></summary><dl class=\"method-capabilities\"><div><dt>Input</dt><dd><code>text</code></dd></div><div><dt>Output</dt><dd><code>json</code>, <code>sse</code></dd></div><div><dt>Format output</dt><dd>JSON atau SSE</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Medan</th><th>Jenis</th><th>Keperluan</th><th>Nilai &amp; had</th><th>Lalai</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>google/gemini-3.1-pro-preview-customtools</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>message[]</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].role</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span><div>user, assistant</div></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">messages[].content</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>string</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">max_tokens</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>integer</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Diperlukan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"unspecified\"><span class=\"card-cell-label\">Lalai</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span><code>boolean</code></td><td data-cell-label=\"Keperluan\"><span class=\"card-cell-label\">Keperluan</span>Pilihan</td><td data-cell-label=\"Nilai &amp; had\"><span class=\"card-cell-label\">Nilai &amp; had</span></td><td data-cell-label=\"Lalai\" data-default=\"known\"><span class=\"card-cell-label\">Lalai</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Gabungan bahan input</summary><p class=\"note-s\"><b>Teks</b> · Teks UTF-8</p><p class=\"note-s\"><code>rentetan messages[].content</code></p></details><details class=\"note-s\" data-method-contract><summary>Parameter kaedah dan kitar hayat</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrak</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>model, messages, max_tokens</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>stream</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>text</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>text_file_material</code></th><td data-cell-label=\"Kontrak\"><span class=\"card-cell-label\">Kontrak</span>Baca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan.</td></tr></tbody></table></div><p>Kitar hayat: <code>synchronous_or_streamed</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Pelan harga</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.</p><dl data-price-conditions><dt>Mod pantas</dt><dd>Kadar standard <span class=\"note-s\">Apabila mod pantas dipilih</span></dd><dt>Mod flex</dt><dd>Kadar standard <span class=\"note-s\">Apabila mod flex dipilih</span></dd><dt>Usaha penaakulan maksimum</dt><dd>Kadar standard <span class=\"note-s\">Apabila usaha penaakulan maksimum menggunakan pelarasan default</span></dd><dt>Usaha penaakulan · high</dt><dd>Kadar standard <span class=\"note-s\">Apabila usaha penaakulan ditetapkan kepada high</span></dd><dt>Usaha penaakulan · low</dt><dd>Kadar standard <span class=\"note-s\">Apabila usaha penaakulan ditetapkan kepada low</span></dd><dt>Usaha penaakulan · medium</dt><dd>Kadar standard <span class=\"note-s\">Apabila usaha penaakulan ditetapkan kepada medium</span></dd><dt>Harga cache eksplisit</dt><dd>Tidak diaktifkan <span class=\"note-s\">Apabila cache eksplisit diminta</span></dd><dt>Output penaakulan</dt><dd>Penaakulan menggunakan kadar subset yang disenaraikan dalam output terkumpul; jangan tambah token tersebut dua kali. <span class=\"note-s\">Apabila output merangkumi token penaakulan</span></dd></dl></div><div data-declared-tariff-pricing><h4>Kadar Ailoot</h4><h4>Harga mengikut konfigurasi</h4><p class=\"note-s\">Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Konfigurasi</th><th>Jadual kadar</th><th>Token konteks, melebihi</th><th>Token konteks, sehingga dan termasuk</th><th>Caj</th></tr></thead><tbody><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Kadar asas token</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>Kadar asas</td><td data-cell-label=\"Token konteks, melebihi\"><span class=\"card-cell-label\">Token konteks, melebihi</span>—</td><td data-cell-label=\"Token konteks, sehingga dan termasuk\"><span class=\"card-cell-label\">Token konteks, sehingga dan termasuk</span>Tiada had atas</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input</span> <b>$0.004</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output</span> <b>$0.024</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache</span> <b>$0.0004</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache</span> <b>$0.00075</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token keluaran penaakulan</span> <b>$0.024</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Tahap panjang permintaan 1</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Token konteks, melebihi\"><span class=\"card-cell-label\">Token konteks, melebihi</span>0</td><td data-cell-label=\"Token konteks, sehingga dan termasuk\"><span class=\"card-cell-label\">Token konteks, sehingga dan termasuk</span>200,000</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input</span> <b>$0.004</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output</span> <b>$0.024</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache</span> <b>$0.0004</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache</span> <b>$0.00075</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr><tr><th data-cell-label=\"Konfigurasi\" scope=\"row\"><span class=\"card-cell-label\">Konfigurasi</span>Tahap panjang permintaan 2</th><td data-cell-label=\"Jadual kadar\"><span class=\"card-cell-label\">Jadual kadar</span>—</td><td data-cell-label=\"Token konteks, melebihi\"><span class=\"card-cell-label\">Token konteks, melebihi</span>200,000</td><td data-cell-label=\"Token konteks, sehingga dan termasuk\"><span class=\"card-cell-label\">Token konteks, sehingga dan termasuk</span>Tiada had atas</td><td data-cell-label=\"Caj\"><span class=\"card-cell-label\">Caj</span><div><span>Input · Token input</span> <b>$0.008</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Output · Token output</span> <b>$0.036</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Bacaan cache</span> <b>$0.0008</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache</span> <b>$0.00075</b> <span class=\"price-unit\">/ 1K token</span></div><div><span>Input · Penulisan cache, 1 jam</span> <b>—</b> <span class=\"price-unit\">/ 1K token</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. <a href=\"/docs/ms/billing/reserve/\">Cara rizab dan penyelesaian caj berfungsi →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Contoh permintaan</h3><h4>Ailoot Ultra · Anthropic Messages</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Pilihan kod\"><button class=\"cg-tab\" id=\"model-code-1463-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1463-panel-0\" aria-selected=\"true\" tabindex=\"0\">Badan JSON minimum yang lengkap</button><button class=\"cg-tab\" id=\"model-code-1463-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1463-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · gunakan dokumen UTF-8 anda</button><button class=\"cg-tab\" id=\"model-code-1463-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1463-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Python · simpan hasil lengkap</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Salin kod\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1463-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1463-tab-0\"><pre data-lang=\"json\"><code>{\n  &quot;model&quot;: &quot;google/gemini-3.1-pro-preview-customtools&quot;,\n  &quot;max_tokens&quot;: 128,\n  &quot;messages&quot;: [\n    {\n      &quot;role&quot;: &quot;user&quot;,\n      &quot;content&quot;: &quot;Summarize the incident report.&quot;\n    }\n  ],\n  &quot;stream&quot;: false\n}</code></pre></div><div class=\"cg-pane\" id=\"model-code-1463-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1463-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ[&#39;AILOOT_TEXT_FILE&#39;])\nif not source_file.is_file():\n    raise SystemExit(&#39;Set AILOOT_TEXT_FILE to your actual UTF-8 document&#39;)\ntext = source_file.read_text(encoding=&#39;utf-8&#39;)\nif not text.strip():\n    raise SystemExit(&#39;Choose a document containing text&#39;)\npayload = {&#39;model&#39;: &#39;google/gemini-3.1-pro-preview-customtools&#39;, &#39;max_tokens&#39;: 128, &#39;messages&#39;: [{&#39;role&#39;: &#39;user&#39;, &#39;content&#39;: &#39;Summarize the incident report.&#39;}]}\npayload[&#39;messages&#39;][0][&#39;content&#39;] = &#39;Summarize this material and quote supporting source passages.\\n\\n&#39; + text\nPath(&#39;request.json&#39;).write_text(json.dumps(payload, ensure_ascii=False), encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H &quot;x-api-key: $AILOOT_API_KEY&quot; -H &#39;anthropic-version: 2023-06-01&#39; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path(&#39;result.json&#39;).read_text(encoding=&#39;utf-8&#39;))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1463-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1463-tab-2\" hidden><pre data-lang=\"python\"><code>import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ[&#39;AILOOT_TEXT_FILE&#39;])\nif not source_file.is_file():\n    raise SystemExit(&#39;Set AILOOT_TEXT_FILE to your actual UTF-8 document&#39;)\ntext = source_file.read_text(encoding=&#39;utf-8&#39;)\nif not text.strip():\n    raise SystemExit(&#39;Choose a document containing text&#39;)\npayload = {&#39;model&#39;: &#39;google/gemini-3.1-pro-preview-customtools&#39;, &#39;max_tokens&#39;: 128, &#39;messages&#39;: [{&#39;role&#39;: &#39;user&#39;, &#39;content&#39;: &#39;Summarize the incident report.&#39;}]}\npayload[&#39;messages&#39;][0][&#39;content&#39;] = &#39;Summarize this material and quote supporting source passages.\\n\\n&#39; + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ[&#39;AILOOT_API_KEY&#39;]\nif not api_key.strip():\n    raise SystemExit(&#39;Set AILOOT_API_KEY before making a request&#39;)\nheaders = {&#39;x-api-key&#39;: &#39;PLACEHOLDER_KEY&#39;, &#39;anthropic-version&#39;: &#39;2023-06-01&#39;, &#39;Content-Type&#39;: &#39;application/json&#39;}\nheaders[&#39;x-api-key&#39;] = api_key\nrequest = Request(&#39;https://api.ailoot.ai/v1/messages&#39;, data=json.dumps(payload, ensure_ascii=False).encode(&#39;utf-8&#39;), headers=headers, method=&#39;POST&#39;)\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path(&#39;response-headers.txt&#39;).write_text(str(response.headers), encoding=&#39;utf-8&#39;)\nexcept HTTPError as error:\n    Path(&#39;result.json&#39;).write_bytes(error.read())\n    Path(&#39;response-headers.txt&#39;).write_text(str(error.headers), encoding=&#39;utf-8&#39;)\n    raise\nPath(&#39;result.json&#39;).write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path(&#39;result.json&#39;).read_text(encoding=&#39;utf-8&#39;))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Terima dan simpan hasil</h3><h4>Ailoot Ultra · Anthropic Messages</h4><p class=\"note-s\">JSON atau SSE</p><div class=\"card-result-process\" data-all-results><h5>Simpan semua hasil yang selesai</h5><p class=\"note-s\">Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.</p><p class=\"note-s\">Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Jika respons asal perlu disemak</h5><p class=\"note-s\">Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.</p></div><details class=\"card-about\" data-output-fields><summary>Medan respons</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Medan</th><th>Jenis</th></tr></thead><tbody><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">content[]</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>text|thinking|tool_use|other content block</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">stop_reason</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>string|null</td></tr><tr><th data-cell-label=\"Medan\" scope=\"row\"><span class=\"card-cell-label\">Medan</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Jenis\" data-field-type><span class=\"card-cell-label\">Jenis</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Ralat dan langkah seterusnya</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respons</th><th>Syarat</th><th>Langkah seterusnya</th></tr></thead><tbody><tr><th data-cell-label=\"Respons\" scope=\"row\"><span class=\"card-cell-label\">Respons</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Syarat\"><span class=\"card-cell-label\">Syarat</span>Medan wajib, perwakilan bahan atau nilai parameter tidak sah</td><td data-cell-label=\"Langkah seterusnya\"><span class=\"card-cell-label\">Langkah seterusnya</span>Betulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias model</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=google%2Fgemini-3.1-pro-preview-customtools&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-pro-preview-customtools&amp;fmt=messages\"><code>google/gemini-3.1-pro-preview-customtools</code></a></span></p><h4>Alias laluan kaedah</h4><p class=\"note-s\">Gunakan laluan kaedah yang dipaparkan di atas.</p><h4>ID pemanggil berkaitan</h4><p class=\"note-s\"><a href=\"#m=google%2Fgemini-3.1-pro-preview-customtools&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-pro-preview-customtools&amp;fmt=messages\"><code>google/gemini-3.1-pro-preview-customtools</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "fmt": "messages",
        "http": "POST",
        "path": "/v1/messages",
        "request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|messages|/v1/messages|google%2Fgemini-3.1-pro-preview-customtools",
      "ordinal": 1,
      "rawMethod": {
        "available": null,
        "cache_read": 0.4,
        "cache_write": 0.75,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "headers": [
                "Authorization: Bearer",
                "x-api-key",
                "anthropic-version"
              ],
              "version_example": "2023-06-01"
            },
            "errors": [
              {
                "code": null,
                "condition": "Medan wajib, perwakilan bahan atau nilai parameter tidak sah",
                "http_status": 400,
                "recovery": "Betulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.",
                "type": "invalid_request_error"
              }
            ],
            "example_body": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "google/gemini-3.1-pro-preview-customtools",
              "stream": false
            },
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/messages"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "rentetan messages[].content",
                "required_material": "Teks UTF-8"
              }
            ],
            "operation_modes": [
              "synchronous_json",
              "streamed_SSE"
            ],
            "outputs": {
              "all_results": "Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.",
              "family": "protocol",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "content[]",
                  "type": "text|thinking|tool_use|other content block"
                },
                {
                  "description": null,
                  "name": "stop_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON atau SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-3.1-pro-preview-customtools"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "user",
                  "assistant"
                ],
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "max_tokens",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Documented current stock Messages bridge; optional model capabilities are separate from this minimal text request.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "max_tokens": {
                  "minimum": 1,
                  "type": "integer"
                },
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "source": {
                                      "oneOf": [
                                        {
                                          "properties": {
                                            "type": {
                                              "const": "url"
                                            },
                                            "url": {
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "url"
                                          ],
                                          "type": "object"
                                        },
                                        {
                                          "properties": {
                                            "data": {
                                              "type": "string"
                                            },
                                            "media_type": {
                                              "type": "string"
                                            },
                                            "type": {
                                              "const": "base64"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "media_type",
                                            "data"
                                          ],
                                          "type": "object"
                                        }
                                      ]
                                    },
                                    "type": {
                                      "const": "image"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "source"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "enum": [
                          "user",
                          "assistant"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "google/gemini-3.1-pro-preview-customtools"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages",
                "max_tokens"
              ],
              "type": "object"
            },
            "schema_template": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "google/gemini-3.1-pro-preview-customtools",
              "stream": false
            },
            "unsupported": [
              "No query API key.",
              "Hosted/server-side tools and model-specific optional controls are not part of this minimal family example."
            ]
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages",
              "max_tokens"
            ],
            "text_file_material": "Baca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan."
          },
          "lifecycle": {
            "create": {
              "http": "POST",
              "path": "/v1/messages"
            },
            "job_read": null,
            "mode": "synchronous_or_streamed",
            "unknown": "Keep request/response IDs and headers. No generic text job retrieval URL is supplied."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/messages"
          },
          "output": {
            "all_results": "Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.",
            "family": "protocol",
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Kadar asas token",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "reasoning_output_price",
                "label": "Reasoning output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "reasoning_output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "reasoning_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Tahap panjang permintaan 1",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Tahap panjang permintaan 2",
            "units": [
              {
                "amount": "0.008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000008",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.036000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000036",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000008",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"google/gemini-3.1-pro-preview-customtools\",\n  \"max_tokens\": 128,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Summarize the incident report.\"\n    }\n  ],\n  \"stream\": false\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'google/gemini-3.1-pro-preview-customtools', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nPath('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H \"x-api-key: $AILOOT_API_KEY\" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n",
            "label": "curl · use your UTF-8 document",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'google/gemini-3.1-pro-preview-customtools', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ['AILOOT_API_KEY']\nif not api_key.strip():\n    raise SystemExit('Set AILOOT_API_KEY before making a request')\nheaders = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}\nheaders['x-api-key'] = api_key\nrequest = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')\nexcept HTTPError as error:\n    Path('result.json').write_bytes(error.read())\n    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')\n    raise\nPath('result.json').write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n",
            "label": "Python · save the complete result",
            "language": "python"
          }
        ],
        "family": "anthropic",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "messages",
        "http": "POST",
        "in": 4,
        "input": [
          "text"
        ],
        "label": "Anthropic Messages",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [],
        "out": 24,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/messages",
        "price_conditions": [
          {
            "label": "Mod pantas",
            "value": "Kadar standard",
            "when": "Apabila mod pantas dipilih"
          },
          {
            "label": "Mod flex",
            "value": "Kadar standard",
            "when": "Apabila mod flex dipilih"
          },
          {
            "label": "Usaha penaakulan maksimum",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan maksimum menggunakan pelarasan default"
          },
          {
            "label": "Usaha penaakulan · high",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada high"
          },
          {
            "label": "Usaha penaakulan · low",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada low"
          },
          {
            "label": "Usaha penaakulan · medium",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada medium"
          },
          {
            "label": "Harga cache eksplisit",
            "value": "Tidak diaktifkan",
            "when": "Apabila cache eksplisit diminta"
          },
          {
            "label": "Output penaakulan",
            "value": "Penaakulan menggunakan kadar subset yang disenaraikan dalam output terkumpul; jangan tambah token tersebut dua kali.",
            "when": "Apabila output merangkumi token penaakulan"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "reasoning_output_price": 2.4e-05
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "reasoning_output_price",
                "label": "Reasoning output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "reasoning_output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "reasoning_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Request-length tier 1",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Request-length tier 2",
            "units": [
              {
                "amount": "0.008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000008",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.036000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000036",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000008",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "reasoning_effort_multipliers": {
          "high": 1,
          "low": 1,
          "medium": 1
        },
        "request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [
          {
            "cache_read": 0.4,
            "cache_read_multiplier": null,
            "cache_write": 0.75,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 4,
            "input_multiplier": null,
            "max": 200000,
            "max_tokens": 200000,
            "min": 0,
            "min_tokens": 0,
            "out": 24,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 0,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          },
          {
            "cache_read": 0.8,
            "cache_read_multiplier": null,
            "cache_write": 0.75,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 8,
            "input_multiplier": null,
            "max": null,
            "max_tokens": null,
            "min": 200000,
            "min_tokens": 200000,
            "out": 36,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 1,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          }
        ],
        "units": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "reasoning_output_price",
            "label": "Reasoning output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "reasoning_output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "reasoning_output_token"
          }
        ]
      }
    }
  ],
  "model_id": "google/gemini-3.1-pro-preview-customtools",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "cbd610f61e77f9dc7f86b5b3352501c0a668aaf32a0a8cd18a429d22a1435d42",
    "input_html_sha256": "2a6fb5eee08709b62fe62878a746232bc024d622777c6e7f996efa878d71f412",
    "private_audit_sha256": "c7d80525980f16cb45e54ff1692a9142686c8d006d363a9f4ad7115f41af5ba6",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ms/google-gemini-3-1-pro-preview-customtools/",
    "description": "Gemini 3.1 Pro Preview Custom Tools ialah varian berorientasikan ejen yang berbeza dan mengutamakan alat takrifan aplikasi bersama arahan terminal. Gunakannya apabila tindakan seperti membaca fail atau mencari kod perlu memacu tugas berbilang langkah, dengan aplikasi melaksanakan dan mengembalikan setiap hasil alat.",
    "locale": "ms",
    "md_url": "https://ailoot.ai/models/ms/google-gemini-3-1-pro-preview-customtools/index.md",
    "title": "Google: Gemini 3.1 Pro Preview Custom Tools — Ailoot",
    "url": "https://ailoot.ai/models/ms/google-gemini-3-1-pro-preview-customtools/"
  },
  "practicalHtml": "<h3>Tugas praktikal</h3><p>Contoh teknikal dalam bahasa Inggeris</p><pre><code>Interpret custom-tool evidence\n\nUse this supplied tool transcript. search_code returned settings.py:12 and view_file returned: &#x27;RETRY_LIMIT = 3&#x27;. No edit or test result is present. Requirement: increase the retry limit to five. Return the examined file, the exact proposed edit and the remaining check. Distinguish the retrieved value from actions that have not occurred.</code></pre><h4>Hasil yang dijangka</h4><pre><code>A file-linked proposed edit and an explicitly unexecuted validation step.</code></pre><h4>Semak hasil</h4><pre><code>The answer must not claim that settings.py was changed or a test passed.</code></pre>",
  "practicalText": "Tugas praktikal Contoh teknikal dalam bahasa Inggeris Interpret custom-tool evidence Use this supplied tool transcript. search_code returned settings.py:12 and view_file returned: 'RETRY_LIMIT = 3'. No edit or test result is present. Requirement: increase the retry limit to five. Return the examined file, the exact proposed edit and the remaining check. Distinguish the retrieved value from actions that have not occurred. Hasil yang dijangka A file-linked proposed edit and an explicitly unexecuted validation step. Semak hasil The answer must not claim that settings.py was changed or a test passed.",
  "rawModel": {
    "about": "Gemini 3.1 Pro Preview Custom Tools ialah varian khusus Google untuk aliran kerja ejen yang mencampurkan arahan terminal dengan alat tersuai. Tingkah laku pembezanya ialah mengutamakan alat takrifan aplikasi, dengan pengeluar memberikan view_file dan search_code sebagai contoh. Ia merupakan varian bernama berasingan Gemini 3.1 Pro Preview, bukannya label lain bagi setiap permintaan Pro. Tugas yang berguna bergantung pada alat betul untuk mendapatkan bukti sebelum menyediakan hasil teks akhir.\n\nBarisan Pro Preview menerima teks, imej, video, audio dan PDF serta mengembalikan teks. Pembuat menyenaraikan had input 1,048,576 token dan had output 65,536 token bagi barisan itu. Penyiasatan repositori boleh menggabungkan fail sumber, keperluan bertulis dan tangkapan skrin antara muka; aliran kerja dokumen boleh menggabungkan halaman dan soalan. Labelkan sumber dan tetapkan artifak akhir supaya belanjawan input besar menyokong tugas khusus, bukannya longgokan arkib tanpa fokus.\n\nUntuk ejen perisian, tetapkan matlamat, alat tersedia dan skop perubahan yang diminta. Alat carian tersuai mungkin mengembalikan lokasi fail sepadan, manakala alat baca fail membekalkan kandungan berkaitan yang tepat. Nyatakan argumen yang diterima dan medan yang dikembalikannya. Aplikasi melaksanakan panggilan diterima dan menghantar hasil kembali kepada model, yang boleh memilih langkah seterusnya berdasarkan perkara yang benar-benar berlaku. Laluan yang dikembalikan ialah bukti hasil carian, bukannya bukti fail diubah atau ujian dijalankan.\n\nVarian Custom Tools ditujukan untuk keadaan apabila tindakan khusus itu perlu didahulukan daripada arahan bash umum. Contohnya, ejen boleh mencari pelaksanaan tingkah laku bernama dahulu, membaca fail berkaitan, membandingkannya dengan keperluan pengguna dan kemudian mencadangkan perubahan terbatas. Tetapkan antara muka dan tingkah laku yang mesti dikekalkan, serta minta senarai akhir perubahan cadangan bersama maklumat sumber yang digunakan. Jika pelaksana ujian terkawal tersedia, kembalikan hasil sebenar sebelum meminta kesimpulan tentang perubahan.\n\nDokumentasi 3.1 Pro pembuat merangkumi pemikiran, output berstruktur dan pemanggilan fungsi, bersama pelaksanaan kod, pembumian carian, pembumian Google Maps, konteks URL dan cache. Senarai carian failnya dihadkan secara jelas kepada Google AI Studio. Oleh itu, ketersediaan alat ialah sebahagian daripada antara muka pengeluar terpilih dan persediaan aplikasi. Keutamaan khas varian untuk alat tersuai tidak dengan sendirinya membekalkan alat itu atau menjalankan operasi luar. Simpan rekod nama fungsi, argumen yang disahkan dan hasil bagi setiap tindakan aplikasi yang selesai.\n\nPanduan Gemini 3 menerangkan aras pemikiran low, medium dan high bagi 3.1 Pro, dengan high sebagai lalai. Ini ialah peruntukan analisis relatif, bukannya jaminan token ketat. Pilih aras mengikut tugas dan berikan arahan terus, bukannya ritual prom yang rumit. Jika output berstruktur diperlukan, tetapkan medan, jenis dan peraturan nilai tiada. Untuk laporan pelaksanaan, rekod akhir boleh mengenal pasti fail diperiksa, tingkah laku wajib, pengubahsuaian dicadangkan dan persoalan berbaki. Semak bahawa setiap entri berpunca daripada hasil alat atau sumber sebenar.\n\nEjen berbilang giliran mesti mengekalkan perbualan dan konteks penaakulan wajib. Panduan pembuat menerangkan tandatangan pemikiran serta membezakan sejarah berkeadaan terurus daripada sejarah tanpa keadaan yang diurus secara manual. Gunakan pengendalian yang didokumenkan dalam antara muka terpilih, terutamanya semasa menyambung selepas hasil alat. Untuk bahan sumber panjang, letakkan soalan khusus selepas konteks dan kaitkan jawapan diminta dengannya. Panduan turut mengesyorkan temperature lalai 1.0, daripada memindahkan tetapan suhu rendah yang mungkin menyebabkan gelung dalam tugas kompleks.\n\nPengeluar memberi amaran bahawa kualiti boleh berubah-ubah dalam kes penggunaan yang tidak mendapat manfaat daripada alat tersuai. Ini ialah sempadan pemilihan bermakna: gunakan profil ini untuk ejen berpusatkan alat daripada mengandaikan penambahbaikan umum bagi setiap prom terpencil. Output teks boleh berupa pelan, cadangan kod, penerangan atau hasil berstruktur; input imej atau audio tidak menjadikan varian penjana media. Semak kod dicadangkan, sahkan pengiraan dan bezakan operasi disahkan daripada cadangan. Kekalkan identiti model Custom Tools yang tepat bersama tugas, takrif alat dan bukti dikembalikan supaya sambungan kemudian mempunyai asas konkrit.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "available": null,
    "canonical_model": "google/gemini-3.1-pro-preview-customtools",
    "capabilities": {
      "context_length": 1048576,
      "manufacturer_input": [
        "text",
        "audio",
        "image",
        "video",
        "file"
      ],
      "manufacturer_output": [
        "text"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          }
        ],
        "summary": "Maklumat lengkap tentang harga konfigurasi terdapat dalam butiran."
      }
    ],
    "ctx": null,
    "entity_type": "model",
    "formats": [
      "chat",
      "messages"
    ],
    "id": "google/gemini-3.1-pro-preview-customtools",
    "input": [
      "text"
    ],
    "kind": "text",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": 0.4,
        "cache_write": 0.75,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Keep every choice and its content/tool calls/reasoning. In SSE assemble deltas by choice/tool index, retain the final finish reason and usage.",
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "errors": [
              {
                "code": null,
                "condition": "Medan wajib, perwakilan bahan atau nilai parameter tidak sah",
                "http_status": 400,
                "recovery": "Betulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [
              "Model context is not an output cap.",
              "A model-dependent field needs the exact published model profile; unspecified defaults/enums are not guessed.",
              "Tool calls propose actions; the client application returns actual observations with the returned call ID.",
              "Guarded canonical keys must occur once; duplicate or case-varied model/tools/cap fields are rejected."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "messages[].content",
                "required_material": "Teks UTF8"
              }
            ],
            "operation_modes": [
              "conversation",
              "function_tool_continuation",
              "streaming"
            ],
            "outputs": {
              "all_results": "Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "choices[].index",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "choices[].message.content",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "choices[].message.tool_calls",
                  "type": "tool_call[]"
                },
                {
                  "description": null,
                  "name": "choices[].message.reasoning_content",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "choices[].message.reasoning_details",
                  "type": "object|array"
                },
                {
                  "description": null,
                  "name": "choices[].finish_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json atau SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-3.1-pro-preview-customtools"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_items": 1,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "model_dependent",
                "conditions": "Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model.",
                "default": null,
                "default_known": false,
                "enum": [
                  "system",
                  "user",
                  "assistant",
                  "tool",
                  "function"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": false,
                "type": "string|content_part[]|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].tool_calls",
                "required": false,
                "type": "tool_call[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].tool_call_id",
                "required": false,
                "type": "string",
                "when": "role=tool; gunakan ID sebenar yang dipulangkan"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].name",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].reasoning_content",
                "required": false,
                "type": "string",
                "when": "Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].reasoning_details",
                "required": false,
                "type": "object|array"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "max_tokens",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minimum": 1,
                "name": "max_completion_tokens",
                "required": false,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "stream_options.include_usage",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "temperature",
                "required": false,
                "type": "number"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "top_p",
                "required": false,
                "type": "number"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "stop",
                "required": false,
                "type": "string|string[]"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tools",
                "required": false,
                "type": "function_tool[]"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": [
                  "function"
                ],
                "enum_known": true,
                "name": "tools[].type",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tools[].function.name",
                "required": true,
                "type": "string",
                "when": "alat fungsi dibekalkan"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tools[].function.description",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tools[].function.parameters",
                "required": false,
                "type": "JSON_schema"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "tool_choice",
                "required": false,
                "type": "string|object"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "parallel_tool_calls",
                "required": false,
                "type": "boolean"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "response_format",
                "required": false,
                "type": "object"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "reasoning_effort",
                "required": false,
                "type": "string"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "reasoning",
                "required": false,
                "type": "object"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "service_tier",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_compatibility",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "instructions",
                "required": false,
                "type": "string"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "functions",
                "required": false,
                "type": "function[]"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "function_call",
                "required": false,
                "type": "string|object"
              },
              {
                "availability": "model_dependent",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "prompt_cache_options",
                "required": false,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "text"
                ],
                "enum_known": true,
                "name": "modalities",
                "required": false,
                "type": "string[]"
              },
              {
                "availability": "source_interface",
                "conditions": "provider.options ditolak pada laluan teks Ultra ini",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "provider",
                "required": false,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "conditions": "1h ditolak pada lokasi cache prompt yang digunakan",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "cache_control.ttl",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "additional models/models list",
              "plugins",
              "route",
              "hosted tools; ordinary client function tools remain separate",
              "non-text output modalities",
              "provider.options overrides",
              "one-hour prompt-cache TTL"
            ]
          },
          "hints": [
            "Hantar ID model yang tepat bersama messages.",
            "Panjang konteks bukan had output.",
            "Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat."
          ],
          "input": {
            "content_type": "application/json",
            "control_scope": "khusus model; alat fungsi pengguna berbeza daripada alat yang dihoskan",
            "file_material": "dokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan",
            "hosted_operations": false,
            "material_types": [
              "text"
            ],
            "messages": "tatasusunan mesej dengan struktur role/content",
            "multimodal_input_binding": null,
            "optional_controls": [
              "stream",
              "temperature",
              "top_p",
              "stop",
              "max_tokens",
              "max_completion_tokens",
              "reasoning",
              "response_format",
              "tools",
              "tool_choice"
            ],
            "output_modalities": [
              "text"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "mode": "synchronous_or_streamed",
            "unknown": "preserve original request id; no generic chat job retrieval path"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_chat"
          ],
          "output": {
            "content": "choices[].message.content or stream delta",
            "family": "text",
            "format": "json or supported SSE",
            "tool_calls": "retain actual returned function calls"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Kadar asas token",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "reasoning_output_price",
                "label": "Reasoning output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "reasoning_output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "reasoning_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Tahap panjang permintaan 1",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Tahap panjang permintaan 2",
            "units": [
              {
                "amount": "0.008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000008",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.036000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000036",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000008",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"google/gemini-3.1-pro-preview-customtools\", \"messages\": [{\"role\": \"user\", \"content\": \"Explain the difference between an observation and a hypothesis in three sentences.\"}]}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path(\"result.json\").read_text())\nfor x in r.get(\"choices\",[]):\n    if x.get(\"message\",{}).get(\"content\"): print(x[\"message\"][\"content\"])\nPY_RESULT\n",
            "label": "curl · retained exact creation",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.chat.completions.create(model='google/gemini-3.1-pro-preview-customtools',messages=[{\"role\":\"user\",\"content\":\"Explain observations and hypotheses in three sentences.\"}])\nimport base64, json\nfrom pathlib import Path\n\ndef save_result(data, stem=\"result\"):\n    # Keep every field, including usage, IDs, reasoning and tool requests.\n    Path(stem + \".json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\n    print(json.dumps(data, ensure_ascii=False, indent=2))\n    def save_blob(encoded, suffix, label):\n        raw = base64.b64decode(encoded, altchars=b\"-_\", validate=True)\n        ext = \"png\" if raw.startswith(b\"\\x89PNG\\r\\n\\x1a\\n\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4] == b\"RIFF\" and raw[8:12] == b\"WEBP\" else suffix\n        file = Path(stem + \"-\" + label + \".\" + ext)\n        file.write_bytes(raw)\n        print(\"Saved\", file)\n    for index, block in enumerate(data.get(\"content\") or []):\n        print(\"Content\", index, json.dumps(block, ensure_ascii=False))\n    for choice in data.get(\"choices\") or []:\n        print(\"Choice\", choice.get(\"index\"), json.dumps(choice.get(\"message\", choice.get(\"delta\", {})), ensure_ascii=False))\n    for index, item in enumerate(data.get(\"output\") or []):\n        print(\"Output\", index, json.dumps(item, ensure_ascii=False))\n        if item.get(\"type\") == \"image_generation_call\" and item.get(\"result\"):\n            save_blob(item[\"result\"], item.get(\"output_format\") or \"bin\", \"output-\" + str(index))\n    for ci, candidate in enumerate(data.get(\"candidates\") or []):\n        for pi, part in enumerate((candidate.get(\"content\") or {}).get(\"parts\") or []):\n            print(\"Candidate/part\", ci, pi, json.dumps(part, ensure_ascii=False))\n            blob = part.get(\"inlineData\") or part.get(\"inline_data\")\n            if blob and blob.get(\"data\"):\n                mime = blob.get(\"mimeType\") or blob.get(\"mime_type\")\n                suffix = {\"image/png\":\"png\", \"image/jpeg\":\"jpg\", \"image/webp\":\"webp\", \"audio/wav\":\"wav\", \"audio/mpeg\":\"mp3\", \"video/mp4\":\"mp4\"}.get(mime, \"bin\")\n                save_blob(blob[\"data\"], suffix, \"candidate-\" + str(ci) + \"-part-\" + str(pi))\n\nsave_result(result.to_dict(mode=\"json\"))\n",
            "label": "Python SDK · all choices",
            "language": "python"
          },
          {
            "code": "from openai import OpenAI\nimport os\nfrom pathlib import Path\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nimport base64, json\nfrom pathlib import Path\n\ndef save_result(data, stem=\"result\"):\n    # Keep every field, including usage, IDs, reasoning and tool requests.\n    Path(stem + \".json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\n    print(json.dumps(data, ensure_ascii=False, indent=2))\n    def save_blob(encoded, suffix, label):\n        raw = base64.b64decode(encoded, altchars=b\"-_\", validate=True)\n        ext = \"png\" if raw.startswith(b\"\\x89PNG\\r\\n\\x1a\\n\") else \"jpg\" if raw.startswith(b\"\\xff\\xd8\") else \"webp\" if raw[:4] == b\"RIFF\" and raw[8:12] == b\"WEBP\" else suffix\n        file = Path(stem + \"-\" + label + \".\" + ext)\n        file.write_bytes(raw)\n        print(\"Saved\", file)\n    for index, block in enumerate(data.get(\"content\") or []):\n        print(\"Content\", index, json.dumps(block, ensure_ascii=False))\n    for choice in data.get(\"choices\") or []:\n        print(\"Choice\", choice.get(\"index\"), json.dumps(choice.get(\"message\", choice.get(\"delta\", {})), ensure_ascii=False))\n    for index, item in enumerate(data.get(\"output\") or []):\n        print(\"Output\", index, json.dumps(item, ensure_ascii=False))\n        if item.get(\"type\") == \"image_generation_call\" and item.get(\"result\"):\n            save_blob(item[\"result\"], item.get(\"output_format\") or \"bin\", \"output-\" + str(index))\n    for ci, candidate in enumerate(data.get(\"candidates\") or []):\n        for pi, part in enumerate((candidate.get(\"content\") or {}).get(\"parts\") or []):\n            print(\"Candidate/part\", ci, pi, json.dumps(part, ensure_ascii=False))\n            blob = part.get(\"inlineData\") or part.get(\"inline_data\")\n            if blob and blob.get(\"data\"):\n                mime = blob.get(\"mimeType\") or blob.get(\"mime_type\")\n                suffix = {\"image/png\":\"png\", \"image/jpeg\":\"jpg\", \"image/webp\":\"webp\", \"audio/wav\":\"wav\", \"audio/mpeg\":\"mp3\", \"video/mp4\":\"mp4\"}.get(mime, \"bin\")\n                save_blob(blob[\"data\"], suffix, \"candidate-\" + str(ci) + \"-part-\" + str(pi))\n\nwith client.chat.completions.stream(model='google/gemini-3.1-pro-preview-customtools',messages=[{\"role\":\"user\",\"content\":\"Explain observations and hypotheses in three sentences.\"}]) as stream:\n    with Path(\"stream-events.jsonl\").open(\"w\",encoding=\"utf-8\") as log:\n        for event in stream:\n            payload=event.to_dict(mode=\"json\")\n            log.write(json.dumps(payload,ensure_ascii=False)+\"\\n\"); log.flush()\n            print(json.dumps(payload,ensure_ascii=False))\n    final=stream.get_final_completion()\n    save_result(final.to_dict(mode=\"json\"),\"stream-result\")\n",
            "label": "Python SDK streaming · all events",
            "language": "python"
          }
        ],
        "family": "openai",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "chat",
        "hints": [
          "Send exact model ID with messages.",
          "Context length is not an output cap.",
          "A text file may supply literal text; image/audio/file-object inputs need exact binding."
        ],
        "http": "POST",
        "in": 4,
        "input": [
          "text"
        ],
        "label": "OpenAI Chat",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [],
        "out": 24,
        "output": [
          "text"
        ],
        "path": "/v1/chat/completions",
        "price_conditions": [
          {
            "label": "Mod pantas",
            "value": "Kadar standard",
            "when": "Apabila mod pantas dipilih"
          },
          {
            "label": "Mod flex",
            "value": "Kadar standard",
            "when": "Apabila mod flex dipilih"
          },
          {
            "label": "Usaha penaakulan maksimum",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan maksimum menggunakan pelarasan default"
          },
          {
            "label": "Usaha penaakulan · high",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada high"
          },
          {
            "label": "Usaha penaakulan · low",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada low"
          },
          {
            "label": "Usaha penaakulan · medium",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada medium"
          },
          {
            "label": "Harga cache eksplisit",
            "value": "Tidak diaktifkan",
            "when": "Apabila cache eksplisit diminta"
          },
          {
            "label": "Output penaakulan",
            "value": "Penaakulan menggunakan kadar subset yang disenaraikan dalam output terkumpul; jangan tambah token tersebut dua kali.",
            "when": "Apabila output merangkumi token penaakulan"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "reasoning_output_price": 2.4e-05
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "reasoning_output_price",
                "label": "Reasoning output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "reasoning_output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "reasoning_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Request-length tier 1",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Request-length tier 2",
            "units": [
              {
                "amount": "0.008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000008",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.036000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000036",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000008",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "reasoning_effort_multipliers": {
          "high": 1,
          "low": 1,
          "medium": 1
        },
        "request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [
          {
            "cache_read": 0.4,
            "cache_read_multiplier": null,
            "cache_write": 0.75,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 4,
            "input_multiplier": null,
            "interval_boundary": "min_exclusive_max_inclusive",
            "max": 200000,
            "max_tokens": 200000,
            "min": 0,
            "min_tokens": 0,
            "null_rate_policy": "unknown or inherited; never zero",
            "out": 24,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 0,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          },
          {
            "cache_read": 0.8,
            "cache_read_multiplier": null,
            "cache_write": 0.75,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 8,
            "input_multiplier": null,
            "interval_boundary": "min_exclusive_max_inclusive",
            "max": null,
            "max_tokens": null,
            "min": 200000,
            "min_tokens": 200000,
            "null_rate_policy": "unknown or inherited; never zero",
            "out": 36,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 1,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          }
        ],
        "units": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "reasoning_output_price",
            "label": "Reasoning output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "reasoning_output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "reasoning_output_token"
          }
        ]
      },
      {
        "available": null,
        "cache_read": 0.4,
        "cache_write": 0.75,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "headers": [
                "Authorization: Bearer",
                "x-api-key",
                "anthropic-version"
              ],
              "version_example": "2023-06-01"
            },
            "errors": [
              {
                "code": null,
                "condition": "Medan wajib, perwakilan bahan atau nilai parameter tidak sah",
                "http_status": 400,
                "recovery": "Betulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.",
                "type": "invalid_request_error"
              }
            ],
            "example_body": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "google/gemini-3.1-pro-preview-customtools",
              "stream": false
            },
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/messages"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "rentetan messages[].content",
                "required_material": "Teks UTF-8"
              }
            ],
            "operation_modes": [
              "synchronous_json",
              "streamed_SSE"
            ],
            "outputs": {
              "all_results": "Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.",
              "family": "protocol",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "content[]",
                  "type": "text|thinking|tool_use|other content block"
                },
                {
                  "description": null,
                  "name": "stop_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON atau SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-3.1-pro-preview-customtools"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "user",
                  "assistant"
                ],
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "max_tokens",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Documented current stock Messages bridge; optional model capabilities are separate from this minimal text request.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "max_tokens": {
                  "minimum": 1,
                  "type": "integer"
                },
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "source": {
                                      "oneOf": [
                                        {
                                          "properties": {
                                            "type": {
                                              "const": "url"
                                            },
                                            "url": {
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "url"
                                          ],
                                          "type": "object"
                                        },
                                        {
                                          "properties": {
                                            "data": {
                                              "type": "string"
                                            },
                                            "media_type": {
                                              "type": "string"
                                            },
                                            "type": {
                                              "const": "base64"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "media_type",
                                            "data"
                                          ],
                                          "type": "object"
                                        }
                                      ]
                                    },
                                    "type": {
                                      "const": "image"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "source"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "enum": [
                          "user",
                          "assistant"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "google/gemini-3.1-pro-preview-customtools"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages",
                "max_tokens"
              ],
              "type": "object"
            },
            "schema_template": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "google/gemini-3.1-pro-preview-customtools",
              "stream": false
            },
            "unsupported": [
              "No query API key.",
              "Hosted/server-side tools and model-specific optional controls are not part of this minimal family example."
            ]
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages",
              "max_tokens"
            ],
            "text_file_material": "Baca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan."
          },
          "lifecycle": {
            "create": {
              "http": "POST",
              "path": "/v1/messages"
            },
            "job_read": null,
            "mode": "synchronous_or_streamed",
            "unknown": "Keep request/response IDs and headers. No generic text job retrieval URL is supplied."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/messages"
          },
          "output": {
            "all_results": "Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.",
            "family": "protocol",
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Kadar asas token",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "reasoning_output_price",
                "label": "Reasoning output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "reasoning_output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "reasoning_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Tahap panjang permintaan 1",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Tahap panjang permintaan 2",
            "units": [
              {
                "amount": "0.008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000008",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.036000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000036",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000008",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"google/gemini-3.1-pro-preview-customtools\",\n  \"max_tokens\": 128,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Summarize the incident report.\"\n    }\n  ],\n  \"stream\": false\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'google/gemini-3.1-pro-preview-customtools', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nPath('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H \"x-api-key: $AILOOT_API_KEY\" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n",
            "label": "curl · use your UTF-8 document",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'google/gemini-3.1-pro-preview-customtools', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ['AILOOT_API_KEY']\nif not api_key.strip():\n    raise SystemExit('Set AILOOT_API_KEY before making a request')\nheaders = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}\nheaders['x-api-key'] = api_key\nrequest = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')\nexcept HTTPError as error:\n    Path('result.json').write_bytes(error.read())\n    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')\n    raise\nPath('result.json').write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n",
            "label": "Python · save the complete result",
            "language": "python"
          }
        ],
        "family": "anthropic",
        "fast_multiplier": 1,
        "flex_multiplier": 1,
        "fmt": "messages",
        "http": "POST",
        "in": 4,
        "input": [
          "text"
        ],
        "label": "Anthropic Messages",
        "max_out": null,
        "max_reasoning_effort_multiplier": 1,
        "method_aliases": [],
        "out": 24,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/messages",
        "price_conditions": [
          {
            "label": "Mod pantas",
            "value": "Kadar standard",
            "when": "Apabila mod pantas dipilih"
          },
          {
            "label": "Mod flex",
            "value": "Kadar standard",
            "when": "Apabila mod flex dipilih"
          },
          {
            "label": "Usaha penaakulan maksimum",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan maksimum menggunakan pelarasan default"
          },
          {
            "label": "Usaha penaakulan · high",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada high"
          },
          {
            "label": "Usaha penaakulan · low",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada low"
          },
          {
            "label": "Usaha penaakulan · medium",
            "value": "Kadar standard",
            "when": "Apabila usaha penaakulan ditetapkan kepada medium"
          },
          {
            "label": "Harga cache eksplisit",
            "value": "Tidak diaktifkan",
            "when": "Apabila cache eksplisit diminta"
          },
          {
            "label": "Output penaakulan",
            "value": "Penaakulan menggunakan kadar subset yang disenaraikan dalam output terkumpul; jangan tambah token tersebut dua kali.",
            "when": "Apabila output merangkumi token penaakulan"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "reasoning_output_price": 2.4e-05
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "reasoning_output_price",
                "label": "Reasoning output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "reasoning_output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "reasoning_output_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Request-length tier 1",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000024",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000004",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Request-length tier 2",
            "units": [
              {
                "amount": "0.008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000008",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.036000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000036",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0.0008000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0.0000008",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0.00075000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0.00000075",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "reasoning_effort_multipliers": {
          "high": 1,
          "low": 1,
          "medium": 1
        },
        "request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [
          {
            "cache_read": 0.4,
            "cache_read_multiplier": null,
            "cache_write": 0.75,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 4,
            "input_multiplier": null,
            "max": 200000,
            "max_tokens": 200000,
            "min": 0,
            "min_tokens": 0,
            "out": 24,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 0,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          },
          {
            "cache_read": 0.8,
            "cache_read_multiplier": null,
            "cache_write": 0.75,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 8,
            "input_multiplier": null,
            "max": null,
            "max_tokens": null,
            "min": 200000,
            "min_tokens": 200000,
            "out": 36,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 1,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          }
        ],
        "units": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "reasoning_output_price",
            "label": "Reasoning output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "reasoning_output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "reasoning_output_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/gemini-3.1-pro-preview-customtools",
        "request_model_id": "google/gemini-3.1-pro-preview-customtools",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Gemini 3.1 Pro Preview Custom Tools",
    "price": {
      "in": 4,
      "in_label": null,
      "out": 24,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 4,
      "sort_out": 24,
      "varies": true
    },
    "pricing_profiles": [
      {
        "dimensions": {
          "regime": "base"
        },
        "label": "OpenAI Chat · Base token rates",
        "units": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "reasoning_output_price",
            "label": "Reasoning output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "reasoning_output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "reasoning_output_token"
          }
        ]
      },
      {
        "dimensions": {
          "max_context_tokens_inclusive": 200000,
          "min_context_tokens_exclusive": 0
        },
        "label": "OpenAI Chat · Request-length tier 1",
        "units": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      },
      {
        "dimensions": {
          "max_context_tokens_inclusive": null,
          "min_context_tokens_exclusive": 200000
        },
        "label": "OpenAI Chat · Request-length tier 2",
        "units": [
          {
            "amount": "0.008000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000008",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.036000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000036",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0008000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000008",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      },
      {
        "dimensions": {
          "regime": "base"
        },
        "label": "Anthropic Messages · Base token rates",
        "units": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "reasoning_output_price",
            "label": "Reasoning output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "reasoning_output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "reasoning_output_token"
          }
        ]
      },
      {
        "dimensions": {
          "max_context_tokens_inclusive": 200000,
          "min_context_tokens_exclusive": 0
        },
        "label": "Anthropic Messages · Request-length tier 1",
        "units": [
          {
            "amount": "0.004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000004",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000024",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0004000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000004",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      },
      {
        "dimensions": {
          "max_context_tokens_inclusive": null,
          "min_context_tokens_exclusive": 200000
        },
        "label": "Anthropic Messages · Request-length tier 2",
        "units": [
          {
            "amount": "0.008000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000008",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.036000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000036",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0.0008000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0.0000008",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0.00075000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0.00000075",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "public_id": "google/gemini-3.1-pro-preview-customtools",
    "short": "Gemini 3.1 Pro Preview Custom Tools ialah varian berorientasikan ejen yang berbeza dan mengutamakan alat takrifan aplikasi bersama arahan terminal. Gunakannya apabila tindakan seperti membaca fail atau mencari kod perlu memacu tugas berbilang langkah, dengan aplikasi melaksanakan dan mengembalikan setiap hasil alat."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        },
        {
          "contract_json_pointer": "/methods/1/rawMethod/contract",
          "html_json_pointer": "/methods/1/html",
          "method_ordinal": 1
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod",
        "/methods/1/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Gemini 3.1 Pro Preview Custom Tools ialah varian berorientasikan ejen yang berbeza dan mengutamakan alat takrifan aplikasi bersama arahan terminal. Gunakannya apabila tindakan seperti membaca fail atau mencari kod perlu memacu tugas berbilang langkah, dengan aplikasi melaksanakan dan mengembalikan setiap hasil alat.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "fc512bc4ad71ae3b1d3347e51d9b6d3fd3687fe4a7af945382f18d66b5fd72da",
    "renderer_sha256": "1dab5ba62521e9568c8b7c82005622cabbf330a075df7cce1f83274a04009460"
  },
  "sourceRevision": "7e533c81bc7f800417367a1d0bf0e7fcc9b252f3c64dd758f5dfcfd1b4e03613"
}
