model

Google: Gemini 3.6 Flash

Markdown · JSON

Google: Gemini 3.6 Flash

Gemini 3.6 Flash ialah model teks multimodal Google untuk pengekodan, analisis ruang dan ejen berbilang langkah. Ia menekankan pemeriksaan diagnostik, suntingan berfokus dan pengurangan gelung pelaksanaan yang tidak perlu. Ia menerima teks, imej, audio, video dan PDF, dengan alat, output berstruktur dan had input 1,048,576 token.

Tentang model

Huraian ini merangkumi keupayaan model. Input, output dan pilihan yang tersedia di Ailoot disenaraikan di bawah untuk kaedah yang dipilih.

Gemini 3.6 Flash ialah profil multimodal serba guna Google untuk pengekodan, kerja pengetahuan dan pelaksanaan berejen. Ia dibina berasaskan Gemini 3.5 Flash, dengan tumpuan pada prestasi multimodal dan kecekapan token yang ditambah baik. Model menerima teks, imej, audio, video dan PDF serta mengembalikan teks. Tugasan berguna boleh menggabungkan kod, tangkapan skrin dan keperluan, atau membandingkan carta atau pelan visual dengan kekangan bertulis untuk menghasilkan penerangan yang disemak atau pindaan bersasar.

Panduan pembangun menekankan pengurangan langkah penaakulan, giliran dan panggilan alat yang tidak perlu dalam kerja berbilang langkah, serta suntingan lebih berfokus. Untuk diagnosis, berikan kegagalan yang diperhatikan, sumber berkaitan dan tingkah laku yang mesti dikekalkan. Untuk penyahpepijatan carta, minta model memeriksa sebab carta memaparkan siri yang salah, mengenal pasti transformasi data yang terlibat dan mencadangkan satu pembetulan sambil mengekalkan susun atur sekeliling. Hasil kemudian boleh dibandingkan dengan data input sebenar dan tingkah laku carta yang diperlukan.

Pemeriksaan secara program pada peringkat awal ialah tingkah laku tersendiri yang diterangkan bagi 3.6. Pembuat menyatakan model lebih kerap memeriksa masalah menggunakan kod diagnostik sebelum membuat perubahan. Ini boleh membantu penyiasatan kompleks, tetapi panduan menyatakan ia boleh menambah langkah penerokaan dalam kerja frontend rutin. Nyatakan sama ada tugas memerlukan penyiasatan, suntingan mudah atau perbandingan reka bentuk. Bekalkan maklumat yang menjelaskan perbezaan itu dan tentukan tindakan yang dibenarkan untuk alat aplikasi yang disambungkan.

Penaakulan ruang dan multimodal turut diketengahkan: tafsiran carta, penukaran pelan visual dan susun atur web berbilang elemen. Bekalkan paparan atau halaman berkaitan, kenal pasti perkara yang perlu ditafsirkan dan minta bukti di sebalik kesimpulan. Untuk tugas reka bentuk, sertakan garis panduan susun atur dan gaya yang konkrit. Pembuat menyatakan tumpuan pada kod berfungsi dan bahawa penilai kadangkala lebih menyukai penggayaan visual model terdahulu, menjadikan taklimat visual jelas berguna. Semak hasil terhadap rajah atau keperluan reka bentuk sebenar.

Medium ialah aras pemikiran lalai yang didokumenkan. Jadual pemikiran khusus model Google menyenaraikan minimal, low, medium dan high; panduan migrasi 3.6 menggunakan medium atau high dalam contoh usahanya. Halaman khusus menyenaraikan pemanggilan fungsi, pelaksanaan kod, carian fail, pembumian carian, pembumian Maps, konteks URL dan output berstruktur, dengan Computer Use sebagai keupayaan pratonton. Takrifkan input fungsi dan hasil wajib dengan jelas. Fungsi yang dipilih model memerlukan hasil aplikasi sebenar sebelum jawapan kemudian boleh bergantung pada kesudahannya. Untuk analisis berstruktur, tetapkan skema dan bukti sumber yang diperlukan bagi setiap dapatan.

Panduan 3.6 mengubah penyediaan berbanding permintaan Gemini terdahulu. Ia menandakan tetapan pensampelan temperature, top-p dan top-k sebagai lapuk, menolak giliran akhir peranan model yang diisi awal serta mengesyorkan arahan sistem atau output berstruktur untuk mengawal jawapan. Peraturan respons fungsinya memadankan respons dengan panggilan melalui identiti dan nama, dan asas Gemini 3 mengekalkan tandatangan pemikiran dalam penggunaan berbilang giliran. Sambungan praktikal perlu membawa sejarah berkaitan dan hasil alat tanpa diubah, daripada meniru awalan jawapan terdahulu.

Kad asal menetapkan konteks input sehingga 1M dan output teks 64K; jadual API khusus memberikan 1,048,576 token input dan 65,536 token output. Peruntukkan arahan, sejarah dan media sebagai sebahagian input, dan minta output yang sesuai dengan tugas. Halaman pengeluar turut menyenaraikan cache, pemprosesan kelompok, Flex dan Priority. Apabila memproses rekod bebas, jelaskan pengecam rekod dan format hasil. Output ialah artifak teks walaupun bukti merangkumi foto, audio atau video.

Batasan yang mungkin berlaku merangkumi halusinasi serta kelewatan atau tamat masa sekali-sekala. Tarikh akhir Mac 2026nya merangkumi domain yang pengetahuannya masih terhad kepada Januari 2025, jadi lampirkan bahan lebih baharu atau gunakan aliran kerja pembumian yang didokumenkan apabila fakta semasa penting. Semak pengiraan, rujukan sumber, tafsiran visual dan pengubahsuaian yang dicadangkan. Penyediaan tersendiri edisi ini ialah taklimat diagnostik berfokus, skop alat jelas dan kekangan reka bentuk nyata, diikuti pemeriksaan hasil konkrit.

Tugas praktikal

Tugas praktikal

Contoh teknikal dalam bahasa Inggeris

Diagnose swapped chart series

A chart receives [{month:'Jan', sales:20, returns:2}, {month:'Feb', sales:30, returns:3}], but its Sales series uses rows.map(r => r.returns). Identify the data-binding error and propose one correction. Keep the existing month labels and Returns series unchanged. Include a small assertion showing the expected Sales data without claiming the chart was rendered.

Hasil yang dijangka

One corrected series expression and a concrete assertion against the supplied data.

Semak hasil

Only the Sales binding changes, and its values come from sales rather than returns.
Ailoot · Anthropic Messages POST /v1/messages gemini-3.6-flash

gemini-3.6-flash

Google /gemini-3.6-flash

Pengenalan

Gemini 3.6 Flash ialah model teks multimodal Google untuk pengekodan, analisis ruang dan ejen berbilang langkah. Ia menekankan pemeriksaan diagnostik, suntingan berfokus dan pengurangan gelung pelaksanaan yang tidak perlu. Ia menerima teks, imej, audio, video dan PDF, dengan alat, output berstruktur dan had input 1,048,576 token.

Input yang diterima
Teks · Imej
Hasil
Teks

Tersedia di Ailoot · input & kaedah

Ailoot · Anthropic Messages POST /v1/messages
Input
text, image
Output
text
Konteks
1,048,576 tokens
Output maksimum
65,536 tokens
Format output
json atau SSE
MedanJenisKeperluanNilai & hadLalai
MedanmodelJenisstringKeperluanDiperlukanNilai & had
gemini-3.6-flash
Lalai—
MedanmessagesJenismessage[]KeperluanDiperlukanNilai & had
Item minimum: 1
Lalai—
Medanmessages[].roleJenisstringKeperluanDiperlukanNilai & had
user, assistant
Lalai—
Medanmessages[].contentJenisstring|content_block[]KeperluanDiperlukanNilai & hadLalai—
MedansystemJenisstring|content_block[]KeperluanPilihanNilai & hadLalai—
Medanmax_tokensJenisintegerKeperluanDiperlukanNilai & had
Minimum: 1
Had terpakai pada: had maksimum tepat bagi model/kad yang dipilih
Lalai—
MedanstreamJenisbooleanKeperluanPilihanNilai & hadLalaifalse
MedantemperatureJenisnumberKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medantop_pJenisnumberKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanstop_sequencesJenisstring[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedantoolsJenistool[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medantools[].nameJenisstringKeperluanPilihanNilai & had
Terpakai apabila: alat dibekalkan
Lalai—
Medantools[].descriptionJenisstringKeperluanPilihanNilai & hadLalai—
Medantools[].input_schemaJenisJSON_schemaKeperluanPilihanNilai & hadLalai—
Medantool_choiceJenisobjectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanthinking.typeJenisstringKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanthinking.budget_tokensJenisintegerKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanoutput_config.effortJenisstringKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedanmetadataJenisobjectKeperluanPilihanNilai & hadLalai—
Medancache_controlJenisobjectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Gabungan bahan input

Teks · Teks UTF8

messages[].content atau blok type=text

Teks + imej

{type:image,source:{type:base64,media_type,data}} atau sumber dengan type=url

Parameter kaedah dan kitar hayat
ParameterKontrak
Parametermaterial_typesKontraktext, image
ParameterrequiredKontrakmodel, messages, max_tokens
Parameteroptional_controlsKontraknull
Parametercontent_typeKontrakapplication/json
Parametertext_file_materialKontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan

Kitar hayat: exact retained published method

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

Pelan harga

Kadar kaedah Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
Input
USD 0.00075 / 1K
Output
USD 0.00375 / 1K
Bacaan cache
USD 0.000075 / 1K

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →

Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

KonfigurasiJadual kadarToken konteks, melebihiToken konteks, sehingga dan termasukCaj
KonfigurasiOpenAI Chat · Kadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaanJadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Kadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaanJadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token

Contoh permintaan

Ailoot · Anthropic Messages

Contoh teksInput, imejPython SDKNode.js SDKPenstriman 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": "gemini-3.6-flash", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.6-flash", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="gemini-3.6-flash",
    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: "gemini-3.6-flash",
  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='gemini-3.6-flash',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

Terima dan simpan hasil

Ailoot · Anthropic Messages

json atau SSE

Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons
MedanJenis
MedanidJenisstring
MedanmodelJenisstring
Medancontent[]Jenistext|thinking|tool_use|other content block
Medanstop_reasonJenisstring|null
MedanusageJenisobject
Ralat dan langkah seterusnya
ResponsSyaratLangkah seterusnya
Respons400 · invalid_request_errorSyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sahLangkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.

Alias

Alias model

Ailoot gemini-3.6-flash
Ailoot Ultra gemini-3.6-flash, google/gemini-3.6-flash

Alias laluan kaedah

/chat/completions

ID pemanggil berkaitan

google/gemini-3.6-flash, gemini-3.6-flash, gemini-3.6-flash

Ailoot · OpenAI Chat POST /v1/chat/completions gemini-3.6-flash

gemini-3.6-flash

Google /gemini-3.6-flash

Pengenalan

Gemini 3.6 Flash ialah model teks multimodal Google untuk pengekodan, analisis ruang dan ejen berbilang langkah. Ia menekankan pemeriksaan diagnostik, suntingan berfokus dan pengurangan gelung pelaksanaan yang tidak perlu. Ia menerima teks, imej, audio, video dan PDF, dengan alat, output berstruktur dan had input 1,048,576 token.

Input yang diterima
Teks · Imej
Hasil
Teks

Tersedia di Ailoot · input & kaedah

Ailoot · OpenAI Chat POST /v1/chat/completions
Input
text, image
Output
text
Konteks
1,048,576 tokens
Output maksimum
65,536 tokens
Format output
json atau SSE
MedanJenisKeperluanNilai & hadLalai
MedanmodelJenisstringKeperluanDiperlukanNilai & had
gemini-3.6-flash
Lalai—
MedanmessagesJenismessage[]KeperluanDiperlukanNilai & had
Item minimum: 1
Lalai—
Medanmessages[].roleJenisstringKeperluanDiperlukanNilai & had
Contoh: system, user, assistant, tool, function
Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model.
Bergantung pada model
Lalai—
Medanmessages[].contentJenisstring|content_part[]|nullKeperluanPilihanNilai & hadLalai—
Medanmessages[].tool_callsJenistool_call[]KeperluanPilihanNilai & hadLalai—
Medanmessages[].tool_call_idJenisstringKeperluanPilihanNilai & had
Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan
Lalai—
Medanmessages[].nameJenisstringKeperluanPilihanNilai & hadLalai—
Medanmessages[].reasoning_contentJenisstringKeperluanPilihanNilai & had
Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya
Lalai—
Medanmessages[].reasoning_detailsJenisobject|arrayKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanmax_tokensJenisintegerKeperluanPilihanNilai & had
Minimum: 1
Bergantung pada model
Lalai—
Medanmax_completion_tokensJenisintegerKeperluanPilihanNilai & had
Minimum: 1
Bergantung pada model
Lalai—
MedanstreamJenisbooleanKeperluanPilihanNilai & hadLalaifalse
Medanstream_options.include_usageJenisbooleanKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedantemperatureJenisnumberKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medantop_pJenisnumberKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedanstopJenisstring|string[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedantoolsJenisfunction_tool[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medantools[].typeJenisstringKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medantools[].function.nameJenisstringKeperluanDiperlukanNilai & had
Terpakai apabila: alat fungsi dibekalkan
Lalai—
Medantools[].function.descriptionJenisstringKeperluanPilihanNilai & hadLalai—
Medantools[].function.parametersJenisJSON_schemaKeperluanPilihanNilai & hadLalai—
Medantool_choiceJenisstring|objectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanparallel_tool_callsJenisbooleanKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanresponse_formatJenisobjectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanreasoning_effortJenisstringKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedanreasoningJenisobjectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanservice_tierJenisstringKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedaninstructionsJenisstringKeperluanPilihanNilai & had
Medan keserasian
Lalai—
MedanfunctionsJenisfunction[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanfunction_callJenisstring|objectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanprompt_cache_optionsJenisobjectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Gabungan bahan input

Teks · Teks UTF8

messages[].content

Teks + imej

{type:image_url,image_url:{url,detail}}

Parameter kaedah dan kitar hayat
ParameterKontrak
Parametermaterial_typesKontraktext, image
ParameterrequiredKontrakmodel, messages
Parameteroptional_controlsKontraknull
Parametercontent_typeKontrakapplication/json
Parametertext_file_materialKontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan

Kitar hayat: exact retained published method

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

Pelan harga

Kadar kaedah Ailoot

Ailoot OpenAI ChatPOST /v1/chat/completions
Input
USD 0.00075 / 1K
Output
USD 0.00375 / 1K
Bacaan cache
USD 0.000075 / 1K

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →

Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

KonfigurasiJadual kadarToken konteks, melebihiToken konteks, sehingga dan termasukCaj
KonfigurasiOpenAI Chat · Kadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaanJadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Kadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaanJadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token

Contoh permintaan

Ailoot · OpenAI Chat

Contoh teksInput, imejPython SDKNode.js SDKPenstriman 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": "gemini-3.6-flash", "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.6-flash", "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image_url","image_url":{"url":"data:"+mime+";base64,"+b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = OpenAI(base_url="https://api.ailoot.ai/v1", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
resp = client.chat.completions.create(
    model="gemini-3.6-flash",
    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: "gemini-3.6-flash",
  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='gemini-3.6-flash',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Terima dan simpan hasil

Ailoot · OpenAI Chat

json atau SSE

Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons
MedanJenis
Medanchoices[].indexJenisinteger
Medanchoices[].message.contentJenisstring|null
Medanchoices[].message.tool_callsJenistool_call[]
Medanchoices[].message.reasoning_contentJenisstring
Medanchoices[].message.reasoning_detailsJenisobject|array
Medanchoices[].finish_reasonJenisstring|null
MedanusageJenisobject
Ralat dan langkah seterusnya
ResponsSyaratLangkah seterusnya
Respons400 · invalid_request_errorSyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sahLangkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.

Alias

Alias model

Ailoot gemini-3.6-flash
Ailoot Ultra gemini-3.6-flash, google/gemini-3.6-flash

Alias laluan kaedah

/chat/completions

ID pemanggil berkaitan

google/gemini-3.6-flash, gemini-3.6-flash, gemini-3.6-flash

Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.6-flash

gemini-3.6-flash

Google /gemini-3.6-flash

Pengenalan

Gemini 3.6 Flash ialah model teks multimodal Google untuk pengekodan, analisis ruang dan ejen berbilang langkah. Ia menekankan pemeriksaan diagnostik, suntingan berfokus dan pengurangan gelung pelaksanaan yang tidak perlu. Ia menerima teks, imej, audio, video dan PDF, dengan alat, output berstruktur dan had input 1,048,576 token.

Input yang diterima
Teks · Imej
Hasil
Teks

Tersedia di Ailoot · input & kaedah

Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
Input
text, image
Output
text
Konteks
1,048,576 tokens
Output maksimum
65,536 tokens
Format output
json atau penstriman yang disokong
MedanJenisKeperluanNilai & hadLalai
Medanpath.modelJenisstringKeperluanDiperlukanNilai & had
gemini-3.6-flash
Lalai—
MedancontentsJeniscontent[]KeperluanDiperlukanNilai & had
Item minimum: 1
Lalai—
Medancontents[].roleJenisstringKeperluanPilihanNilai & had
user, model
Lalai—
Medancontents[].partsJenispart[]KeperluanDiperlukanNilai & hadLalai—
MedansystemInstructionJeniscontentKeperluanPilihanNilai & hadLalai—
MedangenerationConfig.maxOutputTokensJenisintegerKeperluanPilihanNilai & had
Minimum: 1
Bergantung pada model
Lalai—
MedangenerationConfig.temperatureJenisnumberKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedangenerationConfig.topPJenisnumberKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedangenerationConfig.topKJenisintegerKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedangenerationConfig.stopSequencesJenisstring[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedangenerationConfig.thinkingConfig.includeThoughtsJenisbooleanKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedangenerationConfig.thinkingConfig.thinkingBudgetJenisintegerKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medantools[].functionDeclarationsJenisfunction_declaration[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedantoolConfig.functionCallingConfig.modeJenisstringKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedansafetySettingsJenisobject[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedansessionIdJenisstringKeperluanPilihanNilai & hadLalai—
Gabungan bahan input

Teks · Teks UTF8

contents[].parts[].text

Teks + imej

parts[].inlineData={mimeType,data}

Parameter kaedah dan kitar hayat
ParameterKontrak
Parametermaterial_typesKontraktext, image
ParameterrequiredKontrakcontents
Parameteroptional_controlsKontraknull
Parametercontent_typeKontrakapplication/json
Parametertext_file_materialKontrakkandungan UTF-8 sebenar dimasukkan sebagai teks; ID fail atau alamat URL (URLs) memerlukan sokongan tepat yang berasingan

Kitar hayat: exact retained published method

Struktur kaedah dan ID adalah tepat; keupayaan pembekal berasingan daripada penerimaan permintaan.

Pelan harga

Kadar kaedah Ailoot

Ailoot Gemini generateContentPOST /v1beta/models/{model}:generateContent
Input
USD 0.00075 / 1K
Output
USD 0.00375 / 1K
Bacaan cache
USD 0.000075 / 1K

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →

Butiran tarif rujukan

Jadual rujukan peringkat model tidak mengubah pemilihan kaedah, sebut harga atau caj. Caj aktif menggunakan kadar kaedah Ailoot yang dipilih.

Jadual rujukan model

Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

KonfigurasiJadual kadarToken konteks, melebihiToken konteks, sehingga dan termasukCaj
KonfigurasiOpenAI Chat · Kadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiOpenAI Chat · Tahap 1 berdasarkan panjang permintaanJadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Kadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiAnthropic Messages · Tahap 1 berdasarkan panjang permintaanJadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token

Contoh permintaan

Ailoot · Gemini generateContent

Contoh teksInput, imejPython SDKNode.js SDKPenstriman 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('{"contents": []}')
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["contents"]=[{"role":"user","parts":[{"text":"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/v1beta/models/gemini-3.6-flash:generateContent \
  -H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": [{"role": "user", "parts": [{"text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["contents"][0]["parts"].append({"inlineData":{"mimeType":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-3.6-flash:generateContent \
  -H "x-goog-api-key: $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 google import genai
from google.genai import types
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = genai.Client(
    api_key=os.environ["AILOOT_API_KEY"],
    http_options=types.HttpOptions(base_url="https://api.ailoot.ai"),
)
resp = client.models.generate_content(model="gemini-3.6-flash", contents="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_json_dict())
import { GoogleGenAI } from "@google/genai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const ai = new GoogleGenAI({ apiKey: process.env.AILOOT_API_KEY, httpOptions: { baseUrl: "https://api.ailoot.ai" } });
const resp = await ai.models.generateContent({ model: "gemini-3.6-flash", contents: "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 google import genai
from google.genai import types
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=genai.Client(api_key=os.environ["AILOOT_API_KEY"],http_options=types.HttpOptions(base_url="https://api.ailoot.ai"))
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))

count=0
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
    for chunk in client.models.generate_content_stream(model='gemini-3.6-flash',contents="Explain observations and hypotheses in three sentences."):
        payload=chunk.to_json_dict()
        log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
        save_result(payload,"stream-chunk-"+str(count))
        count+=1

Terima dan simpan hasil

Ailoot · Gemini generateContent

json atau penstriman yang disokong

Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua calon dan bahagian, termasuk panggilan fungsi, tandatangan pemikiran dan data penggunaan; gabungkan cebisan strim mengikut urutan.

Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons
MedanJenis
MedanresponseIdJenisstring
MedanmodelVersionJenisstring
Medancandidates[].content.parts[]Jenistext|inlineData|functionCall|other part
Medancandidates[].finishReasonJenisstring
MedanusageMetadataJenisobject
Ralat dan langkah seterusnya
ResponsSyaratLangkah seterusnya
Respons400 · invalid_request_errorSyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sahLangkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.

Alias

Alias model

Ailoot gemini-3.6-flash
Ailoot Ultra gemini-3.6-flash, google/gemini-3.6-flash

Alias laluan kaedah

/chat/completions

ID pemanggil berkaitan

google/gemini-3.6-flash, gemini-3.6-flash, gemini-3.6-flash

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions gemini-3.6-flash

gemini-3.6-flash

Google /gemini-3.6-flash
ID model
  • gemini-3.6-flash
  • google/gemini-3.6-flash

Pengenalan

Gemini 3.6 Flash ialah model teks multimodal Google untuk pengekodan, analisis ruang dan ejen berbilang langkah. Ia menekankan pemeriksaan diagnostik, suntingan berfokus dan pengurangan gelung pelaksanaan yang tidak perlu. Ia menerima teks, imej, audio, video dan PDF, dengan alat, output berstruktur dan had input 1,048,576 token.

Input yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · input & kaedah

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Input
text
Output
text
Format output
json atau SSE
MedanJenisKeperluanNilai & hadLalai
MedanmodelJenisstringKeperluanDiperlukanNilai & had
gemini-3.6-flash
Lalai—
MedanmessagesJenismessage[]KeperluanDiperlukanNilai & had
Item minimum: 1
Lalai—
Medanmessages[].roleJenisstringKeperluanDiperlukanNilai & had
Bergantung pada model
Lalai—
Medanmessages[].contentJenisstringKeperluanPilihanNilai & had
Terpakai apabila: Perbualan teks
Lalai—
MedanstreamJenisbooleanKeperluanPilihanNilai & hadLalaifalse
Gabungan bahan input

Teks · Teks UTF8

messages[].content

Parameter kaedah dan kitar hayat
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages
Parametermaterial_typesKontraktext
ParametermessagesKontraktatasusunan mesej dengan struktur role/content
Parameterfile_materialKontrakdokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan
Parameteroptional_controlsKontrakstream
Parametercontrol_scopeKontrakPerbualan teks; stream ialah nilai boolean dengan false sebagai lalai.
Parameteroutput_modalitiesKontraktext
Parameterhosted_operationsKontrakfalse
Parametermultimodal_input_bindingKontraknull

Alias kaedah: /chat/completions

Kitar hayat: synchronous_or_streamed

Hantar ID model yang tepat bersama messages.

Panjang konteks bukan had output.

Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat.

Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas
Kadar standard Apabila mod pantas dipilih
Mod flex
Kadar standard Apabila mod flex dipilih
Usaha penaakulan maksimum
Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default
Usaha penaakulan · high
Kadar standard Apabila usaha penaakulan ditetapkan kepada high
Usaha penaakulan · low
Kadar standard Apabila usaha penaakulan ditetapkan kepada low
Usaha penaakulan · medium
Kadar standard Apabila usaha penaakulan ditetapkan kepada medium
Usaha penaakulan · minimal
Kadar standard Apabila usaha penaakulan ditetapkan kepada minimal
Harga cache eksplisit
Tidak diaktifkan Apabila cache eksplisit diminta

Kadar Ailoot

Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

KonfigurasiJadual kadarToken konteks, melebihiToken konteks, sehingga dan termasukCaj
KonfigurasiKadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiTahap panjang permintaan 1Jadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →

Contoh permintaan

Ailoot Ultra · OpenAI Chat

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":"gemini-3.6-flash","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="gemini-3.6-flash", 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, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons
MedanJenis
Medanchoices[].indexJenisinteger
Medanchoices[].message.contentJenisstring|null
Medanchoices[].message.tool_callsJenistool_call[]
Medanchoices[].message.reasoning_contentJenisstring
Medanchoices[].message.reasoning_detailsJenisobject|array
Medanchoices[].finish_reasonJenisstring|null
MedanusageJenisobject
Ralat dan langkah seterusnya
ResponsSyaratLangkah seterusnya
Respons400 · invalid_request_errorSyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sahLangkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.

Alias

Alias model

Ailoot gemini-3.6-flash
Ailoot Ultra gemini-3.6-flash, google/gemini-3.6-flash

Alias laluan kaedah

/chat/completions

ID pemanggil berkaitan

google/gemini-3.6-flash, gemini-3.6-flash, gemini-3.6-flash

Ailoot Ultra · Anthropic Messages POST /v1/messages gemini-3.6-flash

gemini-3.6-flash

Google /gemini-3.6-flash
ID model
  • gemini-3.6-flash
  • google/gemini-3.6-flash

Pengenalan

Gemini 3.6 Flash ialah model teks multimodal Google untuk pengekodan, analisis ruang dan ejen berbilang langkah. Ia menekankan pemeriksaan diagnostik, suntingan berfokus dan pengurangan gelung pelaksanaan yang tidak perlu. Ia menerima teks, imej, audio, video dan PDF, dengan alat, output berstruktur dan had input 1,048,576 token.

Input yang diterima
Teks
Hasil
json · sse

Tersedia di Ailoot · input & kaedah

Ailoot Ultra · Anthropic Messages POST /v1/messages
Input
text
Output
json, sse
Format output
JSON atau SSE
MedanJenisKeperluanNilai & hadLalai
MedanmodelJenisstringKeperluanDiperlukanNilai & had
gemini-3.6-flash
Lalai—
MedanmessagesJenismessage[]KeperluanDiperlukanNilai & hadLalai—
Medanmessages[].roleJenisstringKeperluanDiperlukanNilai & had
user, assistant
Lalai—
Medanmessages[].contentJenisstringKeperluanDiperlukanNilai & hadLalai—
Medanmax_tokensJenisintegerKeperluanDiperlukanNilai & hadLalai—
MedanstreamJenisbooleanKeperluanPilihanNilai & hadLalaifalse
Gabungan bahan input

Teks · Teks UTF-8

rentetan messages[].content

Parameter kaedah dan kitar hayat
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages, max_tokens
Parameteroptional_controlsKontrakstream
Parametermaterial_typesKontraktext
Parametertext_file_materialKontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan.

Kitar hayat: synchronous_or_streamed

Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas
Kadar standard Apabila mod pantas dipilih
Mod flex
Kadar standard Apabila mod flex dipilih
Usaha penaakulan maksimum
Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default
Usaha penaakulan · high
Kadar standard Apabila usaha penaakulan ditetapkan kepada high
Usaha penaakulan · low
Kadar standard Apabila usaha penaakulan ditetapkan kepada low
Usaha penaakulan · medium
Kadar standard Apabila usaha penaakulan ditetapkan kepada medium
Usaha penaakulan · minimal
Kadar standard Apabila usaha penaakulan ditetapkan kepada minimal
Harga cache eksplisit
Tidak diaktifkan Apabila cache eksplisit diminta

Kadar Ailoot

Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

KonfigurasiJadual kadarToken konteks, melebihiToken konteks, sehingga dan termasukCaj
KonfigurasiKadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiTahap panjang permintaan 1Jadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →

Contoh permintaan

Ailoot Ultra · Anthropic Messages

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap
{
  "model": "gemini-3.6-flash",
  "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': 'gemini-3.6-flash', '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': 'gemini-3.6-flash', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Terima dan simpan hasil

Ailoot Ultra · Anthropic Messages

JSON atau SSE

Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons
MedanJenis
MedanidJenisstring
MedanmodelJenisstring
Medancontent[]Jenistext|thinking|tool_use|other content block
Medanstop_reasonJenisstring|null
MedanusageJenisobject
Ralat dan langkah seterusnya
ResponsSyaratLangkah seterusnya
Respons400 · invalid_request_errorSyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sahLangkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.

Alias

Alias model

Ailoot gemini-3.6-flash
Ailoot Ultra gemini-3.6-flash, google/gemini-3.6-flash

Alias laluan kaedah

/chat/completions

ID pemanggil berkaitan

google/gemini-3.6-flash, gemini-3.6-flash, gemini-3.6-flash

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.6-flash

google/gemini-3.6-flash

Google /google/gemini-3.6-flash
ID model
  • gemini-3.6-flash
  • google/gemini-3.6-flash

Pengenalan

Gemini 3.6 Flash ialah model teks multimodal Google untuk pengekodan, analisis ruang dan ejen berbilang langkah. Ia menekankan pemeriksaan diagnostik, suntingan berfokus dan pengurangan gelung pelaksanaan yang tidak perlu. Ia menerima teks, imej, audio, video dan PDF, dengan alat, output berstruktur dan had input 1,048,576 token.

Input yang diterima
Teks
Hasil
Teks

Tersedia di Ailoot · input & kaedah

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Input
text
Output
text
Format output
json atau SSE
MedanJenisKeperluanNilai & hadLalai
MedanmodelJenisstringKeperluanDiperlukanNilai & had
google/gemini-3.6-flash
Lalai—
MedanmessagesJenismessage[]KeperluanDiperlukanNilai & had
Item minimum: 1
Lalai—
Medanmessages[].roleJenisstringKeperluanDiperlukanNilai & had
Contoh: system, user, assistant, tool, function
Syarat: Peranan ini diwakili secara eksplisit oleh jenis keserasian dalam kod sumber; set peranan model yang tepat kekal khusus untuk setiap model.
Bergantung pada model
Lalai—
Medanmessages[].contentJenisstring|content_part[]|nullKeperluanPilihanNilai & hadLalai—
Medanmessages[].tool_callsJenistool_call[]KeperluanPilihanNilai & hadLalai—
Medanmessages[].tool_call_idJenisstringKeperluanPilihanNilai & had
Terpakai apabila: role=tool; gunakan ID sebenar yang dipulangkan
Lalai—
Medanmessages[].nameJenisstringKeperluanPilihanNilai & hadLalai—
Medanmessages[].reasoning_contentJenisstringKeperluanPilihanNilai & had
Terpakai apabila: Hantar semula penaakulan sebenar yang dipulangkan apabila model ini menggunakannya
Lalai—
Medanmessages[].reasoning_detailsJenisobject|arrayKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanmax_tokensJenisintegerKeperluanPilihanNilai & had
Minimum: 1
Bergantung pada model
Lalai—
Medanmax_completion_tokensJenisintegerKeperluanPilihanNilai & had
Minimum: 1
Bergantung pada model
Lalai—
MedanstreamJenisbooleanKeperluanPilihanNilai & hadLalaifalse
Medanstream_options.include_usageJenisbooleanKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedantemperatureJenisnumberKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medantop_pJenisnumberKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedanstopJenisstring|string[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedantoolsJenisfunction_tool[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medantools[].typeJenisstringKeperluanPilihanNilai & had
function
Bergantung pada model
Lalai—
Medantools[].function.nameJenisstringKeperluanDiperlukanNilai & had
Terpakai apabila: alat fungsi dibekalkan
Lalai—
Medantools[].function.descriptionJenisstringKeperluanPilihanNilai & hadLalai—
Medantools[].function.parametersJenisJSON_schemaKeperluanPilihanNilai & hadLalai—
Medantool_choiceJenisstring|objectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanparallel_tool_callsJenisbooleanKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanresponse_formatJenisobjectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanreasoning_effortJenisstringKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedanreasoningJenisobjectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanservice_tierJenisstringKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedaninstructionsJenisstringKeperluanPilihanNilai & had
Medan keserasian
Lalai—
MedanfunctionsJenisfunction[]KeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanfunction_callJenisstring|objectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
Medanprompt_cache_optionsJenisobjectKeperluanPilihanNilai & had
Bergantung pada model
Lalai—
MedanmodalitiesJenisstring[]KeperluanPilihanNilai & had
text
Lalai—
MedanproviderJenisobjectKeperluanPilihanNilai & had
Syarat: provider.options ditolak pada laluan teks Ultra ini
Lalai—
Medancache_control.ttlJenisstringKeperluanPilihanNilai & had
Syarat: 1h ditolak pada lokasi cache prompt yang digunakan
Lalai—
Gabungan bahan input

Teks · Teks UTF8

messages[].content

Parameter kaedah dan kitar hayat
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages
Parametermaterial_typesKontraktext
ParametermessagesKontraktatasusunan mesej dengan struktur role/content
Parameterfile_materialKontrakdokumen UTF-8 sebenar dimasukkan sebagai teks literal; ID fail tidak diandaikan
Parameteroptional_controlsKontrakstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametercontrol_scopeKontrakkhusus model; alat fungsi pengguna berbeza daripada alat yang dihoskan
Parameteroutput_modalitiesKontraktext
Parameterhosted_operationsKontrakfalse
Parametermultimodal_input_bindingKontraknull

Kitar hayat: synchronous_or_streamed

Hantar ID model yang tepat bersama messages.

Panjang konteks bukan had output.

Fail teks boleh membekalkan teks literal; input imej/audio/objek fail memerlukan pengikatan tepat.

Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas
Kadar standard Apabila mod pantas dipilih
Mod flex
Kadar standard Apabila mod flex dipilih
Usaha penaakulan maksimum
Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default
Usaha penaakulan · high
Kadar standard Apabila usaha penaakulan ditetapkan kepada high
Usaha penaakulan · low
Kadar standard Apabila usaha penaakulan ditetapkan kepada low
Usaha penaakulan · medium
Kadar standard Apabila usaha penaakulan ditetapkan kepada medium
Usaha penaakulan · minimal
Kadar standard Apabila usaha penaakulan ditetapkan kepada minimal
Harga cache eksplisit
Tidak diaktifkan Apabila cache eksplisit diminta

Kadar Ailoot

Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

KonfigurasiJadual kadarToken konteks, melebihiToken konteks, sehingga dan termasukCaj
KonfigurasiKadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiTahap panjang permintaan 1Jadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →

Contoh permintaan

Ailoot Ultra · OpenAI Chat

curlPython SDKPenstriman 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": "google/gemini-3.6-flash", "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='google/gemini-3.6-flash',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='google/gemini-3.6-flash',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Terima dan simpan hasil

Ailoot Ultra · OpenAI Chat

json atau SSE

Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan setiap pilihan jawapan bersama kandungan, panggilan alat dan penaakulannya. Dalam SSE, gabungkan delta mengikut indeks pilihan jawapan/alat dan kekalkan sebab penamatan akhir serta data penggunaan.

Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons
MedanJenis
Medanchoices[].indexJenisinteger
Medanchoices[].message.contentJenisstring|null
Medanchoices[].message.tool_callsJenistool_call[]
Medanchoices[].message.reasoning_contentJenisstring
Medanchoices[].message.reasoning_detailsJenisobject|array
Medanchoices[].finish_reasonJenisstring|null
MedanusageJenisobject
Ralat dan langkah seterusnya
ResponsSyaratLangkah seterusnya
Respons400 · invalid_request_errorSyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sahLangkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.

Alias

Alias model

Ailoot gemini-3.6-flash
Ailoot Ultra gemini-3.6-flash, google/gemini-3.6-flash

Alias laluan kaedah

/chat/completions

ID pemanggil berkaitan

google/gemini-3.6-flash, gemini-3.6-flash, gemini-3.6-flash

Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.6-flash

google/gemini-3.6-flash

Google /google/gemini-3.6-flash
ID model
  • gemini-3.6-flash
  • google/gemini-3.6-flash

Pengenalan

Gemini 3.6 Flash ialah model teks multimodal Google untuk pengekodan, analisis ruang dan ejen berbilang langkah. Ia menekankan pemeriksaan diagnostik, suntingan berfokus dan pengurangan gelung pelaksanaan yang tidak perlu. Ia menerima teks, imej, audio, video dan PDF, dengan alat, output berstruktur dan had input 1,048,576 token.

Input yang diterima
Teks
Hasil
json · sse

Tersedia di Ailoot · input & kaedah

Ailoot Ultra · Anthropic Messages POST /v1/messages
Input
text
Output
json, sse
Format output
JSON atau SSE
MedanJenisKeperluanNilai & hadLalai
MedanmodelJenisstringKeperluanDiperlukanNilai & had
google/gemini-3.6-flash
Lalai—
MedanmessagesJenismessage[]KeperluanDiperlukanNilai & hadLalai—
Medanmessages[].roleJenisstringKeperluanDiperlukanNilai & had
user, assistant
Lalai—
Medanmessages[].contentJenisstringKeperluanDiperlukanNilai & hadLalai—
Medanmax_tokensJenisintegerKeperluanDiperlukanNilai & hadLalai—
MedanstreamJenisbooleanKeperluanPilihanNilai & hadLalaifalse
Gabungan bahan input

Teks · Teks UTF-8

rentetan messages[].content

Parameter kaedah dan kitar hayat
ParameterKontrak
Parametercontent_typeKontrakapplication/json
ParameterrequiredKontrakmodel, messages, max_tokens
Parameteroptional_controlsKontrakstream
Parametermaterial_typesKontraktext
Parametertext_file_materialKontrakBaca dokumen UTF-8 sebenar dan letakkan teksnya dalam rentetan input atau kandungan mesej yang ditunjukkan.

Kitar hayat: synchronous_or_streamed

Pelan harga

Rujukan tarif tidak menambah pilihan permintaan. Parameter yang disokong disenaraikan untuk kaedah yang dipilih.

Mod pantas
Kadar standard Apabila mod pantas dipilih
Mod flex
Kadar standard Apabila mod flex dipilih
Usaha penaakulan maksimum
Kadar standard Apabila usaha penaakulan maksimum menggunakan pelarasan default
Usaha penaakulan · high
Kadar standard Apabila usaha penaakulan ditetapkan kepada high
Usaha penaakulan · low
Kadar standard Apabila usaha penaakulan ditetapkan kepada low
Usaha penaakulan · medium
Kadar standard Apabila usaha penaakulan ditetapkan kepada medium
Usaha penaakulan · minimal
Kadar standard Apabila usaha penaakulan ditetapkan kepada minimal
Harga cache eksplisit
Tidak diaktifkan Apabila cache eksplisit diminta

Kadar Ailoot

Harga mengikut konfigurasi

Padankan setiap caj dengan syarat yang dipaparkan. Gunakan satu kadar bagi setiap set konfigurasi alternatif.

KonfigurasiJadual kadarToken konteks, melebihiToken konteks, sehingga dan termasukCaj
KonfigurasiKadar asas tokenJadual kadarKadar asasToken konteks, melebihi—Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token
KonfigurasiTahap panjang permintaan 1Jadual kadar—Token konteks, melebihi0Token konteks, sehingga dan termasukTiada had atasCaj
Input · Token input $0.0015 / 1K token
Output · Token output $0.0075 / 1K token
Input · Bacaan cache $0.00015 / 1K token
Input · Penulisan cache $0.0000833333333333334 / 1K token
Input · Penulisan cache, 1 jam — / 1K token

Ailoot merizabkan anggaran amaun sebelum permintaan. Selepas hasil diterima, caj akhir diselesaikan berdasarkan penggunaan terukur. Penyelesaian caj penstriman menggunakan rekod penggunaan akhir. Cara rizab dan penyelesaian caj berfungsi →

Contoh permintaan

Ailoot Ultra · Anthropic Messages

Badan JSON minimum yang lengkapcurl · gunakan dokumen UTF-8 andaPython · simpan hasil lengkap
{
  "model": "google/gemini-3.6-flash",
  "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': 'google/gemini-3.6-flash', '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': 'google/gemini-3.6-flash', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Terima dan simpan hasil

Ailoot Ultra · Anthropic Messages

JSON atau SSE

Simpan semua hasil yang selesai

Simpan setiap respons lengkap, fail dan bahagian kandungan yang dikembalikan.

Kekalkan semua blok kandungan, tandatangan penaakulan dan ID penggunaan alat sebenar. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan output.

Jika respons asal perlu disemak

Kekalkan ID permintaan/respons dan pengepala. Tiada URL umum bagi pengambilan tugas teks dibekalkan.

Medan respons
MedanJenis
MedanidJenisstring
MedanmodelJenisstring
Medancontent[]Jenistext|thinking|tool_use|other content block
Medanstop_reasonJenisstring|null
MedanusageJenisobject
Ralat dan langkah seterusnya
ResponsSyaratLangkah seterusnya
Respons400 · invalid_request_errorSyaratMedan wajib, perwakilan bahan atau nilai parameter tidak sahLangkah seterusnyaBetulkan medan yang ditunjukkan sebelum permintaan penciptaan baharu.

Alias

Alias model

Ailoot gemini-3.6-flash
Ailoot Ultra gemini-3.6-flash, google/gemini-3.6-flash

Alias laluan kaedah

/chat/completions

ID pemanggil berkaitan

google/gemini-3.6-flash, gemini-3.6-flash, gemini-3.6-flash

FAQ · Google: Gemini 3.6 Flash
Apakah input dan hasil yang tersedia?

POST /v1/messages · gemini-3.6-flash: text, image → text

POST /v1/chat/completions · gemini-3.6-flash: text, image → text

POST /v1beta/models/{model}:generateContent · gemini-3.6-flash: text, image → text

POST /v1/chat/completions · gemini-3.6-flash: text → text

POST /v1/messages · gemini-3.6-flash: text → json, sse

POST /v1/chat/completions · google/gemini-3.6-flash: text → text

POST /v1/messages · google/gemini-3.6-flash: text → json, sse

Apakah medan yang digunakan oleh permintaan?

POST /v1/messages · gemini-3.6-flash: model, messages, system, max_tokens, stream, metadata

POST /v1/chat/completions · gemini-3.6-flash: model, messages, stream

POST /v1beta/models/{model}:generateContent · gemini-3.6-flash: contents, systemInstruction, sessionId

POST /v1/chat/completions · gemini-3.6-flash: model, messages, stream

POST /v1/messages · gemini-3.6-flash: model, messages, max_tokens, stream

POST /v1/chat/completions · google/gemini-3.6-flash: model, messages, stream, modalities, provider

POST /v1/messages · google/gemini-3.6-flash: model, messages, max_tokens, stream

Apakah had yang terpakai?

POST /v1/messages · gemini-3.6-flash: ctx: 1048576; max_out: 65536; messages.min_items: 1; max_tokens.minimum: 1

POST /v1/chat/completions · gemini-3.6-flash: ctx: 1048576; max_out: 65536; messages.min_items: 1

POST /v1beta/models/{model}:generateContent · gemini-3.6-flash: ctx: 1048576; max_out: 65536; contents.min_items: 1

POST /v1/chat/completions · gemini-3.6-flash: messages.min_items: 1

POST /v1/chat/completions · google/gemini-3.6-flash: messages.min_items: 1

Butiran lanjut

Sambungkan Ailoot kepada Claude Code, OpenCode, Hermes atau aplikasi anda.

Syarikat dan portfolio projeknya

Syarikat dan portfolio projeknya: jutaan pelanggan; jualan bernilai berbilion setiap bulan.

Beli token dengan diskaun.

Diskaun langganan untuk penggunaan berkala. Kod promosi — sehingga 50% bagi pembelian token.

Langganan
Pilih pelan berdiskaun untuk permintaan berkala anda.
Kod promosi sehingga 50%
Masukkan kod semasa pembelian. Harga dikira semula mengikut promosi semasa.
Perbelanjaan dalam sejarah
Model, token dan jumlah disimpan bagi setiap permintaan.

Pilih langganan · Lihat harga model

Sambungkan API kepada produk yang anda jual.

SaaS, aplikasi dan bot — di bawah tawaran rasmi serta perjanjian lesen Ailoot. Untuk jualan semula, mohon lesen penjual semula.

Aplikasi komersial
Tambahkan penjanaan teks, imej, video dan audio pada ciri berbayar perkhidmatan anda.
Lesen penjual semula
Hantar keterangan projek dan susunan akses. Minta terma penggunaan serta jualan semula secara bertulis.
Dokumen pada laman
Tawaran, perjanjian lesen dan dasar pemprosesan data tersedia sebelum sambungan.

Mohon lesen penjual semula · Tawaran dan perjanjian lesen