Gemini 3.1 Pro High
Multimodální model Google pro složité programátorské úlohy, analýzu rozsáhlých materiálů a přesnou vícekrokovou práci s nástroji.
- Ailoot · Anthropic Messages
POST /v1/messagesgemini-3.1-pro-high - Ailoot · Gemini generateContent
POST /v1beta/models/{model}:generateContentgemini-3.1-pro-high
O modelu
Tento popis zahrnuje schopnosti modelu. Vstupy, výstupy a možnosti dostupné v Ailoot jsou uvedeny níže pro vybranou metodu.
Gemini 3.1 Pro Preview je určen pro práci se složitým materiálem a úlohami vyžadujícími několik navazujících rozhodnutí. Google zdůrazňuje softwarové inženýrství, využívání nástrojů a konzistenci faktických odpovědí. Model pomáhá rozebírat rozsáhlé datové soubory, celé softwarové repozitáře a úlohy, v nichž je text propojen s vizuálními nebo zvukovými materiály.
Kterým materiálům model rozumí
Charakteristiky Google uvádějí text, obrázky, video, zvuk a PDF. V aktuálním katalogu Ailoot API jsou pro textové metody deklarovány text a obrázky na vstupu a text na výstupu. Video, zvuk ani PDF nejsou do této sady vstupů zahrnuty. Dlouhý kontext pojme až 1 048 576 vstupních tokenů, textová odpověď až 65 536 výstupních tokenů. Porozumění obrázkům a zvuku neznamená jejich generování: výstup této verze zůstává textový.
Uvažování a postupná práce
Thinking umožňuje vyhradit další úsilí pro vnitřní uvažování. V režimu základního modelu popsaném Google je standardní úroveň high; dostupné jsou low, medium a high. Tyto hodnoty popisují základní model Google; režim a dostupnost řízení prostřednictvím Ailoot API závisejí na zvolené metodě a variantě modelu. Hlavní scénáře zahrnují složité programování, vývoj algoritmů, strategické plánování a postupné zlepšování řešení. To je zvlášť užitečné, pokud je potřeba zohlednit několik vzájemně propojených požadavků a vracet se k průběžným výsledkům.
Schopnosti modelu zahrnují volání funkcí, provádění kódu a strukturované odpovědi. Podporovány jsou ukládání kontextu do mezipaměti, podložení vyhledáváním, Google Maps a využívání obsahu webových adres; k dispozici je dávkové zpracování. Tato nabídka umožňuje sestavit proces, v němž model analyzuje data, volí následující nástroj a vytváří výsledek. Skutečná dostupnost každého nástroje závisí na metodě práce s modelem.
Verze a vlastnosti
Karta se vztahuje na předběžnou verzi gemini-3.1-pro-preview. Jejím základem je Gemini 3 Pro. Výrobce samostatně označuje variantu gemini-3.1-pro-preview-customtools, zaměřenou na procesy s příkazovým shellem a uživatelskými nástroji. Její priority při volbě nástrojů a vlastnosti chování nejsou vlastnostmi běžné verze Preview.
U modelu přetrvávají obecná omezení základní řady: odpovědi mohou obsahovat smyšlené informace a jednotlivé požadavky se mohou provádět pomalu nebo skončit překročením časového limitu. Vícekrokové uvažování, velký kontext a přístup k datům pomáhají pracovat se složitou úlohou, ale nedělají z každého vygenerovaného závěru ověřený fakt.
Praktická úloha
Praktická úloha
Technický příklad v angličtině
Plan a dependency-constrained move
A lab move has these constraints: archive samples before unplugging the freezer; test the backup freezer before moving samples; restore temperature monitoring before accepting new samples. Staff propose unplugging first to save time. Produce an ordered checklist, flag the unsafe proposed step and specify evidence needed before accepting new samples. Use only the supplied constraints.Očekávaný výsledek
An ordered checklist, one identified conflict and an acceptance-evidence item.Ověření výsledku
The checklist must place backup testing and sample protection before unplugging and monitoring before intake.Ailoot · Anthropic Messages POST /v1/messages gemini-3.1-pro-high
gemini-3.1-pro-highÚvod
Multimodální model Google pro složité programátorské úlohy, analýzu rozsáhlých materiálů a přesnou vícekrokovou práci s nástroji.
- Přijímané vstupy
- Text · Obrázky
- Výsledky
- Text
Dostupné v Ailoot · vstupy a metody
Ailoot · Anthropic Messages POST /v1/messages
- Vstup
text,image- Výstup
text- Kontext
- 1 048 576 tokens
- Maximální výstup
- 65 536 tokens
- Výstupní formát
- json nebo SSE
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polemodel | Typstring | PožadavekPovinné | Hodnoty a limity gemini-3.1-pro-high | Výchozí— |
Polemessages | Typmessage[] | PožadavekPovinné | Hodnoty a limity Minimální počet položek: 1 | Výchozí— |
Polemessages[].role | Typstring | PožadavekPovinné | Hodnoty a limity user, assistant | Výchozí— |
Polemessages[].content | Typstring|content_block[] | PožadavekPovinné | Hodnoty a limity | Výchozí— |
Polesystem | Typstring|content_block[] | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Polemax_tokens | Typinteger | PožadavekPovinné | Hodnoty a limity Minimum: 1 Limit platí pro: přesný limit vybraného modelu/karty | Výchozí— |
Polestream | Typboolean | PožadavekVolitelné | Hodnoty a limity | Výchozífalse |
Poletemperature | Typnumber | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poletop_p | Typnumber | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polestop_sequences | Typstring[] | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poletools | Typtool[] | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poletools[].name | Typstring | PožadavekVolitelné | Hodnoty a limity Platí, když: nástroj je dodán | Výchozí— |
Poletools[].description | Typstring | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Poletools[].input_schema | TypJSON_schema | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Poletool_choice | Typobject | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polethinking.type | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polethinking.budget_tokens | Typinteger | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poleoutput_config.effort | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Polemetadata | Typobject | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Polecache_control | Typobject | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Kombinace vstupních materiálů
Text · text UTF8
messages[].content nebo blok type=text
Text + obrázek
{type:image,source:{type:base64,media_type,data}} nebo zdroj type=url
Parametry a životní cyklus metody
| Parametr | Kontrakt |
|---|---|
Parametrmaterial_types | Kontrakttext, image |
Parametrrequired | Kontraktmodel, messages, max_tokens |
Parametroptional_controls | Kontraktnull |
Parametrcontent_type | Kontraktapplication/json |
Parametrtext_file_material | Kontraktskutečný obsah UTF-8 vložený jako text; ID/URLs souborů vyžadují samostatnou přesně vymezenou podporu |
Životní cyklus: exact retained published method
Struktury metod a ID jsou přesné; schopnosti dodavatele jsou oddělené od připuštění požadavku.
Tarify
Sazby metod Ailoot
POST /v1/messages- Vstup
- 0,002 US$ / 1K
- Výstup
- 0,012 US$ / 1K
- Čtení z mezipaměti
- 0,0002 US$ / 1K
Ceny podle délky požadavku · Anthropic Messages
| Velikost požadavku v tokenech | Vstup | Výstup | Čtení z mezipaměti | Zápis do mezipaměti | Mezipaměť 5 min | Mezipaměť 1 hodina |
|---|---|---|---|---|---|---|
| Velikost požadavku v tokenech(0; 200 000] | Vstup0,002 US$ | Výstup0,012 US$ | Čtení z mezipaměti0,0002 US$ | Zápis do mezipamětiZákladní: — | Mezipaměť 5 minZákladní: — | Mezipaměť 1 hodinaZákladní: — |
| Velikost požadavku v tokenech(200 000; ∞) | Vstup0,004 US$ | Výstup0,018 US$ | Čtení z mezipaměti0,0004 US$ | Zápis do mezipamětiZákladní: — | Mezipaměť 5 minZákladní: — | Mezipaměť 1 hodinaZákladní: — |
Sazby v USD za 1K tokenů. Není-li sazba nastavena, použije se zděděná základní sazba této metody; «—» znamená, že základní sazba není nastavena.
Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →
Příklady požadavků
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-high", "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-high", "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-high",
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-high",
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-high',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")
Přijímání a ukládání výsledků
Ailoot · Anthropic Messages
json nebo SSE
Uchovejte všechny dokončené výsledky
Uchovejte každou úplnou vrácenou odpověď, soubor i část obsahu.
Zachovejte všechny bloky obsahu, podpisy uvažování a skutečná ID použití nástrojů. Sestavte všechny přírůstky bloků SSE; první textový blok není úplný výstup.
Pokud je nutné ověřit původní odpověď
Zachovejte ID požadavků/odpovědí a hlavičky. Není dodána obecná URL pro načtení textové úlohy.
Pole odpovědi
| Pole | Typ |
|---|---|
Poleid | Typstring |
Polemodel | Typstring |
Polecontent[] | Typtext|thinking|tool_use|other content block |
Polestop_reason | Typstring|null |
Poleusage | Typobject |
Chyby a další kroky
| Odpověď | Podmínka | Další krok |
|---|---|---|
Odpověď400 · invalid_request_error | PodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametru | Další krokPřed novým požadavkem na vytvoření opravte uvedená pole. |
Aliasy
Aliasy modelu
Ailoot gemini-3.1-pro-high
Aliasy cest metod
Použijte cesty metod uvedené výše.
Související ID modelů
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.1-pro-high
gemini-3.1-pro-highÚvod
Multimodální model Google pro složité programátorské úlohy, analýzu rozsáhlých materiálů a přesnou vícekrokovou práci s nástroji.
- Přijímané vstupy
- Text · Obrázky
- Výsledky
- Text
Dostupné v Ailoot · vstupy a metody
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
- Vstup
text,image- Výstup
text- Kontext
- 1 048 576 tokens
- Maximální výstup
- 65 536 tokens
- Výstupní formát
- json nebo podporované streamování
| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
|---|---|---|---|---|
Polepath.model | Typstring | PožadavekPovinné | Hodnoty a limity gemini-3.1-pro-high | Výchozí— |
Polecontents | Typcontent[] | PožadavekPovinné | Hodnoty a limity Minimální počet položek: 1 | Výchozí— |
Polecontents[].role | Typstring | PožadavekVolitelné | Hodnoty a limity user, model | Výchozí— |
Polecontents[].parts | Typpart[] | PožadavekPovinné | Hodnoty a limity | Výchozí— |
PolesystemInstruction | Typcontent | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
PolegenerationConfig.maxOutputTokens | Typinteger | PožadavekVolitelné | Hodnoty a limity Minimum: 1 Závisí na modelu | Výchozí— |
PolegenerationConfig.temperature | Typnumber | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
PolegenerationConfig.topP | Typnumber | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
PolegenerationConfig.topK | Typinteger | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
PolegenerationConfig.stopSequences | Typstring[] | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
PolegenerationConfig.thinkingConfig.includeThoughts | Typboolean | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
PolegenerationConfig.thinkingConfig.thinkingBudget | Typinteger | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
Poletools[].functionDeclarations | Typfunction_declaration[] | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
PoletoolConfig.functionCallingConfig.mode | Typstring | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
PolesafetySettings | Typobject[] | PožadavekVolitelné | Hodnoty a limity Závisí na modelu | Výchozí— |
PolesessionId | Typstring | PožadavekVolitelné | Hodnoty a limity | Výchozí— |
Kombinace vstupních materiálů
Text · text UTF8
contents[].parts[].text
Text + obrázek
parts[].inlineData={mimeType,data}
Parametry a životní cyklus metody
| Parametr | Kontrakt |
|---|---|
Parametrmaterial_types | Kontrakttext, image |
Parametrrequired | Kontraktcontents |
Parametroptional_controls | Kontraktnull |
Parametrcontent_type | Kontraktapplication/json |
Parametrtext_file_material | Kontraktskutečný obsah UTF-8 vložený jako text; ID/URLs souborů vyžadují samostatnou přesně vymezenou podporu |
Životní cyklus: exact retained published method
Struktury metod a ID jsou přesné; schopnosti dodavatele jsou oddělené od připuštění požadavku.
Tarify
Sazby metod Ailoot
POST /v1beta/models/{model}:generateContent- Vstup
- 0,002 US$ / 1K
- Výstup
- 0,012 US$ / 1K
- Čtení z mezipaměti
- 0,0002 US$ / 1K
Ceny podle délky požadavku · Gemini generateContent
| Velikost požadavku v tokenech | Vstup | Výstup | Čtení z mezipaměti | Zápis do mezipaměti | Mezipaměť 5 min | Mezipaměť 1 hodina |
|---|---|---|---|---|---|---|
| Velikost požadavku v tokenech(0; 200 000] | Vstup0,002 US$ | Výstup0,012 US$ | Čtení z mezipaměti0,0002 US$ | Zápis do mezipamětiZákladní: — | Mezipaměť 5 minZákladní: — | Mezipaměť 1 hodinaZákladní: — |
| Velikost požadavku v tokenech(200 000; ∞) | Vstup0,004 US$ | Výstup0,018 US$ | Čtení z mezipaměti0,0004 US$ | Zápis do mezipamětiZákladní: — | Mezipaměť 5 minZákladní: — | Mezipaměť 1 hodinaZákladní: — |
Sazby v USD za 1K tokenů. Není-li sazba nastavena, použije se zděděná základní sazba této metody; «—» znamená, že základní sazba není nastavena.
Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. Jak funguje rezervace a vyúčtování →
Příklady požadavků
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-high: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-high: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-high", 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-high", 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-high',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
Přijímání a ukládání výsledků
Ailoot · Gemini generateContent
json nebo podporované streamování
Uchovejte všechny dokončené výsledky
Uchovejte každou úplnou vrácenou odpověď, soubor i část obsahu.
Zachovejte všechny kandidáty a části včetně volání funkcí, podpisů uvažování a údajů o využití; sestavujte části streamu v pořadí.
Pokud je nutné ověřit původní odpověď
Zachovejte ID požadavků/odpovědí a hlavičky. Není dodána obecná URL pro načtení textové úlohy.
Pole odpovědi
| Pole | Typ |
|---|---|
PoleresponseId | Typstring |
PolemodelVersion | Typstring |
Polecandidates[].content.parts[] | Typtext|inlineData|functionCall|other part |
Polecandidates[].finishReason | Typstring |
PoleusageMetadata | Typobject |
Chyby a další kroky
| Odpověď | Podmínka | Další krok |
|---|---|---|
Odpověď400 · invalid_request_error | PodmínkaNeplatná povinná pole, reprezentace podkladů nebo hodnota parametru | Další krokPřed novým požadavkem na vytvoření opravte uvedená pole. |
Aliasy
Aliasy modelu
Ailoot gemini-3.1-pro-high
Aliasy cest metod
Použijte cesty metod uvedené výše.
Související ID modelů
FAQ · Gemini 3.1 Pro High
- Jaké vstupy a výsledky jsou dostupné?
POST /v1/messages·gemini-3.1-pro-high:text,image→textPOST /v1beta/models/{model}:generateContent·gemini-3.1-pro-high:text,image→text- Jaká pole požadavek používá?
POST /v1/messages·gemini-3.1-pro-high:model,messages,system,max_tokens,stream,metadataPOST /v1beta/models/{model}:generateContent·gemini-3.1-pro-high:contents,systemInstruction,sessionId- Jaké limity platí?
POST /v1/messages·gemini-3.1-pro-high:ctx:1048576;max_out:65536;messages.min_items:1;max_tokens.minimum:1POST /v1beta/models/{model}:generateContent·gemini-3.1-pro-high:ctx:1048576;max_out:65536;contents.min_items:1