Gemini 3.8 Flash Tiered
Multimodalni model družbe Google za dolgotrajno programsko inženirstvo, samostojne agente in zahtevno delo z znanjem.
- Ailoot · Anthropic Messages
POST /v1/messagesgemini-3.8-flash-tiered - Ailoot · Gemini generateContent
POST /v1beta/models/{model}:generateContentgemini-3.8-flash-tiered
O modelu
Ta opis zajema zmožnosti modela. Vhodi, izhodi in možnosti, ki so na voljo v Ailoot, so spodaj navedeni za izbrano metodo.
Gemini 3.8 Flash je namenjen dolgotrajnim nalogam programskega inženirstva, agentskim procesom in zahtevnemu delu z znanjem. Google ga opisuje kot nadaljnji razvoj Gemini 3.7 Flash s poudarkom na procesih, pri katerih se rešitev ne konča z enim odgovorom: model se vrača k gradivu, uporablja orodja in nadaljuje zaporedje korakov.
Gradivo, ki ga je mogoče analizirati
Google navaja vhode besedilo, slike, video, zvok in PDF. V trenutnem katalogu Ailoot API sta za besedilne načine dostopa na vhodu navedena besedilo in slike, na izhodu pa besedilo. Video, zvok in PDF niso vključeni v ta nabor vhodov. Vhodna omejitev je 1 048 576 tokenov, izhodna pa 65 536 tokenov. Model oblikuje besedilni rezultat, vključno s programsko kodo in strukturiranimi podatki. Ustvarjanje slik in zvoka ne spada med zmožnosti te konkretne različice.
Sklepanje in orodja
Podprte so ravni Thinking low, medium in high. V načinu osnovnega modela, ki ga opisuje Google, je običajna raven medium. Te vrednosti opisujejo Googlov osnovni model; način in razpoložljivost upravljanja prek Ailoot API sta odvisna od izbranega načina dostopa in različice modela. Raven minimal ni podprta in povzroči napako. Nastavljiva intenzivnost pomaga izbrati način glede na zahtevnost stopnje, vendar model pri visoki intenzivnosti včasih porabi več tokenov za izvedbo naloge.
Nabor zmožnosti vključuje klice funkcij, izvajanje kode, strukturirane odgovore in predpomnjenje konteksta. Na voljo so iskanje po datotekah, utemeljevanje z iskanjem, Google Maps in branje vsebine spletnih naslovov. Podprta je paketna obdelava. Upravljanje računalniškega vmesnika ima predhodni status; vsakega načina dostopa do modela ne spremeni v polno upravljanje računalnika.
Namen in omejitve
Proizvajalec izpostavlja programsko inženirstvo, agentske naloge in zahtevne procese dela z informacijami. Dolg kontekst omogoča podajanje obsežnega gradiva, zmožnosti uporabe orodij pa organizacijo več povezanih stopenj. Te značilnosti opisujejo zmožnosti modela; konkretne možnosti in vhodne podatke določa podprti način klicanja.
Različica je bila kot stabilna objavljena septembra 2026. Navedena meja znanja je marec 2026, vendar lahko na posameznih področjih podatki ostajajo na ravni januarja 2025. Pojavijo se lahko izmišljena dejstva, zakasnitve in časovne prekoračitve. Večji obseg sklepanja ne izključuje napak, nizka intenzivnost pa ne obljublja določenega odzivnega časa.
Praktična naloga
Praktična naloga
Tehnični primer v angleščini
Refactor a shared discount rule
Three modules compute a discount independently. Cart uses subtotal >= 100; checkout uses subtotal > 100; invoice uses subtotal >= 100. The approved rule is 10% off at or above 100, with no stacking. Propose a shared implementation and rollout order, then specify tests for 99.99, 100 and repeated application. Preserve invoice history.Pričakovani rezultat
A refactoring proposal with one shared rule, per-module integration steps and boundary/idempotency test cases.Preverjanje rezultata
Check that exactly 100 qualifies, the discount is applied once and historical invoices are not recalculated.Ailoot · Anthropic Messages POST /v1/messages gemini-3.8-flash-tiered
gemini-3.8-flash-tieredZačetek
Multimodalni model družbe Google za dolgotrajno programsko inženirstvo, samostojne agente in zahtevno delo z znanjem.
- Dovoljeni vhodi
- Besedilo · Slike
- Rezultati
- Besedilo
Na voljo v Ailoot · vhodi in metode
Ailoot · Anthropic Messages POST /v1/messages
- Vhod
text,image- Izhod
text- Kontekst
- 1.048.576 tokens
- Največji izhod
- 65.536 tokens
- Izhodni format
- json ali SSE
| Polje | Vrsta | Zahteva | Vrednosti in omejitve | Privzeto |
|---|---|---|---|---|
Poljemodel | Vrstastring | ZahtevaObvezno | Vrednosti in omejitve gemini-3.8-flash-tiered | Privzeto— |
Poljemessages | Vrstamessage[] | ZahtevaObvezno | Vrednosti in omejitve Najmanjše število elementov: 1 | Privzeto— |
Poljemessages[].role | Vrstastring | ZahtevaObvezno | Vrednosti in omejitve user, assistant | Privzeto— |
Poljemessages[].content | Vrstastring|content_block[] | ZahtevaObvezno | Vrednosti in omejitve | Privzeto— |
Poljesystem | Vrstastring|content_block[] | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
Poljemax_tokens | Vrstainteger | ZahtevaObvezno | Vrednosti in omejitve Najmanj: 1 Omejitev velja za: natančna zgornja meja izbranega modela/kartice | Privzeto— |
Poljestream | Vrstaboolean | ZahtevaIzbirno | Vrednosti in omejitve | Privzetofalse |
Poljetemperature | Vrstanumber | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljetop_p | Vrstanumber | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljestop_sequences | Vrstastring[] | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljetools | Vrstatool[] | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljetools[].name | Vrstastring | ZahtevaIzbirno | Vrednosti in omejitve Velja, ko: podano je orodje | Privzeto— |
Poljetools[].description | Vrstastring | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
Poljetools[].input_schema | VrstaJSON_schema | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
Poljetool_choice | Vrstaobject | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljethinking.type | Vrstastring | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljethinking.budget_tokens | Vrstainteger | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljeoutput_config.effort | Vrstastring | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljemetadata | Vrstaobject | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
Poljecache_control | Vrstaobject | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Kombinacije vhodnih gradiv
Besedilo · Besedilo UTF8
messages[].content ali blok type=text
Besedilo + slika
{type:image,source:{type:base64,media_type,data}} ali vir vrste type=url
Parametri in življenjski cikel metode
| Parameter | Specifikacija |
|---|---|
Parametermaterial_types | Specifikacijatext, image |
Parameterrequired | Specifikacijamodel, messages, max_tokens |
Parameteroptional_controls | Specifikacijanull |
Parametercontent_type | Specifikacijaapplication/json |
Parametertext_file_material | Specifikacijadejanska vsebina UTF-8 je vstavljena kot besedilo; ID datotek in URLs potrebujejo ločeno, natančno določeno podporo |
Življenjski cikel: exact retained published method
Strukture metod in ID so natančno določeni; zmožnost ponudnika je ločena od sprejema zahteve.
Cenik
Cene metod Ailoot
POST /v1/messages- Vhod
- 0,00075 $ / 1K
- Izhod
- 0,00375 $ / 1K
- Branje predpomnilnika
- 0,000075 $ / 1K
Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. Kako delujeta rezervacija in obračun →
Primeri zahtev
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.8-flash-tiered", "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.8-flash-tiered", "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.8-flash-tiered",
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.8-flash-tiered",
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.8-flash-tiered',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")
Prejmi in shrani rezultate
Ailoot · Anthropic Messages
json ali SSE
Ohrani vse dokončane rezultate
Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.
Ohranite vse vsebinske bloke, podpise sklepanja in dejanske ID uporabe orodij. Sestavite vse delne spremembe blokov SSE; prvi besedilni blok ni celoten izhod.
Če je treba preveriti izvirni odgovor
Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.
Polja odgovora
| Polje | Vrsta |
|---|---|
Poljeid | Vrstastring |
Poljemodel | Vrstastring |
Poljecontent[] | Vrstatext|thinking|tool_use|other content block |
Poljestop_reason | Vrstastring|null |
Poljeusage | Vrstaobject |
Napake in naslednji koraki
| Odgovor | Pogoj | Naslednji korak |
|---|---|---|
Odgovor400 · invalid_request_error | PogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametra | Naslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja. |
Druga imena
Druga imena modelov
Ailoot gemini-3.8-flash-tiered
Druga imena poti metod
Uporabite zgoraj navedene poti metod.
Povezani ID-ji za klic
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.8-flash-tiered
gemini-3.8-flash-tieredZačetek
Multimodalni model družbe Google za dolgotrajno programsko inženirstvo, samostojne agente in zahtevno delo z znanjem.
- Dovoljeni vhodi
- Besedilo · Slike
- Rezultati
- Besedilo
Na voljo v Ailoot · vhodi in metode
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
- Vhod
text,image- Izhod
text- Kontekst
- 1.048.576 tokens
- Največji izhod
- 65.536 tokens
- Izhodni format
- json ali podprti pretočni izhod
| Polje | Vrsta | Zahteva | Vrednosti in omejitve | Privzeto |
|---|---|---|---|---|
Poljepath.model | Vrstastring | ZahtevaObvezno | Vrednosti in omejitve gemini-3.8-flash-tiered | Privzeto— |
Poljecontents | Vrstacontent[] | ZahtevaObvezno | Vrednosti in omejitve Najmanjše število elementov: 1 | Privzeto— |
Poljecontents[].role | Vrstastring | ZahtevaIzbirno | Vrednosti in omejitve user, model | Privzeto— |
Poljecontents[].parts | Vrstapart[] | ZahtevaObvezno | Vrednosti in omejitve | Privzeto— |
PoljesystemInstruction | Vrstacontent | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
PoljegenerationConfig.maxOutputTokens | Vrstainteger | ZahtevaIzbirno | Vrednosti in omejitve Najmanj: 1 Odvisno od modela | Privzeto— |
PoljegenerationConfig.temperature | Vrstanumber | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
PoljegenerationConfig.topP | Vrstanumber | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
PoljegenerationConfig.topK | Vrstainteger | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
PoljegenerationConfig.stopSequences | Vrstastring[] | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
PoljegenerationConfig.thinkingConfig.includeThoughts | Vrstaboolean | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
PoljegenerationConfig.thinkingConfig.thinkingBudget | Vrstainteger | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
Poljetools[].functionDeclarations | Vrstafunction_declaration[] | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
PoljetoolConfig.functionCallingConfig.mode | Vrstastring | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
PoljesafetySettings | Vrstaobject[] | ZahtevaIzbirno | Vrednosti in omejitve Odvisno od modela | Privzeto— |
PoljesessionId | Vrstastring | ZahtevaIzbirno | Vrednosti in omejitve | Privzeto— |
Kombinacije vhodnih gradiv
Besedilo · Besedilo UTF8
contents[].parts[].text
Besedilo + slika
parts[].inlineData={mimeType,data}
Parametri in življenjski cikel metode
| Parameter | Specifikacija |
|---|---|
Parametermaterial_types | Specifikacijatext, image |
Parameterrequired | Specifikacijacontents |
Parameteroptional_controls | Specifikacijanull |
Parametercontent_type | Specifikacijaapplication/json |
Parametertext_file_material | Specifikacijadejanska vsebina UTF-8 je vstavljena kot besedilo; ID datotek in URLs potrebujejo ločeno, natančno določeno podporo |
Življenjski cikel: exact retained published method
Strukture metod in ID so natančno določeni; zmožnost ponudnika je ločena od sprejema zahteve.
Cenik
Cene metod Ailoot
POST /v1beta/models/{model}:generateContent- Vhod
- 0,00075 $ / 1K
- Izhod
- 0,00375 $ / 1K
- Branje predpomnilnika
- 0,000075 $ / 1K
Ailoot pred zahtevo rezervira ocenjeni znesek. Po rezultatu obračuna končni strošek na podlagi izmerjene porabe. Obračun pretakanja uporablja končni zapis porabe. Kako delujeta rezervacija in obračun →
Primeri zahtev
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.8-flash-tiered: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.8-flash-tiered: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.8-flash-tiered", 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.8-flash-tiered", 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.8-flash-tiered',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
Prejmi in shrani rezultate
Ailoot · Gemini generateContent
json ali podprti pretočni izhod
Ohrani vse dokončane rezultate
Shranite vsak v celoti vrnjen odgovor, datoteko in del vsebine.
Ohranite vse kandidate in dele, vključno s klici funkcij, podpisi sklepanja in podatki o porabi; dele toka sestavite po vrsti.
Če je treba preveriti izvirni odgovor
Ohranite ID zahtev/odgovorov in glave. Splošni URL za pridobivanje besedilne naloge ni podan.
Polja odgovora
| Polje | Vrsta |
|---|---|
PoljeresponseId | Vrstastring |
PoljemodelVersion | Vrstastring |
Poljecandidates[].content.parts[] | Vrstatext|inlineData|functionCall|other part |
Poljecandidates[].finishReason | Vrstastring |
PoljeusageMetadata | Vrstaobject |
Napake in naslednji koraki
| Odgovor | Pogoj | Naslednji korak |
|---|---|---|
Odgovor400 · invalid_request_error | PogojNeveljavna obvezna polja, predstavitev gradiva ali vrednost parametra | Naslednji korakPred novo zahtevo za ustvarjanje popravite navedena polja. |
Druga imena
Druga imena modelov
Ailoot gemini-3.8-flash-tiered
Druga imena poti metod
Uporabite zgoraj navedene poti metod.
Povezani ID-ji za klic
FAQ · Gemini 3.8 Flash Tiered
- Kateri vhodi in rezultati so na voljo?
POST /v1/messages·gemini-3.8-flash-tiered:text,image→textPOST /v1beta/models/{model}:generateContent·gemini-3.8-flash-tiered:text,image→text- Katera polja uporablja zahteva?
POST /v1/messages·gemini-3.8-flash-tiered:model,messages,system,max_tokens,stream,metadataPOST /v1beta/models/{model}:generateContent·gemini-3.8-flash-tiered:contents,systemInstruction,sessionId- Katere omejitve veljajo?
POST /v1/messages·gemini-3.8-flash-tiered:ctx:1048576;max_out:65536;messages.min_items:1;max_tokens.minimum:1POST /v1beta/models/{model}:generateContent·gemini-3.8-flash-tiered:ctx:1048576;max_out:65536;contents.min_items:1