models

Gemini 3.8 Flash Medium

Markdown · JSON

Gemini 3.8 Flash Medium

Google multimodalinis modelis ilgai trunkančiai programinės įrangos inžinerijai, autonominiams agentams ir sudėtingam darbui su žiniomis.

Apie modelį

Šis aprašas apima modelio galimybes. Pasirinktam metodui Ailoot prieinamos įvestys, išvestys ir parinktys nurodytos toliau.

Gemini 3.8 Flash skirta ilgoms programinės įrangos inžinerijos užduotims, agentiniams procesams ir sudėtingam darbui su žiniomis. Google aprašo ją kaip Gemini 3.7 Flash plėtrą, pabrėždama procesus, kuriuose sprendimas nesibaigia vienu atsakymu: modelis grįžta prie medžiagos, naudoja įrankius ir tęsia žingsnių seką.

Medžiaga, kurią galima analizuoti

Google nurodo teksto, vaizdų, vaizdo įrašų, garso ir PDF įvestis. Dabartiniame Ailoot API kataloge tekstiniams metodams nurodyti tekstas ir vaizdai įvestyje ir tekstas išvestyje. Vaizdo įrašai, garsas ir PDF į šį įvesties rinkinį neįtraukti. Įvesties riba – 1 048 576 tokenai, išvesties – 65 536 tokenai. Ji pateikia tekstinį rezultatą, įskaitant programinį kodą ir struktūruotus duomenis. Vaizdų ir garso kūrimas nepriklauso šios konkrečios versijos galimybėms.

Samprotavimas ir įrankiai

Palaikomi Thinking lygiai low, medium ir high. Google aprašytu bazinio modelio režimu numatytasis lygis – medium. Šios reikšmės apibūdina bazinį Google modelį; režimą ir valdymo per Ailoot API prieinamumą lemia pasirinktas metodas ir modelio variantas. minimal lygis nepalaikomas ir sukelia klaidą. Reguliuojamos pastangos padeda pasirinkti režimą pagal etapo sudėtingumą, tačiau aukšto pastangų lygio modelis kartais užduočiai atlikti sunaudoja daugiau tokenų.

Galimybių rinkinys apima funkcijų iškvietimus, kodo vykdymą, struktūruotus atsakymus ir konteksto kaupimą podėlyje. Yra paieška failuose, pagrindimas paieškos rezultatais, Google Maps ir žiniatinklio adresų turinio skaitymas. Palaikomas paketinis apdorojimas. Kompiuterio sąsajos valdymas turi preliminarų statusą; jis nepaverčia kiekvieno kreipimosi į modelį būdo visaverčiu kompiuterio valdymu.

Paskirtis ir apribojimai

Gamintojas išskiria programinės įrangos inžineriją, agentų užduotis ir sudėtingus darbo su informacija procesus. Ilgas kontekstas leidžia pateikti didelės apimties medžiagą, o galimybės naudoti įrankius – organizuoti kelis susijusius etapus. Šios savybės apibūdina modelio galimybes; konkrečias parinktis ir įvesties duomenis lemia palaikomas iškvietimo metodas.

Versija paskelbta stabilia 2026 metų rugsėjį. Deklaruojama žinių riba – 2026 metų kovas, tačiau atskirose srityse žinios gali išlikti 2025 metų sausio lygio. Galimi išgalvoti faktai, delsos ir laiko limitų viršijimai. Didesnė samprotavimo apimtis neatmeta klaidų, o žemas pastangų lygis nėra konkretaus atsakymo laiko pažadas.

Praktinė užduotis

Praktinė užduotis

Techninis pavyzdys anglų kalba

Continue from a failed regression check

A previous patch replaced parseInt(value) with Number(value) in a quantity validator. Actual check results: '2.5' now accepted; 'abc' rejected; empty string incorrectly accepted as zero. Requirement: positive whole numbers only. Propose the next focused correction and tests for those three inputs plus '3'. State which evidence supports the change.

Laukiamas rezultatas

A revised validator, a four-case test table and an explanation tied to the supplied check results.

Rezultato patikra

Check that empty, fractional and nonnumeric values are rejected while 3 is accepted.
Ailoot · Anthropic pranešimai POST /v1/messages gemini-3.8-flash-medium

gemini-3.8-flash-medium

Google /gemini-3.8-flash-medium

Pradžia

Google multimodalinis modelis ilgai trunkančiai programinės įrangos inžinerijai, autonominiams agentams ir sudėtingam darbui su žiniomis.

Leidžiamos įvestys
Tekstas · Vaizdai
Rezultatai
Tekstas

Prieinama Ailoot · įvestys ir metodai

Ailoot · Anthropic pranešimai POST /v1/messages
Įvestis
text, image
Išvestis
text
Kontekstas
1 048 576 tokens
Didžiausia išvestis
65 536 tokens
Išvesties formatas
json arba SSE
LaukasTipasReikalavimasReikšmės ir ribosNumatyta
LaukasmodelTipasstringReikalavimasPrivalomaReikšmės ir ribos
gemini-3.8-flash-medium
Numatyta—
LaukasmessagesTipasmessage[]ReikalavimasPrivalomaReikšmės ir ribos
Mažiausias elementų skaičius: 1
Numatyta—
Laukasmessages[].roleTipasstringReikalavimasPrivalomaReikšmės ir ribos
user, assistant
Numatyta—
Laukasmessages[].contentTipasstring|content_block[]ReikalavimasPrivalomaReikšmės ir ribosNumatyta—
LaukassystemTipasstring|content_block[]ReikalavimasNeprivalomaReikšmės ir ribosNumatyta—
Laukasmax_tokensTipasintegerReikalavimasPrivalomaReikšmės ir ribos
Mažiausia reikšmė: 1
Riba taikoma: konkretus pasirinkto modelio / kortelės limitas
Numatyta—
LaukasstreamTipasbooleanReikalavimasNeprivalomaReikšmės ir ribosNumatytafalse
LaukastemperatureTipasnumberReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
Laukastop_pTipasnumberReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
Laukasstop_sequencesTipasstring[]ReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukastoolsTipastool[]ReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
Laukastools[].nameTipasstringReikalavimasNeprivalomaReikšmės ir ribos
Taikoma, kai: pateiktas įrankis
Numatyta—
Laukastools[].descriptionTipasstringReikalavimasNeprivalomaReikšmės ir ribosNumatyta—
Laukastools[].input_schemaTipasJSON_schemaReikalavimasNeprivalomaReikšmės ir ribosNumatyta—
Laukastool_choiceTipasobjectReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
Laukasthinking.typeTipasstringReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
Laukasthinking.budget_tokensTipasintegerReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
Laukasoutput_config.effortTipasstringReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukasmetadataTipasobjectReikalavimasNeprivalomaReikšmės ir ribosNumatyta—
Laukascache_controlTipasobjectReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
Įvesties medžiagos deriniai

Tekstas · UTF8 tekstas

messages[].content arba type=text blokas

Tekstas + vaizdas

{type:image,source:{type:base64,media_type,data}} arba šaltinis type=url

Metodo parametrai ir gyvavimo ciklas
ParametrasSpecifikacija
Parametrasmaterial_typesSpecifikacijatext, image
ParametrasrequiredSpecifikacijamodel, messages, max_tokens
Parametrasoptional_controlsSpecifikacijanull
Parametrascontent_typeSpecifikacijaapplication/json
Parametrastext_file_materialSpecifikacijatikrasis UTF-8 turinys įterptas kaip tekstas; failų ID/URLs reikia atskiro tiksliai apibrėžto palaikymo

Gyvavimo ciklas: exact retained published method

Metodų struktūros ir ID yra tikslūs; tiekėjo galimybės yra atskirtos nuo užklausos priėmimo.

Planai

Ailoot metodų įkainiai

Ailoot Anthropic pranešimaiPOST /v1/messages
Įvestis
0,00075 USD / 1K
Išvestis
0,00375 USD / 1K
Talpyklos skaitymas
0,000075 USD / 1K

Ailoot prieš užklausą rezervuoja numatomą sumą. Gavus rezultatą, galutinis mokestis nuskaitomas pagal išmatuotą naudojimą. Srautinio atsakymo atsiskaitymui naudojamas galutinis naudojimo įrašas. Kaip veikia rezervavimas ir atsiskaitymas →

Užklausų pavyzdžiai

Ailoot · Anthropic pranešimai

Teksto pavyzdysĮvestis, vaizdasPython SDKNode.js SDKPython srautas
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-medium", "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-medium", "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-medium",
    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-medium",
  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-medium',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")

Gauti ir išsaugoti rezultatus

Ailoot · Anthropic pranešimai

json arba SSE

Išsaugoti visus baigtus rezultatus

Išsaugokite kiekvieną visą grąžintą atsakymą, failą ir turinio dalį.

Išsaugokite visus turinio blokus, mąstymo parašus ir tikruosius įrankių naudojimo ID. Surinkite visus SSE blokų prieaugius; pirmasis teksto blokas nėra visa išvestis.

Jei reikia patikrinti pradinį atsakymą

Išsaugokite užklausų / atsakymų ID ir antraštes. Bendras teksto užduoties gavimo URL nepateikiamas.

Atsakymo laukai
LaukasTipas
LaukasidTipasstring
LaukasmodelTipasstring
Laukascontent[]Tipastext|thinking|tool_use|other content block
Laukasstop_reasonTipasstring|null
LaukasusageTipasobject
Klaidos ir tolesni veiksmai
AtsakymasSąlygaKitas žingsnis
Atsakymas400 · invalid_request_errorSąlygaNetinkami privalomi laukai, medžiagos pateikimo forma arba parametro reikšmėKitas žingsnisPrieš naują kūrimo užklausą pataisykite nurodytus laukus.

Pseudonimai

Modelių pseudonimai

Ailoot gemini-3.8-flash-medium

Metodų kelių pseudonimai

Naudokite aukščiau nurodytus metodų kelius.

Susiję ID iškvietimui

gemini-3.8-flash-medium

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

gemini-3.8-flash-medium

Google /gemini-3.8-flash-medium

Pradžia

Google multimodalinis modelis ilgai trunkančiai programinės įrangos inžinerijai, autonominiams agentams ir sudėtingam darbui su žiniomis.

Leidžiamos įvestys
Tekstas · Vaizdai
Rezultatai
Tekstas

Prieinama Ailoot · įvestys ir metodai

Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
Įvestis
text, image
Išvestis
text
Išvesties formatas
json arba palaikomas srautinis perdavimas
LaukasTipasReikalavimasReikšmės ir ribosNumatyta
Laukaspath.modelTipasstringReikalavimasPrivalomaReikšmės ir ribos
gemini-3.8-flash-medium
Numatyta—
LaukascontentsTipascontent[]ReikalavimasPrivalomaReikšmės ir ribos
Mažiausias elementų skaičius: 1
Numatyta—
Laukascontents[].roleTipasstringReikalavimasNeprivalomaReikšmės ir ribos
user, model
Numatyta—
Laukascontents[].partsTipaspart[]ReikalavimasPrivalomaReikšmės ir ribosNumatyta—
LaukassystemInstructionTipascontentReikalavimasNeprivalomaReikšmės ir ribosNumatyta—
LaukasgenerationConfig.maxOutputTokensTipasintegerReikalavimasNeprivalomaReikšmės ir ribos
Mažiausia reikšmė: 1
Priklauso nuo modelio
Numatyta—
LaukasgenerationConfig.temperatureTipasnumberReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukasgenerationConfig.topPTipasnumberReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukasgenerationConfig.topKTipasintegerReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukasgenerationConfig.stopSequencesTipasstring[]ReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukasgenerationConfig.thinkingConfig.includeThoughtsTipasbooleanReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukasgenerationConfig.thinkingConfig.thinkingBudgetTipasintegerReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
Laukastools[].functionDeclarationsTipasfunction_declaration[]ReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukastoolConfig.functionCallingConfig.modeTipasstringReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukassafetySettingsTipasobject[]ReikalavimasNeprivalomaReikšmės ir ribos
Priklauso nuo modelio
Numatyta—
LaukassessionIdTipasstringReikalavimasNeprivalomaReikšmės ir ribosNumatyta—
Įvesties medžiagos deriniai

Tekstas · UTF8 tekstas

contents[].parts[].text

Tekstas + vaizdas

parts[].inlineData={mimeType,data}

Metodo parametrai ir gyvavimo ciklas
ParametrasSpecifikacija
Parametrasmaterial_typesSpecifikacijatext, image
ParametrasrequiredSpecifikacijacontents
Parametrasoptional_controlsSpecifikacijanull
Parametrascontent_typeSpecifikacijaapplication/json
Parametrastext_file_materialSpecifikacijatikrasis UTF-8 turinys įterptas kaip tekstas; failų ID/URLs reikia atskiro tiksliai apibrėžto palaikymo

Gyvavimo ciklas: exact retained published method

Metodų struktūros ir ID yra tikslūs; tiekėjo galimybės yra atskirtos nuo užklausos priėmimo.

Planai

Ailoot metodų įkainiai

Ailoot Gemini generateContentPOST /v1beta/models/{model}:generateContent
Įvestis
0,00075 USD / 1K
Išvestis
0,00375 USD / 1K
Talpyklos skaitymas
0,000075 USD / 1K

Ailoot prieš užklausą rezervuoja numatomą sumą. Gavus rezultatą, galutinis mokestis nuskaitomas pagal išmatuotą naudojimą. Srautinio atsakymo atsiskaitymui naudojamas galutinis naudojimo įrašas. Kaip veikia rezervavimas ir atsiskaitymas →

Užklausų pavyzdžiai

Ailoot · Gemini generateContent

Teksto pavyzdysĮvestis, vaizdasPython SDKNode.js SDKPython srautas
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-medium: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-medium: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-medium", 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-medium", 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-medium',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

Gauti ir išsaugoti rezultatus

Ailoot · Gemini generateContent

json arba palaikomas srautinis perdavimas

Išsaugoti visus baigtus rezultatus

Išsaugokite kiekvieną visą grąžintą atsakymą, failą ir turinio dalį.

Išsaugokite visus kandidatus ir dalis, įskaitant funkcijų iškvietimus, mąstymo parašus ir naudojimo duomenis; srauto dalis surinkite eilės tvarka.

Jei reikia patikrinti pradinį atsakymą

Išsaugokite užklausų / atsakymų ID ir antraštes. Bendras teksto užduoties gavimo URL nepateikiamas.

Atsakymo laukai
LaukasTipas
LaukasresponseIdTipasstring
LaukasmodelVersionTipasstring
Laukascandidates[].content.parts[]Tipastext|inlineData|functionCall|other part
Laukascandidates[].finishReasonTipasstring
LaukasusageMetadataTipasobject
Klaidos ir tolesni veiksmai
AtsakymasSąlygaKitas žingsnis
Atsakymas400 · invalid_request_errorSąlygaNetinkami privalomi laukai, medžiagos pateikimo forma arba parametro reikšmėKitas žingsnisPrieš naują kūrimo užklausą pataisykite nurodytus laukus.

Pseudonimai

Modelių pseudonimai

Ailoot gemini-3.8-flash-medium

Metodų kelių pseudonimai

Naudokite aukščiau nurodytus metodų kelius.

Susiję ID iškvietimui

gemini-3.8-flash-medium

FAQ · Gemini 3.8 Flash Medium
Kokios įvestys ir rezultatai prieinami?

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

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

Kokius laukus naudoja užklausa?

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

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

Kokie apribojimai taikomi?

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

POST /v1beta/models/{model}:generateContent · gemini-3.8-flash-medium: contents.min_items: 1

Išsamiau

Prijunkite Ailoot prie Claude Code, OpenCode, Hermes arba savo programos.

Įmonė ir jos projektų portfelis

Įmonė ir jos projektų portfelis: milijonai klientų; mėnesio pardavimai siekia milijardus.

Pirkite žetonus su nuolaida.

Prenumeratos nuolaida reguliariam darbui. Kodai — iki 50% žetonų pirkimui.

Prenumerata
Pasirinkite planą su nuolaida reguliarioms užklausoms.
Nuolaidos kodas iki 50%
Įveskite kodą perkant. Kaina perskaičiuojama pagal galiojančios akcijos sąlygas.
Išlaidos istorijoje
Kiekvienai užklausai išsaugomi modelis, žetonai ir suma.

Pasirinkti prenumeratą · Peržiūrėti modelių kainas

Prijunkite API prie produkto, kurį parduodate.

SaaS, programos ir botai pagal Ailoot ofertą bei licencijos sutartį. Perpardavimui paprašykite perpardavėjo licencijos.

Komercinė programa
Teksto, vaizdų, video ir garso kūrimą integruokite į mokamas paslaugos funkcijas.
Perpardavėjo licencija
Atsiųskite projekto aprašymą ir prieigos schemą. Paprašykite rašytinių naudojimo ir perpardavimo sąlygų.
Dokumentai svetainėje
Oferta, licencijos sutartis ir duomenų tvarkymo politika prieinamos prieš prisijungiant.

Paprašyti perpardavėjo licencijos · Oferta ir licencijos sutartis