Gemini 3.6 Flash Low
Multimodálny model Googlu na programovanie, priestorovú analýzu a rýchle cykly práce s nástrojmi.
- Ailoot · Anthropic Messages
POST /v1/messagesgemini-3.6-flash-low - Ailoot · Gemini generateContent
POST /v1beta/models/{model}:generateContentgemini-3.6-flash-low
O modeli
Tento opis pokrýva možnosti modelu. Dostupné vstupy, výstupy a voľby v Ailoot sú uvedené nižšie pre vybranú metódu.
Gemini 3.6 Flash je navrhnutá na praktické úlohy, v ktorých sa uvažovanie spája s opakovanými činnosťami. Google vyzdvihuje generovanie kódu, priestorovú analýzu a rýchle vývojové cykly s viacerými iteráciami. Model vychádza z Gemini 3.5 Flash.
Google opisuje podporu textu, obrázkov, videa, audia a PDF na vstupe. V aktuálnom katalógu Ailoot API sú pre textové metódy deklarované text a obrázky na vstupe a text na výstupe. Video, audio a PDF do tohto súboru vstupov nepatria. Pre odovzdané materiály je dostupných až 1 048 576 tokenov, pre textovú odpoveď až 65 536 tokenov. Obrázky a video sa používajú na porozumenie kontextu; vlastný obrázok, video ani hlasový výstup nie sú výstupom tejto verzie.
Cykly analýzy a činnosti
Model podporuje Thinking, štruktúrované odpovede, volania funkcií, vykonávanie kódu a ukladanie kontextu do vyrovnávacej pamäte. V režime základného modelu opísanom Googlom je predvolená úroveň medium; dostupné sú minimal, low, medium, high. Tieto hodnoty opisujú základný model Googlu; režim a dostupnosť ovládania cez Ailoot API určuje zvolená metóda a variant modelu. To umožňuje zapojiť ho do pracovného cyklu, kde sa materiál najprv analyzuje, potom spracuje nástrojom a výsledok sa použije v ďalšom kroku. Výrobca medzi vhodné scenáre zaraďuje programovanie, zložité uvažovanie nad videom a pracovné procesy organizácií.
K dispozícii sú tiež vyhľadávanie v súboroch, podloženie odpovedí vyhľadávaním, Google Maps a využitie obsahu odovzdaných webových adries. Dávkové spracovanie slúži na skupinu úloh. Ovládanie počítačového rozhrania má predbežný status; samotná podpora tejto možnosti v modeli neznamená jej dostupnosť cez každú metódu volania.
Čo zohľadniť pri dlhej práci
Vstavané znalosti majú výrobcom uvedenú hranicu v marci 2026. V jednotlivých oblastiach však môžu informácie zostať na úrovni januára 2025. Odovzdaný materiál a nástroje s aktuálnymi údajmi rozširujú obsah konkrétnej požiadavky, ale nemenia túto hranicu vstavaných znalostí.
Google uvádza možnosť vymyslených informácií, občasných spomalení a prekročení časového limitu. Podľa výrobcu je model zameraný na rýchle pracovné iterácie, konkrétne trvanie odpovede však závisí od vykonávanej úlohy. Veľký kontext znamená prípustný objem materiálov, nie záruku bezchybného spracovania každého fragmentu.
Verzia gemini-3.6-flash má stabilný status a bola vydaná v júli 2026. Jej profilom je textový výsledok po multimodálnej analýze a použití podporovaných nástrojov.
Praktická úloha
Praktická úloha
Technický príklad v angličtine
Correct a queue badge counter
Fix this JavaScript counter: const waiting = jobs.filter(j => j.status !== 'done').length. The badge should count only queued jobs; running and failed jobs must be excluded. Provide the revised expression and test fixtures containing queued, running, failed and done jobs, plus an empty list. Do not claim that tests ran.Očakávaný výsledok
A corrected queued-only expression and small test cases with expected badge counts.Overenie výsledku
Only status queued contributes to the count; an empty list produces zero.Ailoot · Anthropic Messages POST /v1/messages gemini-3.6-flash-low
gemini-3.6-flash-lowÚvod
Multimodálny model Googlu na programovanie, priestorovú analýzu a rýchle cykly práce s nástrojmi.
- Povolené vstupy
- Text · Obrázky
- Výsledky
- Text
Dostupné v Ailoot · vstupy a metódy
Ailoot · Anthropic Messages POST /v1/messages
- Vstup
text,image- Výstup
text- Kontext
- 1 048 576 tokens
- Maximálny výstup
- 65 536 tokens
- Výstupný formát
- json alebo SSE
| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
|---|---|---|---|---|
Polemodel | Typstring | PožiadavkaPovinné | Hodnoty a limity gemini-3.6-flash-low | Predvolené— |
Polemessages | Typmessage[] | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
Polemessages[].role | Typstring | PožiadavkaPovinné | Hodnoty a limity user, assistant | Predvolené— |
Polemessages[].content | Typstring|content_block[] | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
Polesystem | Typstring|content_block[] | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
Polemax_tokens | Typinteger | PožiadavkaPovinné | Hodnoty a limity Minimum: 1 Limit sa vzťahuje na: presná horná hranica zvoleného modelu/karty | Predvolené— |
Polestream | Typboolean | PožiadavkaVoliteľné | Hodnoty a limity | Predvolenéfalse |
Poletemperature | Typnumber | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Poletop_p | Typnumber | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Polestop_sequences | Typstring[] | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Poletools | Typtool[] | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Poletools[].name | Typstring | PožiadavkaVoliteľné | Hodnoty a limity Platí, keď: poskytnutý nástroj | Predvolené— |
Poletools[].description | Typstring | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
Poletools[].input_schema | TypJSON_schema | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
Poletool_choice | Typobject | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Polethinking.type | Typstring | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Polethinking.budget_tokens | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Poleoutput_config.effort | Typstring | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Polemetadata | Typobject | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
Polecache_control | Typobject | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Kombinácie vstupných podkladov
Text · Text UTF8
messages[].content alebo blok type=text
Text + obrázok
{type:image,source:{type:base64,media_type,data}} alebo zdroj s type=url
Parametre a životný cyklus metódy
| Parameter | Špecifikácia |
|---|---|
Parametermaterial_types | Špecifikáciatext, image |
Parameterrequired | Špecifikáciamodel, messages, max_tokens |
Parameteroptional_controls | Špecifikácianull |
Parametercontent_type | Špecifikáciaapplication/json |
Parametertext_file_material | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |
Životný cyklus: exact retained published method
Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.
Cenník
Sadzby metód Ailoot
POST /v1/messages- Vstup
- 0,00075 USD / 1K
- Výstup
- 0,00375 USD / 1K
- Čítanie cache
- 0,000075 USD / 1K
Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →
Príklady požiadaviek
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.6-flash-low", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.6-flash-low", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
model="gemini-3.6-flash-low",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
model: "gemini-3.6-flash-low",
max_tokens: 1024,
messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(msg);
import anthropic,os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.messages.stream(model='gemini-3.6-flash-low',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")
Prijať a uložiť výsledky
Ailoot · Anthropic Messages
json alebo SSE
Uchovať všetky dokončené výsledky
Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.
Zachovajte všetky bloky obsahu, podpisy uvažovania a skutočné ID volaní nástrojov. Zostavte všetky čiastkové zmeny blokov SSE; prvý textový blok nie je celý výstup.
Ak treba overiť pôvodnú odpoveď
Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.
Polia odpovede
| Pole | Typ |
|---|---|
Poleid | Typstring |
Polemodel | Typstring |
Polecontent[] | Typtext|thinking|tool_use|other content block |
Polestop_reason | Typstring|null |
Poleusage | Typobject |
Chyby a ďalšie kroky
| Odpoveď | Podmienka | Ďalší krok |
|---|---|---|
Odpoveď400 · invalid_request_error | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |
Aliasy
Aliasy modelov
Ailoot gemini-3.6-flash-low
Aliasy ciest metód
Použite cesty metód uvedené vyššie.
Súvisiace ID na volanie
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.6-flash-low
gemini-3.6-flash-lowÚvod
Multimodálny model Googlu na programovanie, priestorovú analýzu a rýchle cykly práce s nástrojmi.
- Povolené vstupy
- Text · Obrázky
- Výsledky
- Text
Dostupné v Ailoot · vstupy a metódy
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
- Vstup
text,image- Výstup
text- Výstupný formát
- json alebo podporované streamovanie
| Pole | Typ | Požiadavka | Hodnoty a limity | Predvolené |
|---|---|---|---|---|
Polepath.model | Typstring | PožiadavkaPovinné | Hodnoty a limity gemini-3.6-flash-low | Predvolené— |
Polecontents | Typcontent[] | PožiadavkaPovinné | Hodnoty a limity Minimálny počet položiek: 1 | Predvolené— |
Polecontents[].role | Typstring | PožiadavkaVoliteľné | Hodnoty a limity user, model | Predvolené— |
Polecontents[].parts | Typpart[] | PožiadavkaPovinné | Hodnoty a limity | Predvolené— |
PolesystemInstruction | Typcontent | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
PolegenerationConfig.maxOutputTokens | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Minimum: 1 Závisí od modelu | Predvolené— |
PolegenerationConfig.temperature | Typnumber | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
PolegenerationConfig.topP | Typnumber | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
PolegenerationConfig.topK | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
PolegenerationConfig.stopSequences | Typstring[] | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
PolegenerationConfig.thinkingConfig.includeThoughts | Typboolean | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
PolegenerationConfig.thinkingConfig.thinkingBudget | Typinteger | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
Poletools[].functionDeclarations | Typfunction_declaration[] | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
PoletoolConfig.functionCallingConfig.mode | Typstring | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
PolesafetySettings | Typobject[] | PožiadavkaVoliteľné | Hodnoty a limity Závisí od modelu | Predvolené— |
PolesessionId | Typstring | PožiadavkaVoliteľné | Hodnoty a limity | Predvolené— |
Kombinácie vstupných podkladov
Text · Text UTF8
contents[].parts[].text
Text + obrázok
parts[].inlineData={mimeType,data}
Parametre a životný cyklus metódy
| Parameter | Špecifikácia |
|---|---|
Parametermaterial_types | Špecifikáciatext, image |
Parameterrequired | Špecifikáciacontents |
Parameteroptional_controls | Špecifikácianull |
Parametercontent_type | Špecifikáciaapplication/json |
Parametertext_file_material | Špecifikáciaskutočný obsah UTF-8 vložený ako text; ID súborov a URLs potrebujú samostatnú presne určenú podporu |
Životný cyklus: exact retained published method
Štruktúry metód a ID sú presné; možnosti dodávateľa sa posudzujú oddelene od prijatia požiadavky.
Cenník
Sadzby metód Ailoot
POST /v1beta/models/{model}:generateContent- Vstup
- 0,00075 USD / 1K
- Výstup
- 0,00375 USD / 1K
- Čítanie cache
- 0,000075 USD / 1K
Ailoot pred požiadavkou rezervuje odhadovanú sumu. Po získaní výsledku vyúčtuje konečný poplatok podľa nameraného využitia. Pri streamovaní sa vyúčtovanie riadi konečným záznamom využitia. Ako funguje rezervácia a vyúčtovanie →
Príklady požiadaviek
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.6-flash-low:generateContent \
-H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": [{"role": "user", "parts": [{"text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["contents"][0]["parts"].append({"inlineData":{"mimeType":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-3.6-flash-low:generateContent \
-H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from google import genai
from google.genai import types
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = genai.Client(
api_key=os.environ["AILOOT_API_KEY"],
http_options=types.HttpOptions(base_url="https://api.ailoot.ai"),
)
resp = client.models.generate_content(model="gemini-3.6-flash-low", contents="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(resp.to_json_dict())
import { GoogleGenAI } from "@google/genai";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const ai = new GoogleGenAI({ apiKey: process.env.AILOOT_API_KEY, httpOptions: { baseUrl: "https://api.ailoot.ai" } });
const resp = await ai.models.generateContent({ model: "gemini-3.6-flash-low", contents: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(resp);
from google import genai
from google.genai import types
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=genai.Client(api_key=os.environ["AILOOT_API_KEY"],http_options=types.HttpOptions(base_url="https://api.ailoot.ai"))
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
count=0
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for chunk in client.models.generate_content_stream(model='gemini-3.6-flash-low',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
Prijať a uložiť výsledky
Ailoot · Gemini generateContent
json alebo podporované streamovanie
Uchovať všetky dokončené výsledky
Uložte každú úplnú vrátenú odpoveď, súbor a časť obsahu.
Zachovajte všetkých kandidátov a časti vrátane volaní funkcií, podpisov uvažovania a údajov o spotrebe; časti prúdu zostavujte v správnom poradí.
Ak treba overiť pôvodnú odpoveď
Zachovajte ID požiadaviek/odpovedí aj hlavičky. Všeobecná URL na načítanie textovej úlohy nie je poskytnutá.
Polia odpovede
| Pole | Typ |
|---|---|
PoleresponseId | Typstring |
PolemodelVersion | Typstring |
Polecandidates[].content.parts[] | Typtext|inlineData|functionCall|other part |
Polecandidates[].finishReason | Typstring |
PoleusageMetadata | Typobject |
Chyby a ďalšie kroky
| Odpoveď | Podmienka | Ďalší krok |
|---|---|---|
Odpoveď400 · invalid_request_error | PodmienkaNeplatné povinné polia, reprezentácia materiálu alebo hodnota parametra | Ďalší krokPred novou požiadavkou na vytvorenie opravte uvedené polia. |
Aliasy
Aliasy modelov
Ailoot gemini-3.6-flash-low
Aliasy ciest metód
Použite cesty metód uvedené vyššie.
Súvisiace ID na volanie
FAQ · Gemini 3.6 Flash Low
- Aké vstupy a výsledky sú dostupné?
POST /v1/messages·gemini-3.6-flash-low:text,image→textPOST /v1beta/models/{model}:generateContent·gemini-3.6-flash-low:text,image→text- Aké polia používa požiadavka?
POST /v1/messages·gemini-3.6-flash-low:model,messages,system,max_tokens,stream,metadataPOST /v1beta/models/{model}:generateContent·gemini-3.6-flash-low:contents,systemInstruction,sessionId- Aké limity platia?
POST /v1/messages·gemini-3.6-flash-low:ctx:1048576;max_out:65536;messages.min_items:1;max_tokens.minimum:1POST /v1beta/models/{model}:generateContent·gemini-3.6-flash-low:contents.min_items:1