model

Qwen: Qwen3.7 Max

Markdown · JSON

Qwen: Qwen3.7 Max

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Tentang model

Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.

Qwen3.7 Max adalah model teks unggulan dalam seri Qwen3.7 Alibaba. Peran yang dipublikasikan berpusat pada alur kerja agen, pemrograman, tugas kantor dan produktivitas, serta pekerjaan yang berlanjut dalam beberapa langkah. Masukan teks menghasilkan keluaran teks. Profil mencantumkan jendela konteks 1,000,000 token dan hingga 131,072 token completion.

Artefak pemrograman dan kantor

Arahan pemrograman harus mengidentifikasi perilaku yang perlu diwujudkan, sumber yang relevan, dan pengamatan yang membuktikan masalah saat ini. Minta perubahan terarah serta pemeriksaan yang diperlukan untuk menilainya. Tugas kantor dapat memberikan materi untuk laporan, perbandingan, atau catatan perencanaan dan menetapkan audiens, temuan yang diperlukan, serta struktur keluaran.

Sertakan data aktual, label dokumen, dan asumsi bersama tugas. Untuk laporan, bedakan temuan sumber dari interpretasi. Untuk pertanyaan terkait spreadsheet, berikan nilai serta rumus yang relevan dan pertahankan hasil perhitungan eksak yang dilakukan di luar model.

Alat dan hasil terstruktur

Kontrak hosting yang didokumentasikan mendukung function calling dan keluaran terstruktur JSON-schema. Tetapkan operasi yang tersedia bagi aplikasi dan kolom yang diperlukan untuk hasil. Pemanggilan alat menjelaskan operasi yang dimaksud; aplikasi menjalankannya dan memberikan pengamatan aktual. Pengamatan itu harus tetap dikaitkan dengan keputusan model berikutnya.

Untuk hasil akhir terstruktur, tentukan tipe, satuan, dan penanganan informasi yang hilang. Validasi catatan yang dikembalikan terhadap skema maupun sumbernya. Untuk jawaban yang lebih panjang, minta kesimpulan konkret dan bukti yang menjelaskannya.

Konteks berulang dan pekerjaan berkelanjutan

Profil mendokumentasikan prompt caching untuk konteks berulang. Jaga instruksi yang dapat digunakan ulang dan materi sumber yang stabil tetap konsisten pada permintaan yang berkaitan, sambil menempatkan tugas saat ini serta pengamatan baru di bagian yang mudah dikenali. Penggunaan ulang cache yang aktual merupakan sifat permintaan layanan dan informasi penggunaannya, bukan hasil yang disimpulkan hanya dari redaksi yang serupa.

Gunakan konteks panjang untuk mempertahankan keputusan yang relevan dan hubungan antarsumber, sambil menyisakan ruang untuk jawaban. Tugas yang selesai harus menyimpan artefak, pengamatan yang mendukungnya, dan pertanyaan yang masih tersisa agar giliran berikutnya dapat melanjutkan dari keadaan yang telah ditetapkan.

Tugas praktis

Tugas praktis

Contoh teknis dalam bahasa Inggris

Review a forecast formula

Review this spreadsheet plan in text. Opening stock is 120 units; receipts are 50; forecast sales are 90. Closing stock formula is =opening_stock+receipts+forecast_sales. Correct the formula, show the arithmetic for the supplied row and give a check for a row where forecast sales exceed available stock. Return a short analyst note.

Hasil yang diharapkan

A corrected formula, a worked row calculation and a validation rule for a negative projected closing balance.

Periksa hasil

Check that sales reduce stock and the negative-balance case is flagged rather than silently replaced with zero.
Ailoot · Anthropic Messages POST /v1/messages qwen3.7-max

qwen3.7-max

Alibaba /qwen3.7-max

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · masukan & metode

Ailoot · Anthropic Messages POST /v1/messages
Masukan
text
Keluaran
text
Konteks
991.808 tokens
Keluaran maksimum
131.072 tokens
Format keluaran
json atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
qwen3.7-max
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasan
Item minimum: 1
Bawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
user, assistant
Bawaan—
Kolommessages[].contentJenisstring|content_block[]PersyaratanWajibNilai & batasanBawaan—
KolomsystemJenisstring|content_block[]PersyaratanOpsionalNilai & batasanBawaan—
Kolommax_tokensJenisintegerPersyaratanWajibNilai & batasan
Minimum: 1
Batas berlaku untuk: batas maksimum yang tepat untuk model/kartu yang dipilih
Bawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
KolomtemperatureJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtop_pJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomstop_sequencesJenisstring[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtoolsJenistool[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtools[].nameJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: alat disediakan
Bawaan—
Kolomtools[].descriptionJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolomtools[].input_schemaJenisJSON_schemaPersyaratanOpsionalNilai & batasanBawaan—
Kolomtool_choiceJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomthinking.typeJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomthinking.budget_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomoutput_config.effortJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolommetadataJenisobjectPersyaratanOpsionalNilai & batasanBawaan—
Kolomcache_controlJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kombinasi bahan masukan

Teks · Teks UTF8

messages[].content atau blok type=text

Parameter metode dan siklus hidup
ParameterKontrak
Parametermaterial_typesKontraktext
ParameterrequiredKontrakmodel, messages, max_tokens
Parameteroptional_controlsKontraknull
Parametercontent_typeKontrakapplication/json
Parametertext_file_materialKontrakkonten UTF-8 aktual dimasukkan sebagai teks; ID file atau alamat URL (URLs) memerlukan dukungan yang tepat dan terpisah

Siklus hidup: exact retained published method

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

Paket

Tarif metode Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
Masukan
US$0,0025 / 1K
Keluaran
US$0,0075 / 1K
Pembacaan cache
US$0,00025 / 1K
Penulisan cache
≈US$0,00313 / 1K
Penulisan cache, 5 menit
≈US$0,00313 / 1K tokens

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Detail tarif referensi

Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.

Jadwal referensi model

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiOpenAI Chat · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiOpenAI Chat · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Contoh permintaan

Ailoot · Anthropic Messages

Contoh teksPython SDKNode.js SDKAliran Python
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": "qwen3.7-max", "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
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="qwen3.7-max",
    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: "qwen3.7-max",
  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='qwen3.7-max',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, berkas, dan bagian konten yang dikembalikan.

Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
KolomidJenisstring
KolommodelJenisstring
Kolomcontent[]Jenistext|thinking|tool_use|other content block
Kolomstop_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

Ailoot · OpenAI Responses POST /v1/responses qwen3.7-max

qwen3.7-max

Alibaba /qwen3.7-max
ID model
  • qwen3.7-max
  • auto

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · masukan & metode

Ailoot · OpenAI Responses POST /v1/responses
Masukan
text
Keluaran
text
Konteks
991.808 tokens
Keluaran maksimum
131.072 tokens
Format keluaran
json atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
qwen3.7-max
Bawaan—
KolominputJenisstring|input_item[]PersyaratanWajibNilai & batasanBawaan—
KolominstructionsJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolominput[].typeJenisstringPersyaratanOpsionalNilai & batasan
message, reasoning, function_call, function_call_output
Bawaan—
Kolominput[].contentJenisstring|content_part[]PersyaratanOpsionalNilai & batasanBawaan—
Kolominput[].call_idJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: function_call_output; pertahankan call_id yang benar-benar dikembalikan
Bawaan—
Kolominput[].outputJenisstring|content_part[]PersyaratanOpsionalNilai & batasan
Berlaku jika: function_call_output
Bawaan—
Kolommax_output_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
KolomtemperatureJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtop_pJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtoolsJenistool[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtool_choiceJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomparallel_tool_callsJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomreasoning.effortJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomreasoning.summaryJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtext.formatJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtext.verbosityJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomincludeJenisstring[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomstoreJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprevious_response_idJenisstringPersyaratanOpsionalNilai & batasan
Persyaratan ID: Hanya ID respons yang benar-benar diperoleh dari kelanjutan yang didukung
Bergantung pada model
Bawaan—
Kolomservice_tierJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprompt_cache_keyJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprompt_cache_optionsJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kombinasi bahan masukan

Teks · Teks UTF8

Teks masukan atau bagian input_text

Parameter metode dan siklus hidup
ParameterKontrak
Parametermaterial_typesKontraktext
ParameterrequiredKontrakmodel, input
Parameteroptional_controlsKontraknull
Parametercontent_typeKontrakapplication/json
Parametertext_file_materialKontrakkonten UTF-8 aktual dimasukkan sebagai teks; ID file atau alamat URL (URLs) memerlukan dukungan yang tepat dan terpisah

Siklus hidup: exact retained published method

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

Paket

Tarif metode Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
Masukan
US$0,0025 / 1K
Keluaran
US$0,0075 / 1K
Pembacaan cache
US$0,0005 / 1K
Penulisan cache
≈US$0,00313 / 1K
Penulisan cache, 5 menit
≈US$0,00313 / 1K tokens
code_interpreter_call
US$0,00 per pemanggilan
web_extractor_call
US$0,00 per pemanggilan
web_search_call
US$0,01 per pemanggilan
Jumlah pemanggilan maksimum code_interpreter_call
8
Jumlah pemanggilan maksimum web_extractor_call
8
Jumlah pemanggilan maksimum web_search_call
8

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Detail tarif referensi

Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.

Jadwal referensi model

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiOpenAI Chat · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiOpenAI Chat · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Contoh permintaan

Ailoot · OpenAI Responses

Contoh teksPython SDKNode.js SDKAliran Python
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": "qwen3.7-max", "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
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="qwen3.7-max", 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: "qwen3.7-max", 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="qwen3.7-max", 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, berkas, dan bagian konten yang dikembalikan.

Simpan setiap item keluaran dan bagian konten, call_id fungsi yang sebenarnya, penalaran terenkripsi, dan data penggunaan. Saat streaming, pertahankan identitas peristiwa/item secara lengkap.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
KolomidJenisstring
KolomstatusJenisstring
Kolomoutput[]Jenismessage|reasoning|function_call|other item
Kolomoutput[].content[]Jeniscontent part
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

Ailoot · OpenAI Chat POST /v1/chat/completions qwen3.7-max

qwen3.7-max

Alibaba /qwen3.7-max
ID model
  • qwen3.7-max
  • auto

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · masukan & metode

Ailoot · OpenAI Chat POST /v1/chat/completions
Masukan
text
Keluaran
text
Konteks
991.808 tokens
Keluaran maksimum
131.072 tokens
Format keluaran
json atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
qwen3.7-max
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasan
Item minimum: 1
Bawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
Contoh: system, user, assistant, tool, function
Kondisi: Peran ini direpresentasikan secara eksplisit oleh tipe kompatibilitas dalam kode sumber; kumpulan peran model yang tepat tetap khusus untuk tiap model.
Bergantung pada model
Bawaan—
Kolommessages[].contentJenisstring|content_part[]|nullPersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].tool_callsJenistool_call[]PersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].tool_call_idJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: role=tool; gunakan ID yang benar-benar dikembalikan
Bawaan—
Kolommessages[].nameJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].reasoning_contentJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: Kirim kembali penalaran yang benar-benar dikembalikan jika model ini menggunakannya
Bawaan—
Kolommessages[].reasoning_detailsJenisobject|arrayPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolommax_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
Kolommax_completion_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
Kolomstream_options.include_usageJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtemperatureJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtop_pJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomstopJenisstring|string[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtoolsJenisfunction_tool[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtools[].typeJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtools[].function.nameJenisstringPersyaratanWajibNilai & batasan
Berlaku jika: alat fungsi disediakan
Bawaan—
Kolomtools[].function.descriptionJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolomtools[].function.parametersJenisJSON_schemaPersyaratanOpsionalNilai & batasanBawaan—
Kolomtool_choiceJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomparallel_tool_callsJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomresponse_formatJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomreasoning_effortJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomreasoningJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomservice_tierJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolominstructionsJenisstringPersyaratanOpsionalNilai & batasan
Kolom kompatibilitas
Bawaan—
KolomfunctionsJenisfunction[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomfunction_callJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprompt_cache_optionsJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kombinasi bahan masukan

Teks · Teks UTF8

messages[].content

Parameter metode dan siklus hidup
ParameterKontrak
Parametermaterial_typesKontraktext
ParameterrequiredKontrakmodel, messages
Parameteroptional_controlsKontraknull
Parametercontent_typeKontrakapplication/json
Parametertext_file_materialKontrakkonten UTF-8 aktual dimasukkan sebagai teks; ID file atau alamat URL (URLs) memerlukan dukungan yang tepat dan terpisah

Siklus hidup: exact retained published method

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

Paket

Tarif metode Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
Masukan
US$0,0025 / 1K
Keluaran
US$0,0075 / 1K
Pembacaan cache
US$0,0005 / 1K
Penulisan cache
≈US$0,00313 / 1K
Penulisan cache, 5 menit
≈US$0,00313 / 1K tokens

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Detail tarif referensi

Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.

Jadwal referensi model

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiOpenAI Chat · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiOpenAI Chat · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Contoh permintaan

Ailoot · OpenAI Chat

Contoh teksPython SDKNode.js SDKAliran Python
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": "qwen3.7-max", "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
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="qwen3.7-max",
    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: "qwen3.7-max",
  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='qwen3.7-max',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, berkas, dan bagian konten yang dikembalikan.

Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
Kolomchoices[].indexJenisinteger
Kolomchoices[].message.contentJenisstring|null
Kolomchoices[].message.tool_callsJenistool_call[]
Kolomchoices[].message.reasoning_contentJenisstring
Kolomchoices[].message.reasoning_detailsJenisobject|array
Kolomchoices[].finish_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions qwen3.7-max

qwen3.7-max

Alibaba /qwen3.7-max
ID model
  • qwen3.7-max
  • qwen/qwen3.7-max

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · masukan & metode

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Masukan
text
Keluaran
text
Format keluaran
json atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
qwen3.7-max
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasan
Item minimum: 1
Bawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
Bergantung pada model
Bawaan—
Kolommessages[].contentJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: Percakapan teks
Bawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
Kombinasi bahan masukan

Teks · Teks UTF8

messages[].content

Parameter metode dan siklus hidup
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages
Parametermaterial_typesKontraktext
ParametermessagesKontrakarray pesan dengan struktur role/content
Parameterfile_materialKontrakdokumen UTF-8 yang sebenarnya dimasukkan sebagai teks apa adanya; ID file tidak disimpulkan
Parameteroptional_controlsKontrakstream
Parametercontrol_scopeKontrakPercakapan teks; stream adalah nilai boolean dengan false sebagai bawaan.
Parameteroutput_modalitiesKontraktext
Parameterhosted_operationsKontrakfalse
Parametermultimodal_input_bindingKontraknull

Alias metode: /chat/completions

Siklus hidup: synchronous_or_streamed

Kirim ID model yang tepat bersama messages.

Panjang konteks bukan batas keluaran.

File teks dapat menyediakan teks apa adanya; masukan gambar/audio/objek file memerlukan pengikatan yang tepat.

Paket

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast
Tarif standar Saat mode fast dipilih
Mode Flex
Tarif standar Saat mode flex dipilih
Upaya penalaran maksimum
Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default

Tarif Ailoot

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiTarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiPanjang permintaan · tingkat 1Jadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Contoh permintaan

Ailoot Ultra · OpenAI Chat

curlPython SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"qwen3.7-max","messages":[{"role":"user","content":"hello"}],"stream":false}')

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="qwen3.7-max", messages=[{"role":"user","content":"hello"}], stream=False)
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"))

Terima dan simpan hasil

Ailoot Ultra · OpenAI Chat

json atau SSE

Simpan semua hasil yang selesai

Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.

Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
Kolomchoices[].indexJenisinteger
Kolomchoices[].message.contentJenisstring|null
Kolomchoices[].message.tool_callsJenistool_call[]
Kolomchoices[].message.reasoning_contentJenisstring
Kolomchoices[].message.reasoning_detailsJenisobject|array
Kolomchoices[].finish_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

Ailoot Ultra · Anthropic Messages POST /v1/messages qwen3.7-max

qwen3.7-max

Alibaba /qwen3.7-max
ID model
  • qwen3.7-max
  • qwen/qwen3.7-max

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
json · sse

Tersedia di Ailoot · masukan & metode

Ailoot Ultra · Anthropic Messages POST /v1/messages
Masukan
text
Keluaran
json, sse
Format keluaran
JSON atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
qwen3.7-max
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasanBawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
user, assistant
Bawaan—
Kolommessages[].contentJenisstringPersyaratanWajibNilai & batasanBawaan—
Kolommax_tokensJenisintegerPersyaratanWajibNilai & batasanBawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
Kombinasi bahan masukan

Teks · Teks UTF-8

string messages[].content

Parameter metode dan siklus hidup
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages, max_tokens
Parameteroptional_controlsKontrakstream
Parametermaterial_typesKontraktext
Parametertext_file_materialKontrakBaca dokumen UTF-8 yang sebenarnya dan masukkan teksnya ke string masukan atau konten pesan yang ditunjukkan.

Siklus hidup: synchronous_or_streamed

Paket

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast
Tarif standar Saat mode fast dipilih
Mode Flex
Tarif standar Saat mode flex dipilih
Upaya penalaran maksimum
Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default

Tarif Ailoot

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiTarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiPanjang permintaan · tingkat 1Jadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Contoh permintaan

Ailoot Ultra · Anthropic Messages

Isi permintaan JSON minimal yang lengkapcurl · gunakan dokumen UTF-8 AndaPython · simpan hasil secara lengkap
{
  "model": "qwen3.7-max",
  "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': 'qwen3.7-max', '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': 'qwen3.7-max', '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, berkas, dan bagian konten yang dikembalikan.

Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
KolomidJenisstring
KolommodelJenisstring
Kolomcontent[]Jenistext|thinking|tool_use|other content block
Kolomstop_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

Ailoot · OpenAI Responses POST /v1/responses auto

auto

Alibaba /auto
ID model
  • qwen3.7-max
  • auto

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · masukan & metode

Ailoot · OpenAI Responses POST /v1/responses
Masukan
text
Keluaran
text
Konteks
991.808 tokens
Keluaran maksimum
131.072 tokens
Format keluaran
json atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
auto
Bawaan—
KolominputJenisstring|input_item[]PersyaratanWajibNilai & batasanBawaan—
KolominstructionsJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolominput[].typeJenisstringPersyaratanOpsionalNilai & batasan
message, reasoning, function_call, function_call_output
Bawaan—
Kolominput[].contentJenisstring|content_part[]PersyaratanOpsionalNilai & batasanBawaan—
Kolominput[].call_idJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: function_call_output; pertahankan call_id yang benar-benar dikembalikan
Bawaan—
Kolominput[].outputJenisstring|content_part[]PersyaratanOpsionalNilai & batasan
Berlaku jika: function_call_output
Bawaan—
Kolommax_output_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
KolomtemperatureJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtop_pJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtoolsJenistool[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtool_choiceJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomparallel_tool_callsJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomreasoning.effortJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomreasoning.summaryJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtext.formatJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtext.verbosityJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomincludeJenisstring[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomstoreJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprevious_response_idJenisstringPersyaratanOpsionalNilai & batasan
Persyaratan ID: Hanya ID respons yang benar-benar diperoleh dari kelanjutan yang didukung
Bergantung pada model
Bawaan—
Kolomservice_tierJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprompt_cache_keyJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprompt_cache_optionsJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kombinasi bahan masukan

Teks · Teks UTF8

Teks masukan atau bagian input_text

Parameter metode dan siklus hidup
ParameterKontrak
Parametermaterial_typesKontraktext
ParameterrequiredKontrakmodel, input
Parameteroptional_controlsKontraknull
Parametercontent_typeKontrakapplication/json
Parametertext_file_materialKontrakkonten UTF-8 aktual dimasukkan sebagai teks; ID file atau alamat URL (URLs) memerlukan dukungan yang tepat dan terpisah

Siklus hidup: exact retained published method

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

Paket

Tarif metode Ailoot

Ailoot OpenAI ResponsesPOST /v1/responses
Masukan
US$0,0025 / 1K
Keluaran
US$0,0075 / 1K
Pembacaan cache
US$0,0005 / 1K
Penulisan cache
≈US$0,00313 / 1K
Penulisan cache, 5 menit
≈US$0,00313 / 1K tokens
code_interpreter_call
US$0,00 per pemanggilan
web_extractor_call
US$0,00 per pemanggilan
web_search_call
US$0,01 per pemanggilan
Jumlah pemanggilan maksimum code_interpreter_call
8
Jumlah pemanggilan maksimum web_extractor_call
8
Jumlah pemanggilan maksimum web_search_call
8

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Detail tarif referensi

Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.

Jadwal referensi model

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiOpenAI Chat · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiOpenAI Chat · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Contoh permintaan

Ailoot · OpenAI Responses

Contoh teksPython SDKNode.js SDKAliran Python
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": "auto", "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
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="auto", 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: "auto", 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="auto", 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, berkas, dan bagian konten yang dikembalikan.

Simpan setiap item keluaran dan bagian konten, call_id fungsi yang sebenarnya, penalaran terenkripsi, dan data penggunaan. Saat streaming, pertahankan identitas peristiwa/item secara lengkap.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
KolomidJenisstring
KolomstatusJenisstring
Kolomoutput[]Jenismessage|reasoning|function_call|other item
Kolomoutput[].content[]Jeniscontent part
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

Ailoot · OpenAI Chat POST /v1/chat/completions auto

auto

Alibaba /auto
ID model
  • qwen3.7-max
  • auto

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · masukan & metode

Ailoot · OpenAI Chat POST /v1/chat/completions
Masukan
text
Keluaran
text
Konteks
991.808 tokens
Keluaran maksimum
131.072 tokens
Format keluaran
json atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
auto
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasan
Item minimum: 1
Bawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
Contoh: system, user, assistant, tool, function
Kondisi: Peran ini direpresentasikan secara eksplisit oleh tipe kompatibilitas dalam kode sumber; kumpulan peran model yang tepat tetap khusus untuk tiap model.
Bergantung pada model
Bawaan—
Kolommessages[].contentJenisstring|content_part[]|nullPersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].tool_callsJenistool_call[]PersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].tool_call_idJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: role=tool; gunakan ID yang benar-benar dikembalikan
Bawaan—
Kolommessages[].nameJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].reasoning_contentJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: Kirim kembali penalaran yang benar-benar dikembalikan jika model ini menggunakannya
Bawaan—
Kolommessages[].reasoning_detailsJenisobject|arrayPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolommax_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
Kolommax_completion_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
Kolomstream_options.include_usageJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtemperatureJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtop_pJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomstopJenisstring|string[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtoolsJenisfunction_tool[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtools[].typeJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtools[].function.nameJenisstringPersyaratanWajibNilai & batasan
Berlaku jika: alat fungsi disediakan
Bawaan—
Kolomtools[].function.descriptionJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolomtools[].function.parametersJenisJSON_schemaPersyaratanOpsionalNilai & batasanBawaan—
Kolomtool_choiceJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomparallel_tool_callsJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomresponse_formatJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomreasoning_effortJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomreasoningJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomservice_tierJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolominstructionsJenisstringPersyaratanOpsionalNilai & batasan
Kolom kompatibilitas
Bawaan—
KolomfunctionsJenisfunction[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomfunction_callJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprompt_cache_optionsJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kombinasi bahan masukan

Teks · Teks UTF8

messages[].content

Parameter metode dan siklus hidup
ParameterKontrak
Parametermaterial_typesKontraktext
ParameterrequiredKontrakmodel, messages
Parameteroptional_controlsKontraknull
Parametercontent_typeKontrakapplication/json
Parametertext_file_materialKontrakkonten UTF-8 aktual dimasukkan sebagai teks; ID file atau alamat URL (URLs) memerlukan dukungan yang tepat dan terpisah

Siklus hidup: exact retained published method

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

Paket

Tarif metode Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
Masukan
US$0,0025 / 1K
Keluaran
US$0,0075 / 1K
Pembacaan cache
US$0,0005 / 1K
Penulisan cache
≈US$0,00313 / 1K
Penulisan cache, 5 menit
≈US$0,00313 / 1K tokens

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Detail tarif referensi

Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.

Jadwal referensi model

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiOpenAI Chat · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiOpenAI Chat · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tingkat 1 berdasarkan panjang permintaanJadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Contoh permintaan

Ailoot · OpenAI Chat

Contoh teksPython SDKNode.js SDKAliran Python
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": "auto", "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
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="auto",
    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: "auto",
  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='auto',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, berkas, dan bagian konten yang dikembalikan.

Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
Kolomchoices[].indexJenisinteger
Kolomchoices[].message.contentJenisstring|null
Kolomchoices[].message.tool_callsJenistool_call[]
Kolomchoices[].message.reasoning_contentJenisstring
Kolomchoices[].message.reasoning_detailsJenisobject|array
Kolomchoices[].finish_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions qwen/qwen3.7-max

qwen/qwen3.7-max

Alibaba /qwen/qwen3.7-max
ID model
  • qwen3.7-max
  • qwen/qwen3.7-max

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · masukan & metode

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Masukan
text
Keluaran
text
Format keluaran
json atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
qwen/qwen3.7-max
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasan
Item minimum: 1
Bawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
Contoh: system, user, assistant, tool, function
Kondisi: Peran ini direpresentasikan secara eksplisit oleh tipe kompatibilitas dalam kode sumber; kumpulan peran model yang tepat tetap khusus untuk tiap model.
Bergantung pada model
Bawaan—
Kolommessages[].contentJenisstring|content_part[]|nullPersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].tool_callsJenistool_call[]PersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].tool_call_idJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: role=tool; gunakan ID yang benar-benar dikembalikan
Bawaan—
Kolommessages[].nameJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolommessages[].reasoning_contentJenisstringPersyaratanOpsionalNilai & batasan
Berlaku jika: Kirim kembali penalaran yang benar-benar dikembalikan jika model ini menggunakannya
Bawaan—
Kolommessages[].reasoning_detailsJenisobject|arrayPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolommax_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
Kolommax_completion_tokensJenisintegerPersyaratanOpsionalNilai & batasan
Minimum: 1
Bergantung pada model
Bawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
Kolomstream_options.include_usageJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtemperatureJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtop_pJenisnumberPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomstopJenisstring|string[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomtoolsJenisfunction_tool[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomtools[].typeJenisstringPersyaratanOpsionalNilai & batasan
function
Bergantung pada model
Bawaan—
Kolomtools[].function.nameJenisstringPersyaratanWajibNilai & batasan
Berlaku jika: alat fungsi disediakan
Bawaan—
Kolomtools[].function.descriptionJenisstringPersyaratanOpsionalNilai & batasanBawaan—
Kolomtools[].function.parametersJenisJSON_schemaPersyaratanOpsionalNilai & batasanBawaan—
Kolomtool_choiceJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomparallel_tool_callsJenisbooleanPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomresponse_formatJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomreasoning_effortJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolomreasoningJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomservice_tierJenisstringPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolominstructionsJenisstringPersyaratanOpsionalNilai & batasan
Kolom kompatibilitas
Bawaan—
KolomfunctionsJenisfunction[]PersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomfunction_callJenisstring|objectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
Kolomprompt_cache_optionsJenisobjectPersyaratanOpsionalNilai & batasan
Bergantung pada model
Bawaan—
KolommodalitiesJenisstring[]PersyaratanOpsionalNilai & batasan
text
Bawaan—
KolomproviderJenisobjectPersyaratanOpsionalNilai & batasan
Kondisi: provider.options ditolak pada rute teks Ultra ini
Bawaan—
Kolomcache_control.ttlJenisstringPersyaratanOpsionalNilai & batasan
Kondisi: 1h ditolak pada lokasi cache prompt yang digunakan
Bawaan—
Kombinasi bahan masukan

Teks · Teks UTF8

messages[].content

Parameter metode dan siklus hidup
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages
Parametermaterial_typesKontraktext
ParametermessagesKontrakarray pesan dengan struktur role/content
Parameterfile_materialKontrakdokumen UTF-8 yang sebenarnya dimasukkan sebagai teks apa adanya; ID file tidak disimpulkan
Parameteroptional_controlsKontrakstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametercontrol_scopeKontrakkhusus model; alat fungsi pengguna berbeda dari alat yang dihosting
Parameteroutput_modalitiesKontraktext
Parameterhosted_operationsKontrakfalse
Parametermultimodal_input_bindingKontraknull

Siklus hidup: synchronous_or_streamed

Kirim ID model yang tepat bersama messages.

Panjang konteks bukan batas keluaran.

File teks dapat menyediakan teks apa adanya; masukan gambar/audio/objek file memerlukan pengikatan yang tepat.

Paket

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast
Tarif standar Saat mode fast dipilih
Mode Flex
Tarif standar Saat mode flex dipilih
Upaya penalaran maksimum
Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default

Tarif Ailoot

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiTarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiPanjang permintaan · tingkat 1Jadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Contoh permintaan

Ailoot Ultra · OpenAI Chat

curlPython SDKAliran Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "qwen/qwen3.7-max", "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='qwen/qwen3.7-max',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='qwen/qwen3.7-max',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, berkas, dan bagian konten yang dikembalikan.

Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
Kolomchoices[].indexJenisinteger
Kolomchoices[].message.contentJenisstring|null
Kolomchoices[].message.tool_callsJenistool_call[]
Kolomchoices[].message.reasoning_contentJenisstring
Kolomchoices[].message.reasoning_detailsJenisobject|array
Kolomchoices[].finish_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

Ailoot Ultra · Anthropic Messages POST /v1/messages qwen/qwen3.7-max

qwen/qwen3.7-max

Alibaba /qwen/qwen3.7-max
ID model
  • qwen3.7-max
  • qwen/qwen3.7-max

Mulai

Qwen3.7 Max adalah model teks unggulan Alibaba untuk pemrograman, pekerjaan perkantoran, dan tugas agen yang berkelanjutan. Model ini menyediakan konteks sejuta token, pemanggilan fungsi, keluaran terstruktur berbasis JSON-schema, serta prompt caching yang didokumentasikan untuk konteks berulang.

Masukan yang diterima
Teks
Hasil
json · sse

Tersedia di Ailoot · masukan & metode

Ailoot Ultra · Anthropic Messages POST /v1/messages
Masukan
text
Keluaran
json, sse
Format keluaran
JSON atau SSE
KolomJenisPersyaratanNilai & batasanBawaan
KolommodelJenisstringPersyaratanWajibNilai & batasan
qwen/qwen3.7-max
Bawaan—
KolommessagesJenismessage[]PersyaratanWajibNilai & batasanBawaan—
Kolommessages[].roleJenisstringPersyaratanWajibNilai & batasan
user, assistant
Bawaan—
Kolommessages[].contentJenisstringPersyaratanWajibNilai & batasanBawaan—
Kolommax_tokensJenisintegerPersyaratanWajibNilai & batasanBawaan—
KolomstreamJenisbooleanPersyaratanOpsionalNilai & batasanBawaanfalse
Kombinasi bahan masukan

Teks · Teks UTF-8

string messages[].content

Parameter metode dan siklus hidup
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages, max_tokens
Parameteroptional_controlsKontrakstream
Parametermaterial_typesKontraktext
Parametertext_file_materialKontrakBaca dokumen UTF-8 yang sebenarnya dan masukkan teksnya ke string masukan atau konten pesan yang ditunjukkan.

Siklus hidup: synchronous_or_streamed

Paket

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast
Tarif standar Saat mode fast dipilih
Mode Flex
Tarif standar Saat mode flex dipilih
Upaya penalaran maksimum
Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default

Tarif Ailoot

Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

KonfigurasiJadwal tarifToken konteks, lebih dariToken konteks, hingga dan termasukBiaya
KonfigurasiTarif dasar tokenJadwal tarifTarif dasarToken konteks, lebih dari—Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token
KonfigurasiPanjang permintaan · tingkat 1Jadwal tarif—Token konteks, lebih dari0Token konteks, hingga dan termasukTanpa batas atasBiaya
Masukan · Token masukan $0.00295 / 1K token
Keluaran · Token keluaran $0.00885 / 1K token
Masukan · Pembacaan cache $0.00059 / 1K token
Masukan · Penulisan cache $0.0036875 / 1K token
Masukan · Penulisan cache, 1 jam — / 1K token

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →

Contoh permintaan

Ailoot Ultra · Anthropic Messages

Isi permintaan JSON minimal yang lengkapcurl · gunakan dokumen UTF-8 AndaPython · simpan hasil secara lengkap
{
  "model": "qwen/qwen3.7-max",
  "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': 'qwen/qwen3.7-max', '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': 'qwen/qwen3.7-max', '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, berkas, dan bagian konten yang dikembalikan.

Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.

Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons
KolomJenis
KolomidJenisstring
KolommodelJenisstring
Kolomcontent[]Jenistext|thinking|tool_use|other content block
Kolomstop_reasonJenisstring|null
KolomusageJenisobject
Kesalahan dan langkah berikutnya
ResponsKondisiLangkah berikutnya
Respons400 · invalid_request_errorKondisiBidang wajib, representasi materi, atau nilai parameter tidak validLangkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru.

Alias

Alias model

Ailoot qwen3.7-max, auto
Ailoot Ultra qwen3.7-max, qwen/qwen3.7-max

Alias jalur metode

/chat/completions

ID pemanggil terkait

qwen/qwen3.7-max, auto, qwen3.7-max, qwen3.7-max

FAQ · Qwen: Qwen3.7 Max
Input dan hasil apa yang tersedia?

POST /v1/messages · qwen3.7-max: text → text

POST /v1/responses · qwen3.7-max: text → text

POST /v1/chat/completions · qwen3.7-max: text → text

POST /v1/chat/completions · qwen3.7-max: text → text

POST /v1/messages · qwen3.7-max: text → json, sse

POST /v1/responses · auto: text → text

POST /v1/chat/completions · auto: text → text

POST /v1/chat/completions · qwen/qwen3.7-max: text → text

POST /v1/messages · qwen/qwen3.7-max: text → json, sse

Kolom apa yang digunakan permintaan?

POST /v1/messages · qwen3.7-max: model, messages, system, max_tokens, stream, metadata

POST /v1/responses · qwen3.7-max: model, input, instructions, stream

POST /v1/chat/completions · qwen3.7-max: model, messages, stream

POST /v1/chat/completions · qwen3.7-max: model, messages, stream

POST /v1/messages · qwen3.7-max: model, messages, max_tokens, stream

POST /v1/responses · auto: model, input, instructions, stream

POST /v1/chat/completions · auto: model, messages, stream

POST /v1/chat/completions · qwen/qwen3.7-max: model, messages, stream, modalities, provider

POST /v1/messages · qwen/qwen3.7-max: model, messages, max_tokens, stream

Batasan apa yang berlaku?

POST /v1/messages · qwen3.7-max: ctx: 991808; max_out: 131072; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/responses · qwen3.7-max: ctx: 991808; max_out: 131072

POST /v1/chat/completions · qwen3.7-max: ctx: 991808; max_out: 131072; messages.min_items: 1

POST /v1/chat/completions · qwen3.7-max: messages.min_items: 1

POST /v1/responses · auto: ctx: 991808; max_out: 131072

POST /v1/chat/completions · auto: ctx: 991808; max_out: 131072; messages.min_items: 1

POST /v1/chat/completions · qwen/qwen3.7-max: messages.min_items: 1

Rincian selengkapnya

Hubungkan Ailoot ke Claude Code, OpenCode, Hermes, atau aplikasi Anda.

Perusahaan dan portofolio proyeknya

Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.

Beli token dengan diskon.

Diskon langganan untuk pekerjaan rutin. Kode promo — hingga 50% untuk pembelian token.

Langganan
Pilih paket dengan diskon untuk permintaan rutin Anda.
Kode promo hingga 50%
Masukkan kode saat membeli. Harga dihitung ulang sesuai promosi aktif.
Biaya dalam riwayat
Model, token, dan jumlah tagihan disimpan untuk setiap permintaan.

Pilih langganan · Lihat harga model

Hubungkan API ke produk yang Anda jual.

SaaS, aplikasi, dan bot — sesuai penawaran dan perjanjian lisensi Ailoot. Untuk penjualan kembali, mintalah lisensi reseller.

Aplikasi komersial
Integrasikan pembuatan teks, gambar, video, dan suara dalam fitur berbayar layanan Anda.
Lisensi reseller
Kirim deskripsi proyek dan skema akses. Mintalah ketentuan penggunaan dan penjualan kembali secara tertulis.
Dokumen di situs
Penawaran, perjanjian lisensi, dan kebijakan pemrosesan data tersedia sebelum koneksi.

Minta lisensi reseller · Penawaran dan perjanjian lisensi