Lewati ke konten
kenari.

Server tools

Server tools adalah tool yang dijalankan kenari untuk kamu. Tambahkan satu ke array tools di request, lalu model memutuskan kapan memanggilnya. kenari menjalankan panggilan itu dan mengembalikan hasilnya ke model. Kamu menerima satu jawaban utuh. Model tidak perlu punya pencarian bawaan, cukup mendukung function calling. GET /v1/models menandai model seperti itu dengan "tool_call": true. Lihat Model & harga.

ToolFungsiPenagihan
kenari:web_searchMencari di web dan memberi model judul, URL, dan cuplikan.Per pencarian
kenari:web_fetchMengambil satu halaman dan memberi model teks dan tautannya.Per pengambilan
kenari:x_searchMencari postingan terkini di X dan memberi model jawaban singkat dengan sumber x.com.Per pencarian
kenari:datetimeMemberi model tanggal dan jam sekarang.Gratis

Server tools berfungsi di Chat Completions, Messages, dan Responses. Di ketiganya kamu mendeklarasikan tool dengan cara yang sama, yaitu type berisi kenari:<name> dan tidak ada yang lain. <name> adalah nama tool dari tabel.

Terminal window
curl https://kenari.id/v1/chat/completions \
-H "Authorization: Bearer $KENARI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "step-3-7-flash:free",
"tools": [{"type": "kenari:web_search"}],
"messages": [
{"role": "user", "content": "Apa yang berubah di rilis stabil Rust terbaru?"}
]
}'

Deklarasikan beberapa tool sekaligus, dan tetap pakai function tool milikmu di sampingnya:

{
"tools": [
{"type": "kenari:web_search"},
{"type": "kenari:datetime"},
{"type": "function", "function": {"name": "save_note", "parameters": {"type": "object"}}}
]
}

kenari hanya menjalankan tool yang tipenya diawali kenari:, dan meneruskan function tool milikmu apa adanya. Function yang namanya sama dengan server tool yang aktif, seperti web_search, web_fetch, x_search, atau datetime, bisa bertabrakan dengannya, jadi beri function-mu nama lain. Deklarasi kenari:* sama di format lain. Deklarasi function milikmu berbeda per format, lihat Function calling. Contohnya di Messages:

Terminal window
curl https://kenari.id/v1/messages \
-H "x-api-key: $KENARI_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "step-3-7-flash:free",
"max_tokens": 1024,
"tools": [{"type": "kenari:web_search"}],
"messages": [{"role": "user", "content": "Apa yang berubah di rilis stabil Rust terbaru?"}]
}'

Panggilan tool tetap ditagih walaupun model di request itu gratis. Lihat Penagihan.

Server tools berfungsi dengan stream: true. Saat model memutuskan memanggil tool di tengah stream, kenari menjalankannya, mengembalikan hasilnya, dan melanjutkan di stream yang sama. Kamu melihat satu pesan yang utuh, tanpa tool call di dalamnya. Lihat Streaming untuk format event.

kenari membatasi berapa kali model boleh memanggil tool dalam satu request: sampai 4 putaran tanpa streaming dan sampai 2 putaran dengan streaming. Saat batas tercapai, kenari mencabut tool-nya dan model harus menjawab dengan apa yang sudah ada.

Di Chat Completions, sumber yang ditemukan pencarian dikembalikan di sources, yaitu daftar object {url, title}. Tanpa streaming, daftar itu ada di message. Dengan streaming, daftar itu datang dalam satu chunk menjelang akhir, di delta.sources. Kalau model mengutip sumber sebagai [1], [2], dan seterusnya di teksnya, message juga membawa entri url_citation di annotations untuk penanda itu. Di Messages, response tanpa streaming punya daftar sources yang sama di level atas.

Model mengisi argumen panggilan tool, jadi model juga yang memilih x_search_filter. Kamu tidak bisa mengaturnya di deklarasi tool. Untuk mengarahkannya, tulis keinginanmu di prompt, misalnya “hanya posting dari akun-akun ini sejak tanggal satu bulan ini”. Untuk menetapkan filter sendiri, panggil Pencarian web & X langsung.

FieldTipeDeskripsi
allowed_x_handlesarray of stringCari hanya di akun-akun ini.
excluded_x_handlesarray of stringAbaikan akun-akun ini. Tidak bisa dipakai bersama allowed_x_handles.
from_date, to_datestringRentang tanggal dalam YYYY-MM-DD. from_date tidak boleh setelah to_date.
enable_image_understanding, enable_video_understandingbooleanBaca gambar atau video di dalam posting.

Handle ditulis tanpa @, hanya berisi huruf, angka, dan garis bawah, dan dibatasi 20 per daftar.

kenari:datetime membuat model bisa mengecek hari ini tanggal berapa, bukan menebak dari data latihannya. Model mengirim timezone opsional, berupa nama IANA seperti Asia/Jakarta atau America/New_York, atau singkatan umum seperti WIB, JST, atau UTC. Defaultnya Asia/Jakarta. Hasilnya berisi waktu sekarang dalam UTC dan waktu di zona itu.

Beberapa provider punya tool pencarian sendiri, seperti web_search_preview di OpenAI atau web_search_20250305 di Anthropic. kenari tidak menjalankannya. kenari meneruskannya ke provider tanpa diubah, dan tool itu hanya berfungsi untuk model yang provider-nya mendukungnya. Tool kenari:web_search berfungsi dengan model apa pun yang bisa memanggil fungsi, karena kenari yang melakukan pencariannya. Pakai satu jenis tool pencarian per request.

kenari:web_search, kenari:web_fetch, dan kenari:x_search ditagih per panggilan, terpisah dari token, dan hanya saat model benar-benar memanggilnya. kenari:datetime gratis. Panggilan yang gagal tidak ditagih. Cara jatah harian paket dan saldomu berlaku dijelaskan di Langganan.

Kalau sebuah panggilan tidak bisa didanai, panggilan itu tidak dijalankan. Model diberi tahu bahwa pencarian tidak tersedia dan tetap menjawab, jadi request tidak gagal. Lihat Cara penagihan dan Langganan.

Key yang dibatasi ke model tertentu hanya bisa memakai pencarian dan pengambilan halaman kalau Pencarian dan pengambilan halaman web dicentang di bawah Kemampuan berbayar, dan pencarian X kalau Pencarian X dicentang. Lihat Autentikasi & API key.

Pencarian, pengambilan halaman, dan pencarian X yang sama tersedia sebagai endpoint biasa, tanpa model. Lihat Pencarian web & X.