Google: Gemini 3.1 Pro Preview
Gemini 3.1 Pro Preview adalah model penalaran multimodal Google untuk tugas perangkat lunak, algoritma, dan pengetahuan yang kompleks. Model ini menerima teks, gambar, audio, video, dan PDF serta menghasilkan teks atau kode, dengan alat dan keluaran terstruktur. Tingkat penalaran Low, medium, dan high memandu upaya; high merupakan bawaan yang didokumentasikan.
- Ailoot · Anthropic Messages
POST /v1/messagesgemini-3.1-pro-preview - Ailoot · Gemini generateContent
POST /v1beta/models/{model}:generateContentgemini-3.1-pro-preview - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgemini-3.1-pro-preview - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgemini-3.1-pro-preview - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgoogle/gemini-3.1-pro-preview - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgoogle/gemini-3.1-pro-preview
Tentang model
Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.
Gemini 3.1 Pro Preview adalah model teks Google yang berorientasi pada penalaran untuk tugas kompleks yang memerlukan rekayasa perangkat lunak, pengembangan algoritma, atau sintesis bukti multimodal. Model ini dikembangkan dari Gemini 3 Pro, dengan penekanan pada penggunaan alat yang presisi, penalaran lebih efisien, dan eksekusi bertahap yang andal. Teks, gambar, audio, video, dan PDF dapat berkontribusi pada jawaban tertulis, artefak kode, atau hasil terstruktur.
Untuk penugasan pemrograman yang menantang, berikan tujuan, materi repositori yang relevan, perilaku yang diamati, dan batasan yang harus dipertahankan. Seluruh repositori kode dapat menyediakan konteks untuk penugasan. Untuk peninjauan kontrak kode, minta model membandingkan penanganan kontrak data bersama oleh dua modul, mengidentifikasi ketidaksesuaian, dan mengusulkan koreksi terarah dengan referensi kode pendukung. Keluaran yang berguna membedakan analisis, revisi yang diusulkan, dan bukti dari validasi apa pun yang dilakukan aplikasi terhubung.
Materi peluncuran mendemonstrasikan penjelasan visual berbasis kode dan proyek interaktif, termasuk keluaran SVG animasi dari arahan teks. Ini merupakan artefak kode, bukan pembuatan gambar raster. Arahan yang jelas dapat mendefinisikan apa yang harus dijelaskan, bagaimana visual harus berperilaku, dan data yang harus direpresentasikannya. Tinjau kode dan hasil rendering terhadap persyaratan tersebut. Untuk tugas sintesis data, berikan sumber sebenarnya dan minta satu tampilan yang mempertahankan hubungan dan kualifikasi yang ditemukan di dalamnya.
Tingkat thinking yang didokumentasikan adalah low, medium, dan high, dengan high sebagai bawaan untuk 3.1 Pro Preview. Thinking tidak dapat sepenuhnya dinonaktifkan dalam profil Pro ini. Pilih upaya lebih rendah untuk jawaban dengan cakupan terbatas dan penalaran lebih banyak untuk pekerjaan bertahap yang sulit, sambil menyisakan alokasi keluaran yang memadai bagi artefak akhir. Batas keluaran yang kecil dapat menghentikan penalaran sebelum jawaban akhir yang berguna muncul. Panduan thinking memisahkan ringkasan penalaran dari proses internal lengkap dan menjelaskan mengapa konteks thought signatures percakapan penting.
Tabel khusus Preview mencantumkan function calling, eksekusi kode, grounding pencarian, grounding Maps, konteks URL, dan keluaran terstruktur. Tabel tersebut membatasi File Search pada AI Studio. Berikan tujuan fungsi dan definisi parameter, lalu lanjutkan dari hasil nyata yang dikembalikan. Profil Custom Tools Preview yang terpisah dioptimalkan untuk memprioritaskan alat khusus dan bash; profil tersebut merupakan endpoint produsen bernama tersendiri, sehingga spesialisasi itu tidak boleh diam-diam dianggap sebagai sifat setiap permintaan 3.1 Pro. Pilih skema hasil terstruktur ketika tugas memerlukan rekaman dengan definisi tertentu, bukan prosa tanpa batasan.
Untuk analisis multimodal, identifikasi halaman, visual, interval rekaman, atau peristiwa video yang relevan. Untuk analisis dokumen, bandingkan diagram dengan spesifikasi tertulisnya dan kembalikan setiap perbedaan beserta kutipan pendukung. Sumber lisan dapat berkontribusi sebagai transkrip atau interpretasi dalam teks. Pertahankan referensi sumber untuk kesimpulan yang perlu diperiksa, dan pisahkan apa yang terlihat atau dinyatakan dari apa yang diinferensikan. Keluaran profil ini tetap berupa teks, termasuk kode; pembuatan gambar atau ucapan native bukan bagian dari tabel kemampuan khususnya.
Kartu asli 3.1 Pro menetapkan konteks hingga 1M dan keluaran teks 64K, sedangkan tabel API khusus Preview memberikan 1,048,576 token masukan dan 65,536 token keluaran. Masukkan instruksi, riwayat percakapan, dan media ke dalam anggaran masukan. Caching dan pemrosesan batch didokumentasikan, dengan opsi Flex dan Priority juga dicantumkan untuk profil produsen ini. Untuk beberapa item independen, definisikan keluaran yang diwajibkan dan pertahankan setiap pengenal sumber, alih-alih menggabungkan bukti yang tidak berkaitan menjadi satu jawaban yang tidak dapat ditelusuri.
Edisi bernama Preview tetap berbeda dari profil Custom Tools Pro serta rilis Flash atau Pro berikutnya. Keunggulannya berkaitan dengan penalaran kompleks, pemrograman, dan sintesis bukti; artefak akhir tetap perlu diperiksa terhadap sumber dan hasil alat sebenarnya. Pertahankan ambiguitas yang belum terselesaikan ketika informasi yang diberikan tidak mendukung kesimpulan pasti. Hasil serahan yang berguna adalah jawaban, kode, atau rekaman yang didukung dan diminta oleh tugas, dengan bukti yang cukup untuk menilai batas praktisnya.
Tugas praktis
Tugas praktis
Contoh teknis dalam bahasa Inggris
Review a cross-module date contract
Review this contract mismatch. Producer emits {due_date: "2026-11-03"}; consumer reads record.dueDate and displays "No date" when missing. Existing stored records use due_date. Propose the smallest compatible correction and tests for both present and absent dates. Preserve the producer field and do not add a second stored field.Hasil yang diharapkan
A short mismatch analysis, a focused consumer patch and tests covering the stored field and missing-value behavior.Periksa hasil
Check that the patch reads due_date without changing persisted records or treating an absent date as a valid one.Ailoot · Anthropic Messages POST /v1/messages gemini-3.1-pro-preview
gemini-3.1-pro-previewMulai
Gemini 3.1 Pro Preview adalah model penalaran multimodal Google untuk tugas perangkat lunak, algoritma, dan pengetahuan yang kompleks. Model ini menerima teks, gambar, audio, video, dan PDF serta menghasilkan teks atau kode, dengan alat dan keluaran terstruktur. Tingkat penalaran Low, medium, dan high memandu upaya; high merupakan bawaan yang didokumentasikan.
- Masukan yang diterima
- Teks · Gambar
- Hasil
- Teks
Tersedia di Ailoot · masukan & metode
Ailoot · Anthropic Messages POST /v1/messages
- Masukan
text,image- Keluaran
text- Konteks
- 1.048.576 tokens
- Keluaran maksimum
- 65.536 tokens
- Format keluaran
- json atau SSE
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan gemini-3.1-pro-preview | Bawaan— |
Kolommessages | Jenismessage[] | PersyaratanWajib | Nilai & batasan Item minimum: 1 | Bawaan— |
Kolommessages[].role | Jenisstring | PersyaratanWajib | Nilai & batasan user, assistant | Bawaan— |
Kolommessages[].content | Jenisstring|content_block[] | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolomsystem | Jenisstring|content_block[] | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolommax_tokens | Jenisinteger | PersyaratanWajib | Nilai & batasan Minimum: 1 Batas berlaku untuk: batas maksimum yang tepat untuk model/kartu yang dipilih | Bawaan— |
Kolomstream | Jenisboolean | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
Kolomtemperature | Jenisnumber | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomtop_p | Jenisnumber | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomstop_sequences | Jenisstring[] | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomtools | Jenistool[] | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomtools[].name | Jenisstring | PersyaratanOpsional | Nilai & batasan Berlaku jika: alat disediakan | Bawaan— |
Kolomtools[].description | Jenisstring | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolomtools[].input_schema | JenisJSON_schema | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolomtool_choice | Jenisobject | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomthinking.type | Jenisstring | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomthinking.budget_tokens | Jenisinteger | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomoutput_config.effort | Jenisstring | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolommetadata | Jenisobject | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolomcache_control | Jenisobject | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kombinasi bahan masukan
Teks · Teks UTF8
messages[].content atau blok type=text
Teks + gambar
{type:image,source:{type:base64,media_type,data}} atau sumber dengan type=url
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametermaterial_types | Kontraktext, image |
Parameterrequired | Kontrakmodel, messages, max_tokens |
Parameteroptional_controls | Kontraknull |
Parametercontent_type | Kontrakapplication/json |
Parametertext_file_material | Kontrakkonten UTF-8 aktual dimasukkan sebagai teks; ID file atau alamat URL (URLs) memerlukan dukungan yang tepat dan terpisah |
Siklus hidup: exact retained published method
Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.
Paket
Tarif metode Ailoot
POST /v1/messages- Masukan
- US$0,002 / 1K
- Keluaran
- US$0,012 / 1K
- Pembacaan cache
- US$0,0002 / 1K
Harga menurut panjang permintaan · Anthropic Messages
| Ukuran permintaan, dalam token | Masukan | Keluaran | Pembacaan cache | Penulisan cache | Cache 5 menit | Cache 1 jam |
|---|---|---|---|---|---|---|
| Ukuran permintaan, dalam token(0; 200.000] | MasukanUS$0,002 | KeluaranUS$0,012 | Pembacaan cacheUS$0,0002 | Penulisan cacheTarif dasar: — | Cache 5 menitTarif dasar: — | Cache 1 jamTarif dasar: — |
| Ukuran permintaan, dalam token(200.000; ∞) | MasukanUS$0,004 | KeluaranUS$0,018 | Pembacaan cacheUS$0,0004 | Penulisan cacheTarif dasar: — | Cache 5 menitTarif dasar: — | Cache 1 jamTarif dasar: — |
Tarif dalam USD per 1K token. Jika tidak ada tarif yang ditetapkan, tarif dasar metode ini diwarisi; «—» berarti tidak ada tarif dasar yang ditetapkan.
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Detail tarif referensi
Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.
Jadwal referensi model
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
|---|---|---|---|---|
| KonfigurasiOpenAI Chat · Tarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token Keluaran · Token penalaran keluaran $0.024 / 1K token |
| KonfigurasiOpenAI Chat · Tingkat 1 berdasarkan panjang permintaan | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasuk200.000 | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiOpenAI Chat · Tingkat 2 berdasarkan panjang permintaan | Jadwal tarif— | Token konteks, lebih dari200.000 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.008 / 1K token Keluaran · Token keluaran $0.036 / 1K token Masukan · Pembacaan cache $0.0008 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiAnthropic Messages · Tarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token Keluaran · Token penalaran keluaran $0.024 / 1K token |
| KonfigurasiAnthropic Messages · Tingkat 1 berdasarkan panjang permintaan | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasuk200.000 | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiAnthropic Messages · Tingkat 2 berdasarkan panjang permintaan | Jadwal tarif— | Token konteks, lebih dari200.000 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.008 / 1K token Keluaran · Token keluaran $0.036 / 1K token Masukan · Pembacaan cache $0.0008 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
Contoh permintaan
Ailoot · Anthropic Messages
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.1-pro-preview", "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.1-pro-preview", "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.1-pro-preview",
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.1-pro-preview",
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.1-pro-preview',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_message()
save_result(final.to_dict(mode="json"),"stream-result")
Terima dan simpan hasil
Ailoot · Anthropic Messages
json atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.
Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.
Jika respons asli perlu diperiksa
Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomid | Jenisstring |
Kolommodel | Jenisstring |
Kolomcontent[] | Jenistext|thinking|tool_use|other content block |
Kolomstop_reason | Jenisstring|null |
Kolomusage | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Alias
Alias model
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias jalur metode
/chat/completions
ID pemanggil terkait
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.1-pro-preview
gemini-3.1-pro-previewMulai
Gemini 3.1 Pro Preview adalah model penalaran multimodal Google untuk tugas perangkat lunak, algoritma, dan pengetahuan yang kompleks. Model ini menerima teks, gambar, audio, video, dan PDF serta menghasilkan teks atau kode, dengan alat dan keluaran terstruktur. Tingkat penalaran Low, medium, dan high memandu upaya; high merupakan bawaan yang didokumentasikan.
- Masukan yang diterima
- Teks · Gambar
- Hasil
- Teks
Tersedia di Ailoot · masukan & metode
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
- Masukan
text,image- Keluaran
text- Konteks
- 1.048.576 tokens
- Keluaran maksimum
- 65.536 tokens
- Format keluaran
- json atau streaming yang didukung
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolompath.model | Jenisstring | PersyaratanWajib | Nilai & batasan gemini-3.1-pro-preview | Bawaan— |
Kolomcontents | Jeniscontent[] | PersyaratanWajib | Nilai & batasan Item minimum: 1 | Bawaan— |
Kolomcontents[].role | Jenisstring | PersyaratanOpsional | Nilai & batasan user, model | Bawaan— |
Kolomcontents[].parts | Jenispart[] | PersyaratanWajib | Nilai & batasan | Bawaan— |
KolomsystemInstruction | Jeniscontent | PersyaratanOpsional | Nilai & batasan | Bawaan— |
KolomgenerationConfig.maxOutputTokens | Jenisinteger | PersyaratanOpsional | Nilai & batasan Minimum: 1 Bergantung pada model | Bawaan— |
KolomgenerationConfig.temperature | Jenisnumber | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
KolomgenerationConfig.topP | Jenisnumber | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
KolomgenerationConfig.topK | Jenisinteger | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
KolomgenerationConfig.stopSequences | Jenisstring[] | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
KolomgenerationConfig.thinkingConfig.includeThoughts | Jenisboolean | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
KolomgenerationConfig.thinkingConfig.thinkingBudget | Jenisinteger | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomtools[].functionDeclarations | Jenisfunction_declaration[] | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
KolomtoolConfig.functionCallingConfig.mode | Jenisstring | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
KolomsafetySettings | Jenisobject[] | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
KolomsessionId | Jenisstring | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kombinasi bahan masukan
Teks · Teks UTF8
contents[].parts[].text
Teks + gambar
parts[].inlineData={mimeType,data}
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametermaterial_types | Kontraktext, image |
Parameterrequired | Kontrakcontents |
Parameteroptional_controls | Kontraknull |
Parametercontent_type | Kontrakapplication/json |
Parametertext_file_material | Kontrakkonten UTF-8 aktual dimasukkan sebagai teks; ID file atau alamat URL (URLs) memerlukan dukungan yang tepat dan terpisah |
Siklus hidup: exact retained published method
Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.
Paket
Tarif metode Ailoot
POST /v1beta/models/{model}:generateContent- Masukan
- US$0,002 / 1K
- Keluaran
- US$0,012 / 1K
- Pembacaan cache
- US$0,0002 / 1K
Harga menurut panjang permintaan · Gemini generateContent
| Ukuran permintaan, dalam token | Masukan | Keluaran | Pembacaan cache | Penulisan cache | Cache 5 menit | Cache 1 jam |
|---|---|---|---|---|---|---|
| Ukuran permintaan, dalam token(0; 200.000] | MasukanUS$0,002 | KeluaranUS$0,012 | Pembacaan cacheUS$0,0002 | Penulisan cacheTarif dasar: — | Cache 5 menitTarif dasar: — | Cache 1 jamTarif dasar: — |
| Ukuran permintaan, dalam token(200.000; ∞) | MasukanUS$0,004 | KeluaranUS$0,018 | Pembacaan cacheUS$0,0004 | Penulisan cacheTarif dasar: — | Cache 5 menitTarif dasar: — | Cache 1 jamTarif dasar: — |
Tarif dalam USD per 1K token. Jika tidak ada tarif yang ditetapkan, tarif dasar metode ini diwarisi; «—» berarti tidak ada tarif dasar yang ditetapkan.
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Detail tarif referensi
Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.
Jadwal referensi model
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
|---|---|---|---|---|
| KonfigurasiOpenAI Chat · Tarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token Keluaran · Token penalaran keluaran $0.024 / 1K token |
| KonfigurasiOpenAI Chat · Tingkat 1 berdasarkan panjang permintaan | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasuk200.000 | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiOpenAI Chat · Tingkat 2 berdasarkan panjang permintaan | Jadwal tarif— | Token konteks, lebih dari200.000 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.008 / 1K token Keluaran · Token keluaran $0.036 / 1K token Masukan · Pembacaan cache $0.0008 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiAnthropic Messages · Tarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token Keluaran · Token penalaran keluaran $0.024 / 1K token |
| KonfigurasiAnthropic Messages · Tingkat 1 berdasarkan panjang permintaan | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasuk200.000 | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiAnthropic Messages · Tingkat 2 berdasarkan panjang permintaan | Jadwal tarif— | Token konteks, lebih dari200.000 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.008 / 1K token Keluaran · Token keluaran $0.036 / 1K token Masukan · Pembacaan cache $0.0008 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
Contoh permintaan
Ailoot · Gemini generateContent
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.1-pro-preview: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.1-pro-preview: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.1-pro-preview", 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.1-pro-preview", 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.1-pro-preview',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 streaming yang didukung
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.
Simpan semua kandidat dan bagian, termasuk panggilan fungsi, tanda tangan pemikiran, dan data penggunaan; gabungkan potongan stream secara berurutan.
Jika respons asli perlu diperiksa
Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.
Kolom respons
| Kolom | Jenis |
|---|---|
KolomresponseId | Jenisstring |
KolommodelVersion | Jenisstring |
Kolomcandidates[].content.parts[] | Jenistext|inlineData|functionCall|other part |
Kolomcandidates[].finishReason | Jenisstring |
KolomusageMetadata | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Alias
Alias model
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias jalur metode
/chat/completions
ID pemanggil terkait
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions gemini-3.1-pro-preview
gemini-3.1-pro-previewgemini-3.1-pro-previewgoogle/gemini-3.1-pro-preview
Mulai
Gemini 3.1 Pro Preview adalah model penalaran multimodal Google untuk tugas perangkat lunak, algoritma, dan pengetahuan yang kompleks. Model ini menerima teks, gambar, audio, video, dan PDF serta menghasilkan teks atau kode, dengan alat dan keluaran terstruktur. Tingkat penalaran Low, medium, dan high memandu upaya; high merupakan bawaan yang didokumentasikan.
- Masukan yang diterima
- Teks
- Hasil
- Teks
Tersedia di Ailoot · masukan & metode
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Masukan
text- Keluaran
text- Format keluaran
- json atau SSE
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan gemini-3.1-pro-preview | Bawaan— |
Kolommessages | Jenismessage[] | PersyaratanWajib | Nilai & batasan Item minimum: 1 | Bawaan— |
Kolommessages[].role | Jenisstring | PersyaratanWajib | Nilai & batasan Bergantung pada model | Bawaan— |
Kolommessages[].content | Jenisstring | PersyaratanOpsional | Nilai & batasan Berlaku jika: Percakapan teks | Bawaan— |
Kolomstream | Jenisboolean | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
Kombinasi bahan masukan
Teks · Teks UTF8
messages[].content
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, messages |
Parametermaterial_types | Kontraktext |
Parametermessages | Kontrakarray pesan dengan struktur role/content |
Parameterfile_material | Kontrakdokumen UTF-8 yang sebenarnya dimasukkan sebagai teks apa adanya; ID file tidak disimpulkan |
Parameteroptional_controls | Kontrakstream |
Parametercontrol_scope | KontrakPercakapan teks; stream adalah nilai boolean dengan false sebagai bawaan. |
Parameteroutput_modalities | Kontraktext |
Parameterhosted_operations | Kontrakfalse |
Parametermultimodal_input_binding | Kontraknull |
Alias metode: /chat/completions
Siklus hidup: synchronous_or_streamed
Kirim ID model yang tepat bersama messages.
Panjang konteks bukan batas keluaran.
File teks dapat menyediakan teks apa adanya; masukan gambar/audio/objek file memerlukan pengikatan yang tepat.
Paket
Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.
- Mode Fast
- Tarif standar Saat mode fast dipilih
- Mode Flex
- Tarif standar Saat mode flex dipilih
- Upaya penalaran maksimum
- Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default
- Upaya penalaran · high
- Tarif standar Saat upaya penalaran bernilai high
- Upaya penalaran · low
- Tarif standar Saat upaya penalaran bernilai low
- Upaya penalaran · medium
- Tarif standar Saat upaya penalaran bernilai medium
- Harga cache eksplisit
- Tidak diaktifkan Saat cache eksplisit diminta
- Keluaran penalaran
- Penalaran menggunakan tarif subset yang tercantum sebagai bagian dari total keluaran; jangan tambahkan token tersebut dua kali. Ketika keluaran mencakup token penalaran
Tarif Ailoot
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
|---|---|---|---|---|
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token Keluaran · Token penalaran keluaran $0.024 / 1K token |
| KonfigurasiPanjang permintaan · tingkat 1 | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasuk200.000 | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiPanjang permintaan · tingkat 2 | Jadwal tarif— | Token konteks, lebih dari200.000 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.008 / 1K token Keluaran · Token keluaran $0.036 / 1K token Masukan · Pembacaan cache $0.0008 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Contoh permintaan
Ailoot Ultra · OpenAI Chat
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.1-pro-preview","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.1-pro-preview", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
Terima dan simpan hasil
Ailoot Ultra · OpenAI Chat
json atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.
Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.
Jika respons asli perlu diperiksa
Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomchoices[].index | Jenisinteger |
Kolomchoices[].message.content | Jenisstring|null |
Kolomchoices[].message.tool_calls | Jenistool_call[] |
Kolomchoices[].message.reasoning_content | Jenisstring |
Kolomchoices[].message.reasoning_details | Jenisobject|array |
Kolomchoices[].finish_reason | Jenisstring|null |
Kolomusage | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Alias
Alias model
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias jalur metode
/chat/completions
ID pemanggil terkait
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot Ultra · Anthropic Messages POST /v1/messages gemini-3.1-pro-preview
gemini-3.1-pro-previewgemini-3.1-pro-previewgoogle/gemini-3.1-pro-preview
Mulai
Gemini 3.1 Pro Preview adalah model penalaran multimodal Google untuk tugas perangkat lunak, algoritma, dan pengetahuan yang kompleks. Model ini menerima teks, gambar, audio, video, dan PDF serta menghasilkan teks atau kode, dengan alat dan keluaran terstruktur. Tingkat penalaran Low, medium, dan high memandu upaya; high merupakan bawaan yang didokumentasikan.
- Masukan yang diterima
- Teks
- Hasil
- json · sse
Tersedia di Ailoot · masukan & metode
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Masukan
text- Keluaran
json,sse- Format keluaran
- JSON atau SSE
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan gemini-3.1-pro-preview | Bawaan— |
Kolommessages | Jenismessage[] | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolommessages[].role | Jenisstring | PersyaratanWajib | Nilai & batasan user, assistant | Bawaan— |
Kolommessages[].content | Jenisstring | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolommax_tokens | Jenisinteger | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolomstream | Jenisboolean | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
Kombinasi bahan masukan
Teks · Teks UTF-8
string messages[].content
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, messages, max_tokens |
Parameteroptional_controls | Kontrakstream |
Parametermaterial_types | Kontraktext |
Parametertext_file_material | KontrakBaca dokumen UTF-8 yang sebenarnya dan masukkan teksnya ke string masukan atau konten pesan yang ditunjukkan. |
Siklus hidup: synchronous_or_streamed
Paket
Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.
- Mode Fast
- Tarif standar Saat mode fast dipilih
- Mode Flex
- Tarif standar Saat mode flex dipilih
- Upaya penalaran maksimum
- Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default
- Upaya penalaran · high
- Tarif standar Saat upaya penalaran bernilai high
- Upaya penalaran · low
- Tarif standar Saat upaya penalaran bernilai low
- Upaya penalaran · medium
- Tarif standar Saat upaya penalaran bernilai medium
- Harga cache eksplisit
- Tidak diaktifkan Saat cache eksplisit diminta
- Keluaran penalaran
- Penalaran menggunakan tarif subset yang tercantum sebagai bagian dari total keluaran; jangan tambahkan token tersebut dua kali. Ketika keluaran mencakup token penalaran
Tarif Ailoot
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
|---|---|---|---|---|
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token Keluaran · Token penalaran keluaran $0.024 / 1K token |
| KonfigurasiPanjang permintaan · tingkat 1 | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasuk200.000 | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiPanjang permintaan · tingkat 2 | Jadwal tarif— | Token konteks, lebih dari200.000 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.008 / 1K token Keluaran · Token keluaran $0.036 / 1K token Masukan · Pembacaan cache $0.0008 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Contoh permintaan
Ailoot Ultra · Anthropic Messages
{
"model": "gemini-3.1-pro-preview",
"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.1-pro-preview', '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.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Terima dan simpan hasil
Ailoot Ultra · Anthropic Messages
JSON atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.
Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.
Jika respons asli perlu diperiksa
Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomid | Jenisstring |
Kolommodel | Jenisstring |
Kolomcontent[] | Jenistext|thinking|tool_use|other content block |
Kolomstop_reason | Jenisstring|null |
Kolomusage | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Alias
Alias model
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias jalur metode
/chat/completions
ID pemanggil terkait
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.1-pro-preview
google/gemini-3.1-pro-previewgemini-3.1-pro-previewgoogle/gemini-3.1-pro-preview
Mulai
Gemini 3.1 Pro Preview adalah model penalaran multimodal Google untuk tugas perangkat lunak, algoritma, dan pengetahuan yang kompleks. Model ini menerima teks, gambar, audio, video, dan PDF serta menghasilkan teks atau kode, dengan alat dan keluaran terstruktur. Tingkat penalaran Low, medium, dan high memandu upaya; high merupakan bawaan yang didokumentasikan.
- Masukan yang diterima
- Teks
- Hasil
- Teks
Tersedia di Ailoot · masukan & metode
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Masukan
text- Keluaran
text- Format keluaran
- json atau SSE
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan google/gemini-3.1-pro-preview | Bawaan— |
Kolommessages | Jenismessage[] | PersyaratanWajib | Nilai & batasan Item minimum: 1 | Bawaan— |
Kolommessages[].role | Jenisstring | PersyaratanWajib | Nilai & batasan Contoh: system, user, assistant, tool, function Kondisi: Peran ini direpresentasikan secara eksplisit oleh tipe kompatibilitas dalam kode sumber; kumpulan peran model yang tepat tetap khusus untuk tiap model. Bergantung pada model | Bawaan— |
Kolommessages[].content | Jenisstring|content_part[]|null | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolommessages[].tool_calls | Jenistool_call[] | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolommessages[].tool_call_id | Jenisstring | PersyaratanOpsional | Nilai & batasan Berlaku jika: role=tool; gunakan ID yang benar-benar dikembalikan | Bawaan— |
Kolommessages[].name | Jenisstring | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolommessages[].reasoning_content | Jenisstring | PersyaratanOpsional | Nilai & batasan Berlaku jika: Kirim kembali penalaran yang benar-benar dikembalikan jika model ini menggunakannya | Bawaan— |
Kolommessages[].reasoning_details | Jenisobject|array | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolommax_tokens | Jenisinteger | PersyaratanOpsional | Nilai & batasan Minimum: 1 Bergantung pada model | Bawaan— |
Kolommax_completion_tokens | Jenisinteger | PersyaratanOpsional | Nilai & batasan Minimum: 1 Bergantung pada model | Bawaan— |
Kolomstream | Jenisboolean | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
Kolomstream_options.include_usage | Jenisboolean | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomtemperature | Jenisnumber | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomtop_p | Jenisnumber | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomstop | Jenisstring|string[] | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomtools | Jenisfunction_tool[] | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomtools[].type | Jenisstring | PersyaratanOpsional | Nilai & batasan function Bergantung pada model | Bawaan— |
Kolomtools[].function.name | Jenisstring | PersyaratanWajib | Nilai & batasan Berlaku jika: alat fungsi disediakan | Bawaan— |
Kolomtools[].function.description | Jenisstring | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolomtools[].function.parameters | JenisJSON_schema | PersyaratanOpsional | Nilai & batasan | Bawaan— |
Kolomtool_choice | Jenisstring|object | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomparallel_tool_calls | Jenisboolean | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomresponse_format | Jenisobject | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomreasoning_effort | Jenisstring | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomreasoning | Jenisobject | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomservice_tier | Jenisstring | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolominstructions | Jenisstring | PersyaratanOpsional | Nilai & batasan Kolom kompatibilitas | Bawaan— |
Kolomfunctions | Jenisfunction[] | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomfunction_call | Jenisstring|object | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolomprompt_cache_options | Jenisobject | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
Kolommodalities | Jenisstring[] | PersyaratanOpsional | Nilai & batasan text | Bawaan— |
Kolomprovider | Jenisobject | PersyaratanOpsional | Nilai & batasan Kondisi: provider.options ditolak pada rute teks Ultra ini | Bawaan— |
Kolomcache_control.ttl | Jenisstring | PersyaratanOpsional | Nilai & batasan Kondisi: 1h ditolak pada lokasi cache prompt yang digunakan | Bawaan— |
Kombinasi bahan masukan
Teks · Teks UTF8
messages[].content
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, messages |
Parametermaterial_types | Kontraktext |
Parametermessages | Kontrakarray pesan dengan struktur role/content |
Parameterfile_material | Kontrakdokumen UTF-8 yang sebenarnya dimasukkan sebagai teks apa adanya; ID file tidak disimpulkan |
Parameteroptional_controls | Kontrakstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Parametercontrol_scope | Kontrakkhusus model; alat fungsi pengguna berbeda dari alat yang dihosting |
Parameteroutput_modalities | Kontraktext |
Parameterhosted_operations | Kontrakfalse |
Parametermultimodal_input_binding | Kontraknull |
Siklus hidup: synchronous_or_streamed
Kirim ID model yang tepat bersama messages.
Panjang konteks bukan batas keluaran.
File teks dapat menyediakan teks apa adanya; masukan gambar/audio/objek file memerlukan pengikatan yang tepat.
Paket
Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.
- Mode Fast
- Tarif standar Saat mode fast dipilih
- Mode Flex
- Tarif standar Saat mode flex dipilih
- Upaya penalaran maksimum
- Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default
- Upaya penalaran · high
- Tarif standar Saat upaya penalaran bernilai high
- Upaya penalaran · low
- Tarif standar Saat upaya penalaran bernilai low
- Upaya penalaran · medium
- Tarif standar Saat upaya penalaran bernilai medium
- Harga cache eksplisit
- Tidak diaktifkan Saat cache eksplisit diminta
- Keluaran penalaran
- Penalaran menggunakan tarif subset yang tercantum sebagai bagian dari total keluaran; jangan tambahkan token tersebut dua kali. Ketika keluaran mencakup token penalaran
Tarif Ailoot
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
|---|---|---|---|---|
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token Keluaran · Token penalaran keluaran $0.024 / 1K token |
| KonfigurasiPanjang permintaan · tingkat 1 | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasuk200.000 | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiPanjang permintaan · tingkat 2 | Jadwal tarif— | Token konteks, lebih dari200.000 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.008 / 1K token Keluaran · Token keluaran $0.036 / 1K token Masukan · Pembacaan cache $0.0008 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Contoh permintaan
Ailoot Ultra · OpenAI Chat
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.1-pro-preview", "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.1-pro-preview',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.1-pro-preview',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_completion()
save_result(final.to_dict(mode="json"),"stream-result")
Terima dan simpan hasil
Ailoot Ultra · OpenAI Chat
json atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.
Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.
Jika respons asli perlu diperiksa
Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomchoices[].index | Jenisinteger |
Kolomchoices[].message.content | Jenisstring|null |
Kolomchoices[].message.tool_calls | Jenistool_call[] |
Kolomchoices[].message.reasoning_content | Jenisstring |
Kolomchoices[].message.reasoning_details | Jenisobject|array |
Kolomchoices[].finish_reason | Jenisstring|null |
Kolomusage | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Alias
Alias model
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias jalur metode
/chat/completions
ID pemanggil terkait
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.1-pro-preview
google/gemini-3.1-pro-previewgemini-3.1-pro-previewgoogle/gemini-3.1-pro-preview
Mulai
Gemini 3.1 Pro Preview adalah model penalaran multimodal Google untuk tugas perangkat lunak, algoritma, dan pengetahuan yang kompleks. Model ini menerima teks, gambar, audio, video, dan PDF serta menghasilkan teks atau kode, dengan alat dan keluaran terstruktur. Tingkat penalaran Low, medium, dan high memandu upaya; high merupakan bawaan yang didokumentasikan.
- Masukan yang diterima
- Teks
- Hasil
- json · sse
Tersedia di Ailoot · masukan & metode
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Masukan
text- Keluaran
json,sse- Format keluaran
- JSON atau SSE
| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
|---|---|---|---|---|
Kolommodel | Jenisstring | PersyaratanWajib | Nilai & batasan google/gemini-3.1-pro-preview | Bawaan— |
Kolommessages | Jenismessage[] | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolommessages[].role | Jenisstring | PersyaratanWajib | Nilai & batasan user, assistant | Bawaan— |
Kolommessages[].content | Jenisstring | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolommax_tokens | Jenisinteger | PersyaratanWajib | Nilai & batasan | Bawaan— |
Kolomstream | Jenisboolean | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
Kombinasi bahan masukan
Teks · Teks UTF-8
string messages[].content
Parameter metode dan siklus hidup
| Parameter | Kontrak |
|---|---|
Parametercontent_type | Kontrakapplication/json |
Parameterrequired | Kontrakmodel, messages, max_tokens |
Parameteroptional_controls | Kontrakstream |
Parametermaterial_types | Kontraktext |
Parametertext_file_material | KontrakBaca dokumen UTF-8 yang sebenarnya dan masukkan teksnya ke string masukan atau konten pesan yang ditunjukkan. |
Siklus hidup: synchronous_or_streamed
Paket
Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.
- Mode Fast
- Tarif standar Saat mode fast dipilih
- Mode Flex
- Tarif standar Saat mode flex dipilih
- Upaya penalaran maksimum
- Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default
- Upaya penalaran · high
- Tarif standar Saat upaya penalaran bernilai high
- Upaya penalaran · low
- Tarif standar Saat upaya penalaran bernilai low
- Upaya penalaran · medium
- Tarif standar Saat upaya penalaran bernilai medium
- Harga cache eksplisit
- Tidak diaktifkan Saat cache eksplisit diminta
- Keluaran penalaran
- Penalaran menggunakan tarif subset yang tercantum sebagai bagian dari total keluaran; jangan tambahkan token tersebut dua kali. Ketika keluaran mencakup token penalaran
Tarif Ailoot
Harga menurut konfigurasi
Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.
| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
|---|---|---|---|---|
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token Keluaran · Token penalaran keluaran $0.024 / 1K token |
| KonfigurasiPanjang permintaan · tingkat 1 | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasuk200.000 | Biaya Masukan · Token masukan $0.004 / 1K token Keluaran · Token keluaran $0.024 / 1K token Masukan · Pembacaan cache $0.0004 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
| KonfigurasiPanjang permintaan · tingkat 2 | Jadwal tarif— | Token konteks, lebih dari200.000 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan $0.008 / 1K token Keluaran · Token keluaran $0.036 / 1K token Masukan · Pembacaan cache $0.0008 / 1K token Masukan · Penulisan cache $0.00075 / 1K token Masukan · Penulisan cache, 1 jam — / 1K token |
Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. Cara kerja cadangan dan penyelesaian tagihan →
Contoh permintaan
Ailoot Ultra · Anthropic Messages
{
"model": "google/gemini-3.1-pro-preview",
"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.1-pro-preview', '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.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Terima dan simpan hasil
Ailoot Ultra · Anthropic Messages
JSON atau SSE
Simpan semua hasil yang selesai
Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.
Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.
Jika respons asli perlu diperiksa
Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.
Kolom respons
| Kolom | Jenis |
|---|---|
Kolomid | Jenisstring |
Kolommodel | Jenisstring |
Kolomcontent[] | Jenistext|thinking|tool_use|other content block |
Kolomstop_reason | Jenisstring|null |
Kolomusage | Jenisobject |
Kesalahan dan langkah berikutnya
| Respons | Kondisi | Langkah berikutnya |
|---|---|---|
Respons400 · invalid_request_error | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |
Alias
Alias model
Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview~google/gemini-pro-latest
Alias jalur metode
/chat/completions
ID pemanggil terkait
google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview
FAQ · Google: Gemini 3.1 Pro Preview
- Input dan hasil apa yang tersedia?
POST /v1/messages·gemini-3.1-pro-preview:text,image→textPOST /v1beta/models/{model}:generateContent·gemini-3.1-pro-preview:text,image→textPOST /v1/chat/completions·gemini-3.1-pro-preview:text→textPOST /v1/messages·gemini-3.1-pro-preview:text→json,ssePOST /v1/chat/completions·google/gemini-3.1-pro-preview:text→textPOST /v1/messages·google/gemini-3.1-pro-preview:text→json,sse- Kolom apa yang digunakan permintaan?
POST /v1/messages·gemini-3.1-pro-preview:model,messages,system,max_tokens,stream,metadataPOST /v1beta/models/{model}:generateContent·gemini-3.1-pro-preview:contents,systemInstruction,sessionIdPOST /v1/chat/completions·gemini-3.1-pro-preview:model,messages,streamPOST /v1/messages·gemini-3.1-pro-preview:model,messages,max_tokens,streamPOST /v1/chat/completions·google/gemini-3.1-pro-preview:model,messages,stream,modalities,providerPOST /v1/messages·google/gemini-3.1-pro-preview:model,messages,max_tokens,stream- Batasan apa yang berlaku?
POST /v1/messages·gemini-3.1-pro-preview:ctx:1048576;max_out:65536;messages.min_items:1;max_tokens.minimum:1POST /v1beta/models/{model}:generateContent·gemini-3.1-pro-preview:ctx:1048576;max_out:65536;contents.min_items:1POST /v1/chat/completions·gemini-3.1-pro-preview:messages.min_items:1POST /v1/chat/completions·google/gemini-3.1-pro-preview:messages.min_items:1