Anthropic: Claude Sonnet 4.6
Claude Sonnet 4.6 membantu pembangunan, pemahaman dokumen panjang, perancangan dan tugasan yang menggunakan data visual. Menyokong penaakulan adaptif dan kerja berbilang langkah dengan alat.
- Ailoot · Anthropic Messages
POST /v1/messagesclaude-sonnet-4-6 - Ailoot · OpenAI Responses
POST /v1/responsesclaude-sonnet-4-6 - Ailoot · OpenAI Chat
POST /v1/chat/completionsclaude-sonnet-4-6 - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsanthropic/claude-sonnet-4.6 - Ailoot Ultra · Anthropic Messages
POST /v1/messagesanthropic/claude-sonnet-4.6
Tentang model
Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.
Kod, dokumen dan pelan tindakan
Claude Sonnet 4.6 menggabungkan pengaturcaraan, pemahaman konteks besar, perancangan ejen, penggunaan maklumat secara profesional dan reka bentuk. Anthropic menekankan kajian kod sebelum perubahan serta keupayaan mengendalikan beberapa langkah tugasan secara berurutan. Ini berguna untuk mencari masalah dalam projek besar, menganalisis dokumen panjang dan menyediakan kandungan laporan.
Model boleh menganalisis maklumat daripada kontrak, kertas penyelidikan dan bahan lain dalam satu permintaan. Tugasan boleh merangkumi pengekstrakan fakta, penaakulan berasaskannya dan pembentukan hasil yang menggabungkan beberapa bahagian. Antara kegunaan yang diterangkan juga ialah analisis kewangan dan penulisan kod antara muka dengan perhatian kepada komposisi dan reka bentuk.
Tindakan dalam persekitaran visual
Sonnet 4.6 memahami teks dan imej; hasilnya sendiri ialah teks. Anthropic menerangkan senario komputer yang modelnya berpandukan tangkapan skrin, memilih tindakan tetikus dan papan kekunci serta menganalisis hamparan rumit atau urutan langkah borang web. Pelaksanaan sebenar memerlukan alat aplikasi yang menghantar skrin dan melaksanakan tindakan.
Format input visual biasa pengeluar ialah JPEG/PNG/GIF/WebP, dengan bingkai pertama digunakan bagi animasi. Untuk analisis natif: sisi panjang ialah 1568 piksel dan jumlah token visual ialah 1568; imej besar dikecilkan sebelum analisis. Sokongan fail dan parameter bergantung pada kaedah aplikasi.
Begitu juga, dokumen, hamparan dan pembentangan boleh menjadi bahan analisis atau penyediaan kandungan, tetapi penghasilan fail siap memerlukan persekitaran yang sesuai. Imej membantu memahami graf, rajah dan struktur visual bahan; ini tidak menjadikan model penjana imej.
Cara analisis dikawal
Versi ini menyokong penaakulan adaptif dan extended thinking manual. Mod manual ditandakan sebagai semakin lapuk; mod adaptif membolehkan model memilih bila analisis tambahan berguna, termasuk antara panggilan alat. Tahap effort ialah low, medium, high dan max, dengan high sebagai tahap standard. Menurut Anthropic, pemilihan tahap usaha membantu menyesuaikan perincian kerja dan kependaman dengan sifat tugasan.
Spesifikasi semasa menetapkan 1 juta token konteks dan sehingga 128 ribu token respons dalam mod biasa. Bagi kerja berpanjangan, pengeluar turut menerangkan pemampatan eksperimen konteks lama menjadi ringkasan. Fungsi ini memerlukan sokongan aplikasi dan tidak menyingkirkan batasan tetingkap model.
Perkara yang perlu diambil kira
Batas pengetahuan terbina dalam yang boleh dipercayai ialah Ogos 2025. Maklumat lebih baharu memerlukan bahan arahan atau carian yang tersedia. Alat yang disambungkan boleh membantu mencari maklumat, melaksanakan kod dan memproses kandungan yang ditemui; kewujudan alat serta tindakan yang dibenarkan ditentukan oleh aplikasi.
Sonnet 4.6 dilatih untuk menentang arahan berniat jahat yang tersembunyi dalam bahan pihak lain, tetapi persekitaran visual yang rumit dan arahan yang samar masih boleh menyebabkan ralat. Keperluan tugasan yang jelas, semakan fakta yang diekstrak dan penilaian hasil tindakan kekal sebagai sebahagian daripada penggunaan model yang boleh dipercayai.
Tugas praktikal
Tugas praktikal
Contoh teknikal dalam bahasa Inggeris
Turn a report into an action plan
Read these release notes: "Import rejects blank email addresses. Existing records with blank emails still open. The settings page says email is optional. Support has three complaints about contradictory instructions." Prepare an action plan with the user-facing inconsistency, a proposed wording change and checks for new imports versus existing records.Hasil yang dijangka
A short issue statement, revised settings wording and separate checks for import and existing-record behavior.Semak hasil
Check that changing the help text is not presented as changing validation or stored records.Ailoot · Anthropic Messages POST /v1/messages claude-sonnet-4-6
claude-sonnet-4-6Pengenalan
Claude Sonnet 4.6 membantu pembangunan, pemahaman dokumen panjang, perancangan dan tugasan yang menggunakan data visual. Menyokong penaakulan adaptif dan kerja berbilang langkah dengan alat.
- Input yang diterima
- Teks · Imej
- Hasil
- Teks
Tersedia di Ailoot · input & kaedah
Ailoot · Anthropic Messages POST /v1/messages
- Input
text,image- Output
text- Konteks
- 1,000,000 tokens
- Output maksimum
- 131,072 tokens
- Format output
- json atau SSE
| Medan | Jenis | Keperluan | Nilai & had | Lalai |
|---|---|---|---|---|
Medanmodel | Jenisstring | KeperluanDiperlukan | Nilai & had claude-sonnet-4-6 | Lalai— |
Medanmessages | Jenismessage[] | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
Medanmessages[].role | Jenisstring | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
Medanmessages[].content | Jenisstring|content_block[] | KeperluanDiperlukan | Nilai & had | Lalai— |
Medansystem | Jenisstring|content_block[] | KeperluanPilihan | Nilai & had | Lalai— |
Medanmax_tokens | Jenisinteger | KeperluanDiperlukan | Nilai & had Minimum: 1 Had terpakai pada: had maksimum tepat bagi model/kad yang dipilih | Lalai— |
Medanstream | Jenisboolean | KeperluanPilihan | Nilai & had | Lalaifalse |
Medantemperature | Jenisnumber | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantop_p | Jenisnumber | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanstop_sequences | Jenisstring[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantools | Jenistool[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantools[].name | Jenisstring | KeperluanPilihan | Nilai & had Terpakai apabila: alat dibekalkan | Lalai— |
Medantools[].description | Jenisstring | KeperluanPilihan | Nilai & had | Lalai— |
Medantools[].input_schema | JenisJSON_schema | KeperluanPilihan | Nilai & had | Lalai— |
Medantool_choice | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanthinking.type | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanthinking.budget_tokens | Jenisinteger | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanoutput_config.effort | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanmetadata | Jenisobject | KeperluanPilihan | Nilai & had | Lalai— |
Medancache_control | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Gabungan bahan input
Teks · Teks UTF8
messages[].content atau blok type=text
Teks + imej
{type:image,source:{type:base64,media_type,data}} atau sumber dengan type=url
Parameter kaedah dan kitar hayat
| Parameter | Kontrak |
|---|---|
Parametermaterial_types | Kontraktext, image |
Parameterrequired | Kontrakmodel, messages, max_tokens |
Parameteroptional_controls | Kontraknull |
Parametercontent_type | Kontrakapplication/json |
Parametertext_file_material | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |
Kitar hayat: exact retained published method
Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.
Pelan harga
Kadar kaedah Ailoot
POST /v1/messages- Input
- USD 0.003 / 1K
- Output
- USD 0.015 / 1K
- Bacaan cache
- USD 0.0003 / 1K
- Penulisan cache
- USD 0.00375 / 1K
- Penulisan cache, 5 minit
- USD 0.00375 / 1K tokens
- Penulisan cache, 1 jam
- USD 0.006 / 1K tokens
- web_search_call
- USD 0.01 bagi setiap panggilan
- Panggilan maksimum web_search_call
- 8
Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →
Butiran tarif rujukan
Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.
Jadual rujukan model
Harga mengikut konfigurasi
Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.
| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
|---|---|---|---|---|
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
Contoh permintaan
Ailoot · Anthropic Messages
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "claude-sonnet-4-6", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "claude-sonnet-4-6", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(msg);
import anthropic,os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.messages.stream(model='claude-sonnet-4-6',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_message()
save_result(final.to_dict(mode="json"),"stream-result")
Terima dan simpan hasil
Ailoot · Anthropic Messages
json atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.
Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.
Jika respons asal perlu disemak
Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.
Medan respons
| Medan | Jenis |
|---|---|
Medanid | Jenisstring |
Medanmodel | Jenisstring |
Medancontent[] | Jenistext|thinking|tool_use|other content block |
Medanstop_reason | Jenisstring|null |
Medanusage | Jenisobject |
Ralat dan langkah seterusnya
| Respons | Syarat | Langkah seterusnya |
|---|---|---|
Respons400 · invalid_request_error | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
Alias
Alias model
Ailoot claude-sonnet-4-6
Ailoot Ultra anthropic/claude-sonnet-4.6
Alias laluan kaedah
Gunakan laluan kaedah yang dipaparkan di atas.
ID pemanggil berkaitan
Ailoot · OpenAI Responses POST /v1/responses claude-sonnet-4-6
claude-sonnet-4-6Pengenalan
Claude Sonnet 4.6 membantu pembangunan, pemahaman dokumen panjang, perancangan dan tugasan yang menggunakan data visual. Menyokong penaakulan adaptif dan kerja berbilang langkah dengan alat.
- Input yang diterima
- Teks · Imej
- Hasil
- Teks
Tersedia di Ailoot · input & kaedah
Ailoot · OpenAI Responses POST /v1/responses
- Input
text,image- Output
text- Konteks
- 1,000,000 tokens
- Output maksimum
- 131,072 tokens
- Format output
- json atau SSE
| Medan | Jenis | Keperluan | Nilai & had | Lalai |
|---|---|---|---|---|
Medanmodel | Jenisstring | KeperluanDiperlukan | Nilai & had claude-sonnet-4-6 | Lalai— |
Medaninput | Jenisstring|input_item[] | KeperluanDiperlukan | Nilai & had | Lalai— |
Medaninstructions | Jenisstring | KeperluanPilihan | Nilai & had | Lalai— |
Medaninput[].type | Jenisstring | KeperluanPilihan | Nilai & had message, reasoning, function_call, function_call_output | Lalai— |
Medaninput[].content | Jenisstring|content_part[] | KeperluanPilihan | Nilai & had | Lalai— |
Medaninput[].call_id | Jenisstring | KeperluanPilihan | Nilai & had Terpakai apabila: function_call_output; kekalkan call_id sebenar yang dipulangkan | Lalai— |
Medaninput[].output | Jenisstring|content_part[] | KeperluanPilihan | Nilai & had Terpakai apabila: function_call_output | Lalai— |
Medanmax_output_tokens | Jenisinteger | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
Medanstream | Jenisboolean | KeperluanPilihan | Nilai & had | Lalaifalse |
Medantemperature | Jenisnumber | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantop_p | Jenisnumber | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantools | Jenistool[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantool_choice | Jenisstring|object | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanparallel_tool_calls | Jenisboolean | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanreasoning.effort | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanreasoning.summary | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantext.format | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantext.verbosity | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medaninclude | Jenisstring[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanstore | Jenisboolean | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanprevious_response_id | Jenisstring | KeperluanPilihan | Nilai & had Keperluan ID: Hanya ID respons sebenar daripada penerusan yang disokong Bergantung pada model | Lalai— |
Medanservice_tier | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanprompt_cache_key | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanprompt_cache_options | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Gabungan bahan input
Teks · Teks UTF8
Teks input atau bahagian input_text
Teks + imej
{type:input_image,image_url}
Parameter kaedah dan kitar hayat
| Parameter | Kontrak |
|---|---|
Parametermaterial_types | Kontraktext, image |
Parameterrequired | Kontrakmodel, input |
Parameteroptional_controls | Kontraknull |
Parametercontent_type | Kontrakapplication/json |
Parametertext_file_material | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |
Kitar hayat: exact retained published method
Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.
Pelan harga
Kadar kaedah Ailoot
POST /v1/responses- Input
- USD 0.003 / 1K
- Output
- USD 0.015 / 1K
- Bacaan cache
- USD 0.0003 / 1K
- Penulisan cache
- USD 0.00375 / 1K
- Penulisan cache, 5 minit
- USD 0.00375 / 1K tokens
- Penulisan cache, 1 jam
- USD 0.006 / 1K tokens
- web_search_call
- USD 0.01 bagi setiap panggilan
- Panggilan maksimum web_search_call
- 8
Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →
Butiran tarif rujukan
Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.
Jadual rujukan model
Harga mengikut konfigurasi
Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.
| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
|---|---|---|---|---|
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
Contoh permintaan
Ailoot · OpenAI Responses
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "claude-sonnet-4-6", "input": ""}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["input"]="Summarize this material and quote supporting source passages.\n\n"+text
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "claude-sonnet-4-6", "input": [{"role": "user", "content": [{"type": "input_text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["input"][0]["content"].append({"type":"input_image","image_url":"data:"+mime+";base64,"+b64})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/responses \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.responses.create(model="claude-sonnet-4-6", input="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.responses.create({ model: "claude-sonnet-4-6", input: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
with client.responses.stream(model="claude-sonnet-4-6", input="Explain the difference between an observation and a hypothesis in three sentences.") as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_response()
save_result(final.to_dict(mode="json"),"stream-result")
Terima dan simpan hasil
Ailoot · OpenAI Responses
json atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.
Kekalkan setiap item output dan bahagian kandungan, call_id fungsi sebenar, penaakulan disulitkan serta data penggunaan. Semasa penstriman, kekalkan identiti peristiwa/item yang lengkap.
Jika respons asal perlu disemak
Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.
Medan respons
| Medan | Jenis |
|---|---|
Medanid | Jenisstring |
Medanstatus | Jenisstring |
Medanoutput[] | Jenismessage|reasoning|function_call|other item |
Medanoutput[].content[] | Jeniscontent part |
Medanusage | Jenisobject |
Ralat dan langkah seterusnya
| Respons | Syarat | Langkah seterusnya |
|---|---|---|
Respons400 · invalid_request_error | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
Alias
Alias model
Ailoot claude-sonnet-4-6
Ailoot Ultra anthropic/claude-sonnet-4.6
Alias laluan kaedah
Gunakan laluan kaedah yang dipaparkan di atas.
ID pemanggil berkaitan
Ailoot · OpenAI Chat POST /v1/chat/completions claude-sonnet-4-6
claude-sonnet-4-6Pengenalan
Claude Sonnet 4.6 membantu pembangunan, pemahaman dokumen panjang, perancangan dan tugasan yang menggunakan data visual. Menyokong penaakulan adaptif dan kerja berbilang langkah dengan alat.
- Input yang diterima
- Teks · Imej
- Hasil
- Teks
Tersedia di Ailoot · input & kaedah
Ailoot · OpenAI Chat POST /v1/chat/completions
- Input
text,image- Output
text- Konteks
- 1,000,000 tokens
- Output maksimum
- 131,072 tokens
- Format output
- json atau SSE
| Medan | Jenis | Keperluan | Nilai & had | Lalai |
|---|---|---|---|---|
Medanmodel | Jenisstring | KeperluanDiperlukan | Nilai & had claude-sonnet-4-6 | Lalai— |
Medanmessages | Jenismessage[] | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
Medanmessages[].role | Jenisstring | KeperluanDiperlukan | Nilai & had Contoh: system, user, assistant, tool, function Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model. Bergantung pada model | Lalai— |
Medanmessages[].content | Jenisstring|content_part[]|null | KeperluanPilihan | Nilai & had | Lalai— |
Medanmessages[].tool_calls | Jenistool_call[] | KeperluanPilihan | Nilai & had | Lalai— |
Medanmessages[].tool_call_id | Jenisstring | KeperluanPilihan | Nilai & had Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan | Lalai— |
Medanmessages[].name | Jenisstring | KeperluanPilihan | Nilai & had | Lalai— |
Medanmessages[].reasoning_content | Jenisstring | KeperluanPilihan | Nilai & had Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya | Lalai— |
Medanmessages[].reasoning_details | Jenisobject|array | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanmax_tokens | Jenisinteger | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
Medanmax_completion_tokens | Jenisinteger | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
Medanstream | Jenisboolean | KeperluanPilihan | Nilai & had | Lalaifalse |
Medanstream_options.include_usage | Jenisboolean | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantemperature | Jenisnumber | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantop_p | Jenisnumber | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanstop | Jenisstring|string[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantools | Jenisfunction_tool[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantools[].type | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantools[].function.name | Jenisstring | KeperluanDiperlukan | Nilai & had Terpakai apabila: alat fungsi dibekalkan | Lalai— |
Medantools[].function.description | Jenisstring | KeperluanPilihan | Nilai & had | Lalai— |
Medantools[].function.parameters | JenisJSON_schema | KeperluanPilihan | Nilai & had | Lalai— |
Medantool_choice | Jenisstring|object | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanparallel_tool_calls | Jenisboolean | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanresponse_format | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanreasoning_effort | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanreasoning | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanservice_tier | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medaninstructions | Jenisstring | KeperluanPilihan | Nilai & had Medan keserasian | Lalai— |
Medanfunctions | Jenisfunction[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanfunction_call | Jenisstring|object | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanprompt_cache_options | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Gabungan bahan input
Teks · Teks UTF8
messages[].content
Teks + imej
{type:image_url,image_url:{url,detail}}
Parameter kaedah dan kitar hayat
| Parameter | Kontrak |
|---|---|
Parametermaterial_types | Kontraktext, image |
Parameterrequired | Kontrakmodel, messages |
Parameteroptional_controls | Kontraknull |
Parametercontent_type | Kontrakapplication/json |
Parametertext_file_material | Kontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan |
Kitar hayat: exact retained published method
Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.
Pelan harga
Kadar kaedah Ailoot
POST /v1/chat/completions- Input
- USD 0.003 / 1K
- Output
- USD 0.015 / 1K
- Bacaan cache
- USD 0.0003 / 1K
- Penulisan cache
- USD 0.00375 / 1K
- Penulisan cache, 5 minit
- USD 0.00375 / 1K tokens
- Penulisan cache, 1 jam
- USD 0.006 / 1K tokens
- web_search_call
- USD 0.01 bagi setiap panggilan
- Panggilan maksimum web_search_call
- 8
Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →
Butiran tarif rujukan
Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.
Jadual rujukan model
Harga mengikut konfigurasi
Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.
| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
|---|---|---|---|---|
| KonfigurasiOpenAI Chat · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiAnthropic Messages · Kadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaan | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
Contoh permintaan
Ailoot · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "claude-sonnet-4-6", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "claude-sonnet-4-6", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(resp.to_dict(mode="json"))
import OpenAI from "openai";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
model: "claude-sonnet-4-6",
messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(resp);
from openai import OpenAI
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.chat.completions.stream(model='claude-sonnet-4-6',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_completion()
save_result(final.to_dict(mode="json"),"stream-result")
Terima dan simpan hasil
Ailoot · OpenAI Chat
json atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.
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.
Jika respons asal perlu disemak
Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.
Medan respons
| Medan | Jenis |
|---|---|
Medanchoices[].index | Jenisinteger |
Medanchoices[].message.content | Jenisstring|null |
Medanchoices[].message.tool_calls | Jenistool_call[] |
Medanchoices[].message.reasoning_content | Jenisstring |
Medanchoices[].message.reasoning_details | Jenisobject|array |
Medanchoices[].finish_reason | Jenisstring|null |
Medanusage | Jenisobject |
Ralat dan langkah seterusnya
| Respons | Syarat | Langkah seterusnya |
|---|---|---|
Respons400 · invalid_request_error | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
Alias
Alias model
Ailoot claude-sonnet-4-6
Ailoot Ultra anthropic/claude-sonnet-4.6
Alias laluan kaedah
Gunakan laluan kaedah yang dipaparkan di atas.
ID pemanggil berkaitan
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions anthropic/claude-sonnet-4.6
anthropic/claude-sonnet-4.6Pengenalan
Claude Sonnet 4.6 membantu pembangunan, pemahaman dokumen panjang, perancangan dan tugasan yang menggunakan data visual. Menyokong penaakulan adaptif dan kerja berbilang langkah dengan alat.
- Input yang diterima
- Teks
- Hasil
- Teks
Tersedia di Ailoot · input & kaedah
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Input
text- Output
text- Format output
- json atau SSE
| Medan | Jenis | Keperluan | Nilai & had | Lalai |
|---|---|---|---|---|
Medanmodel | Jenisstring | KeperluanDiperlukan | Nilai & had anthropic/claude-sonnet-4.6 | Lalai— |
Medanmessages | Jenismessage[] | KeperluanDiperlukan | Nilai & had Item minimum: 1 | Lalai— |
Medanmessages[].role | Jenisstring | KeperluanDiperlukan | Nilai & had Contoh: system, user, assistant, tool, function Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model. Bergantung pada model | Lalai— |
Medanmessages[].content | Jenisstring|content_part[]|null | KeperluanPilihan | Nilai & had | Lalai— |
Medanmessages[].tool_calls | Jenistool_call[] | KeperluanPilihan | Nilai & had | Lalai— |
Medanmessages[].tool_call_id | Jenisstring | KeperluanPilihan | Nilai & had Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan | Lalai— |
Medanmessages[].name | Jenisstring | KeperluanPilihan | Nilai & had | Lalai— |
Medanmessages[].reasoning_content | Jenisstring | KeperluanPilihan | Nilai & had Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya | Lalai— |
Medanmessages[].reasoning_details | Jenisobject|array | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanmax_tokens | Jenisinteger | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
Medanmax_completion_tokens | Jenisinteger | KeperluanPilihan | Nilai & had Minimum: 1 Bergantung pada model | Lalai— |
Medanstream | Jenisboolean | KeperluanPilihan | Nilai & had | Lalaifalse |
Medanstream_options.include_usage | Jenisboolean | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantemperature | Jenisnumber | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantop_p | Jenisnumber | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanstop | Jenisstring|string[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantools | Jenisfunction_tool[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medantools[].type | Jenisstring | KeperluanPilihan | Nilai & had function Bergantung pada model | Lalai— |
Medantools[].function.name | Jenisstring | KeperluanDiperlukan | Nilai & had Terpakai apabila: alat fungsi dibekalkan | Lalai— |
Medantools[].function.description | Jenisstring | KeperluanPilihan | Nilai & had | Lalai— |
Medantools[].function.parameters | JenisJSON_schema | KeperluanPilihan | Nilai & had | Lalai— |
Medantool_choice | Jenisstring|object | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanparallel_tool_calls | Jenisboolean | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanresponse_format | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanreasoning_effort | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanreasoning | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanservice_tier | Jenisstring | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medaninstructions | Jenisstring | KeperluanPilihan | Nilai & had Medan keserasian | Lalai— |
Medanfunctions | Jenisfunction[] | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanfunction_call | Jenisstring|object | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanprompt_cache_options | Jenisobject | KeperluanPilihan | Nilai & had Bergantung pada model | Lalai— |
Medanmodalities | Jenisstring[] | KeperluanPilihan | Nilai & had text | Lalai— |
Medanprovider | Jenisobject | KeperluanPilihan | Nilai & had Syarat: provider.options ditolak pada laluan teks Ultra ini | Lalai— |
Medancache_control.ttl | Jenisstring | KeperluanPilihan | Nilai & had Syarat: 1h ditolak pada lokasi cache prompt yang digunakan | Lalai— |
Gabungan bahan input
Teks · Teks UTF8
messages[].content
Parameter kaedah dan kitar hayat
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, messages |
Parametermaterial_types | Kontraktext |
Parametermessages | Kontraktatasusunan mesej dengan struktur role/content |
Parameterfile_material | Kontrakdokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan |
Parameteroptional_controls | Kontrakstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Parametercontrol_scope | Kontrakkhusus model; alat fungsi pengguna berbeza daripada alat yang dihoskan |
Parameteroutput_modalities | Kontraktext |
Parameterhosted_operations | Kontrakfalse |
Parametermultimodal_input_binding | Kontraknull |
Kitar hayat: synchronous_or_streamed
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.
Pelan harga
Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.
- Mod pantas
- Kadar standard Apabila mod pantas dipilih
- Mod flex
- Kadar standard Apabila mod flex dipilih
- Usaha penaakulan maksimum
- Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default
- Usaha penaakulan · high
- Kadar standard Apabila usaha penaakulan ditetapkan kepada high
- Usaha penaakulan · low
- Kadar standard Apabila usaha penaakulan ditetapkan kepada low
- Usaha penaakulan · max
- Kadar standard Apabila usaha penaakulan ditetapkan kepada max
- Usaha penaakulan · medium
- Kadar standard Apabila usaha penaakulan ditetapkan kepada medium
Kadar Ailoot
Harga mengikut konfigurasi
Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.
| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
|---|---|---|---|---|
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →
Contoh permintaan
Ailoot Ultra · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "anthropic/claude-sonnet-4.6", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='anthropic/claude-sonnet-4.6',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
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
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.chat.completions.stream(model='anthropic/claude-sonnet-4.6',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_completion()
save_result(final.to_dict(mode="json"),"stream-result")
Terima dan simpan hasil
Ailoot Ultra · OpenAI Chat
json atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.
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.
Jika respons asal perlu disemak
Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.
Medan respons
| Medan | Jenis |
|---|---|
Medanchoices[].index | Jenisinteger |
Medanchoices[].message.content | Jenisstring|null |
Medanchoices[].message.tool_calls | Jenistool_call[] |
Medanchoices[].message.reasoning_content | Jenisstring |
Medanchoices[].message.reasoning_details | Jenisobject|array |
Medanchoices[].finish_reason | Jenisstring|null |
Medanusage | Jenisobject |
Ralat dan langkah seterusnya
| Respons | Syarat | Langkah seterusnya |
|---|---|---|
Respons400 · invalid_request_error | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
Alias
Alias model
Ailoot claude-sonnet-4-6
Ailoot Ultra anthropic/claude-sonnet-4.6
Alias laluan kaedah
Gunakan laluan kaedah yang dipaparkan di atas.
ID pemanggil berkaitan
Ailoot Ultra · Anthropic Messages POST /v1/messages anthropic/claude-sonnet-4.6
anthropic/claude-sonnet-4.6Pengenalan
Claude Sonnet 4.6 membantu pembangunan, pemahaman dokumen panjang, perancangan dan tugasan yang menggunakan data visual. Menyokong penaakulan adaptif dan kerja berbilang langkah dengan alat.
- Input yang diterima
- Teks
- Hasil
- json · sse
Tersedia di Ailoot · input & kaedah
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Input
text- Output
json,sse- Format output
- JSON atau SSE
| Medan | Jenis | Keperluan | Nilai & had | Lalai |
|---|---|---|---|---|
Medanmodel | Jenisstring | KeperluanDiperlukan | Nilai & had anthropic/claude-sonnet-4.6 | Lalai— |
Medanmessages | Jenismessage[] | KeperluanDiperlukan | Nilai & had | Lalai— |
Medanmessages[].role | Jenisstring | KeperluanDiperlukan | Nilai & had user, assistant | Lalai— |
Medanmessages[].content | Jenisstring | KeperluanDiperlukan | Nilai & had | Lalai— |
Medanmax_tokens | Jenisinteger | KeperluanDiperlukan | Nilai & had | Lalai— |
Medanstream | Jenisboolean | KeperluanPilihan | Nilai & had | Lalaifalse |
Gabungan bahan input
Teks · Teks UTF-8
rentetan messages[].content
Parameter kaedah dan kitar hayat
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, messages, max_tokens |
Parameteroptional_controls | Kontrakstream |
Parametermaterial_types | Kontraktext |
Parametertext_file_material | KontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan. |
Kitar hayat: synchronous_or_streamed
Pelan harga
Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.
- Mod pantas
- Kadar standard Apabila mod pantas dipilih
- Mod flex
- Kadar standard Apabila mod flex dipilih
- Usaha penaakulan maksimum
- Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default
- Usaha penaakulan · high
- Kadar standard Apabila usaha penaakulan ditetapkan kepada high
- Usaha penaakulan · low
- Kadar standard Apabila usaha penaakulan ditetapkan kepada low
- Usaha penaakulan · max
- Kadar standard Apabila usaha penaakulan ditetapkan kepada max
- Usaha penaakulan · medium
- Kadar standard Apabila usaha penaakulan ditetapkan kepada medium
Kadar Ailoot
Harga mengikut konfigurasi
Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.
| Konfigurasi | Jadual kadar | Token konteks, melebihi | Token konteks, sehingga dan termasuk | Caj |
|---|---|---|---|---|
| KonfigurasiKadar asas token | Jadual kadarKadar asas | Token konteks, melebihi— | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
| KonfigurasiTahap panjang permintaan 1 | Jadual kadar— | Token konteks, melebihi0 | Token konteks, sehingga dan termasukTiada had atas | Caj Input · Token input $0.006 / 1K token Output · Token output $0.03 / 1K token Input · Bacaan cache $0.0006 / 1K token Input · Penulisan cache $0.0075 / 1K token Input · Penulisan cache, 1 jam $0.012 / 1K token |
Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →
Contoh permintaan
Ailoot Ultra · Anthropic Messages
{
"model": "anthropic/claude-sonnet-4.6",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'anthropic/claude-sonnet-4.6', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'anthropic/claude-sonnet-4.6', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Terima dan simpan hasil
Ailoot Ultra · Anthropic Messages
JSON atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.
Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.
Jika respons asal perlu disemak
Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.
Medan respons
| Medan | Jenis |
|---|---|
Medanid | Jenisstring |
Medanmodel | Jenisstring |
Medancontent[] | Jenistext|thinking|tool_use|other content block |
Medanstop_reason | Jenisstring|null |
Medanusage | Jenisobject |
Ralat dan langkah seterusnya
| Respons | Syarat | Langkah seterusnya |
|---|---|---|
Respons400 · invalid_request_error | SyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sah | Langkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu. |
Alias
Alias model
Ailoot claude-sonnet-4-6
Ailoot Ultra anthropic/claude-sonnet-4.6
Alias laluan kaedah
Gunakan laluan kaedah yang dipaparkan di atas.
ID pemanggil berkaitan
FAQ · Anthropic: Claude Sonnet 4.6
- Apakah input dan hasil yang tersedia?
POST /v1/messages·claude-sonnet-4-6:text,image→textPOST /v1/responses·claude-sonnet-4-6:text,image→textPOST /v1/chat/completions·claude-sonnet-4-6:text,image→textPOST /v1/chat/completions·anthropic/claude-sonnet-4.6:text→textPOST /v1/messages·anthropic/claude-sonnet-4.6:text→json,sse- Apakah medan yang digunakan oleh permintaan?
POST /v1/messages·claude-sonnet-4-6:model,messages,system,max_tokens,stream,metadataPOST /v1/responses·claude-sonnet-4-6:model,input,instructions,streamPOST /v1/chat/completions·claude-sonnet-4-6:model,messages,streamPOST /v1/chat/completions·anthropic/claude-sonnet-4.6:model,messages,stream,modalities,providerPOST /v1/messages·anthropic/claude-sonnet-4.6:model,messages,max_tokens,stream- Apakah had yang terpakai?
POST /v1/messages·claude-sonnet-4-6:ctx:1000000;max_out:131072;messages.min_items:1;max_tokens.minimum:1POST /v1/responses·claude-sonnet-4-6:ctx:1000000;max_out:131072POST /v1/chat/completions·claude-sonnet-4-6:ctx:1000000;max_out:131072;messages.min_items:1POST /v1/chat/completions·anthropic/claude-sonnet-4.6:messages.min_items:1