mallit

Google: Gemini 3.1 Pro Preview

Markdown · JSON

Google: Gemini 3.1 Pro Preview

Gemini 3.1 Pro Preview on Googlen multimodaalinen päättelymalli monimutkaisiin ohjelmisto-, algoritmi- ja tietotehtäviin. Se vastaanottaa tekstiä, kuvia, ääntä, videota ja PDF-tiedostoja ja palauttaa tekstiä tai koodia. Se tukee työkaluja ja rakenteista tulostetta. Päättelytasot low, medium ja high ohjaavat työmäärää; dokumentoitu oletus on high.

Tietoa mallista

Tämä kuvaus kattaa mallin ominaisuudet. Ailootissa saatavilla olevat syötteet, tulosteet ja asetukset luetellaan alla valitulle menetelmälle.

Gemini 3.1 Pro Preview on Googlen päättelyyn painottuva tekstimalli monimutkaisiin tehtäviin, jotka vaativat ohjelmistokehitystä, algoritmien kehittämistä tai multimodaalisen lähdeaineiston yhdistämistä. Se perustuu Gemini 3 Pro -malliin ja painottaa täsmällistä työkalujen käyttöä, tehokkaampaa päättelyä ja luotettavaa monivaiheista suorittamista. Tekstiä, kuvia, ääntä, videota ja PDF-tiedostoja voidaan hyödyntää kirjallisen vastauksen, koodituotoksen tai rakenteisen tuloksen laatimisessa.

Anna vaativaan ohjelmointitehtävään tavoite, olennainen koodivaraston aineisto, kuvaus havaitusta toiminnasta ja säilytettävät reunaehdot. Kokonaiset koodivarastot voivat toimia tehtävän kontekstina. Pyydä koodin sopimusten katselmoinnissa mallia vertaamaan, miten kaksi moduulia käsittelee yhteistä tietosopimusta, tunnistamaan ristiriita ja ehdottamaan kohdennettua korjausta sitä tukevine koodiviitteineen. Hyödyllisessä tuloksessa analyysi, muutosehdotus ja niitä tukeva näyttö erotetaan mahdollisesta liitetyn sovelluksen suorittamasta validoinnista.

Julkaisuaineistossa esitellään koodipohjaisia visuaalisia selityksiä ja vuorovaikutteisia projekteja, muun muassa tekstimuotoisen tehtävänannon pohjalta tuotettua animoitua SVG:tä. Kyse on koodituotoksista, ei rasterikuvien generoinnista. Selkeässä tehtävänannossa voidaan määrittää, mitä tulee selittää, miten visuaalisen esityksen tulee toimia ja mitä tietoja sen tulee esittää. Tarkista tuotettu koodi ja sen renderöity esitys näitä vaatimuksia vasten. Anna tietojen yhdistämistehtävään todelliset lähteet ja pyydä yhtä näkymää, joka säilyttää niissä esitetyt suhteet ja varaukset.

Dokumentoidut päättelytasot ovat low, medium ja high. 3.1 Pro Preview -mallin oletustaso on high. Päättelyä ei voi poistaa kokonaan käytöstä tässä Pro-profiilissa. Valitse rajattua vastausta varten matalampi päättelytaso ja vaikeaan monivaiheiseen työhön enemmän päättelyä. Varaa samalla riittävä tulostebudjetti lopulliselle tuotokselle. Pieni tulosteen pituusraja voi keskeyttää päättelyn ennen kuin käyttökelpoinen lopullinen vastaus syntyy. Päättelyopas erottaa päättelyn yhteenvedon koko sisäisestä prosessista ja selittää, miksi keskustelun päättelyallekirjoituksiin liittyvä konteksti on tärkeä.

Juuri tämän Preview-version taulukossa luetellaan funktiokutsut, koodin suorittaminen, hakutuloksiin perustuva lähteistys, Maps-tietoihin perustuva lähteistys, URL-konteksti ja rakenteiset tulosteet. Taulukossa File Search rajataan AI Studioon. Kuvaa funktioiden tarkoitukset ja määrittele niiden parametrit. Jatka todellisen palautetun tuloksen pohjalta. Erillinen Custom Tools Preview -profiili on optimoitu antamaan etusija omille työkaluille ja bashille. Se on mallin tarjoajan erillinen, nimetty päätepiste, joten tätä erikoistumista ei pidä automaattisesti pitää kaikkien 3.1 Pro -pyyntöjen ominaisuutena. Valitse rakenteisen tulosteen skeema, kun tehtävä edellyttää määriteltyjä tietueita vapaamuotoisen tekstin sijaan.

Yksilöi multimodaalisessa analyysissä olennainen sivu, visuaalinen kohde, tallenteen aikaväli tai videolla näkyvä tapahtuma. Vertaa dokumenttianalyysissä kaaviota sen kirjalliseen määrittelyyn ja palauta jokainen ristiriita sitä tukevan tekstikohdan kanssa. Puhutusta lähteestä voidaan tuottaa litterointi tai tekstimuotoinen tulkinta. Säilytä tarkistamista vaativien johtopäätösten lähdeviitteet ja erota suoraan näkyvä tai ilmaistu tieto päätelmistä. Tämä profiili tuottaa tekstiä, myös koodia. Kuvien tai puheen natiivi tuottaminen ei kuulu juuri tämän profiilin ominaisuustaulukossa lueteltuihin ominaisuuksiin.

Valmistajan 3.1 Pro -mallikortissa ilmoitetaan kontekstin enimmäiskooksi 1M tokenia ja tekstitulosteen enimmäispituudeksi 64K tokenia. Juuri tämän Preview-version API-taulukossa ilmoitetaan 1 048 576 syötetokenia ja 65 536 tulostetokenia. Sisällytä ohjeet, keskusteluhistoria ja media syötebudjettiin. Välimuistin käyttö ja eräkäsittely on dokumentoitu, ja mallin tarjoajan profiilin yhteydessä luetellaan myös Flex- ja Priority-vaihtoehdot. Kun käsittelet useita toisistaan riippumattomia kohteita, määritä tarvittava tulos ja säilytä kunkin lähteen tunniste sen sijaan, että yhdistäisit toisiinsa liittymättömän näytön yhdeksi vastaukseksi, jonka lähteitä ei voi jäljittää.

Nimetty Preview-versio pysyy erillään Pro-mallin Custom Tools -profiilista sekä myöhemmistä Flash- tai Pro-julkaisuista. Sen vahvuuksia ovat monimutkainen päättely, ohjelmointi ja lähdeaineiston yhdistäminen. Lopullinen tuotos on silti tarkistettava lähdettä ja todellisia työkalutuloksia vasten. Jätä epäselvyys avoimeksi, jos annetut tiedot eivät tue varmaa johtopäätöstä. Hyödyllinen lopputulos on tehtävässä pyydetty, lähteisiin perustuva vastaus, koodi tai tietue, johon sisältyy riittävästi näyttöä sen käytännön rajoitteiden arvioimiseen.

Käytännön tehtävä

Käytännön tehtävä

Tekninen esimerkki englanniksi

Review a cross-module date contract

Review this contract mismatch. Producer emits {due_date: "2026-11-03"}; consumer reads record.dueDate and displays "No date" when missing. Existing stored records use due_date. Propose the smallest compatible correction and tests for both present and absent dates. Preserve the producer field and do not add a second stored field.

Odotettu tulos

A short mismatch analysis, a focused consumer patch and tests covering the stored field and missing-value behavior.

Tarkista tulos

Check that the patch reads due_date without changing persisted records or treating an absent date as a valid one.
Ailoot · Anthropic Messages POST /v1/messages gemini-3.1-pro-preview

gemini-3.1-pro-preview

Google /gemini-3.1-pro-preview

Aloitus

Gemini 3.1 Pro Preview on Googlen multimodaalinen päättelymalli monimutkaisiin ohjelmisto-, algoritmi- ja tietotehtäviin. Se vastaanottaa tekstiä, kuvia, ääntä, videota ja PDF-tiedostoja ja palauttaa tekstiä tai koodia. Se tukee työkaluja ja rakenteista tulostetta. Päättelytasot low, medium ja high ohjaavat työmäärää; dokumentoitu oletus on high.

Hyväksytyt syötteet
Teksti · Kuvat
Tulokset
Teksti

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot · Anthropic Messages POST /v1/messages
Syötetyypit
text, image
Tulostyypit
text
Konteksti
1 048 576 tokens
Enimmäistuloste
65 536 tokens
Tulosteen muoto
json tai SSE
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
gemini-3.1-pro-preview
Oletus—
KenttämessagesTyyppimessage[]VaatimusPakollinenArvot & rajat
Kohteiden vähimmäismäärä: 1
Oletus—
Kenttämessages[].roleTyyppistringVaatimusPakollinenArvot & rajat
user, assistant
Oletus—
Kenttämessages[].contentTyyppistring|content_block[]VaatimusPakollinenArvot & rajatOletus—
KenttäsystemTyyppistring|content_block[]VaatimusValinnainenArvot & rajatOletus—
Kenttämax_tokensTyyppiintegerVaatimusPakollinenArvot & rajat
Vähimmäismäärä: 1
Rajoitus koskee: valitun mallin/kortin täsmällinen yläraja
Oletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
KenttätemperatureTyyppinumberVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttätop_pTyyppinumberVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttästop_sequencesTyyppistring[]VaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttätoolsTyyppitool[]VaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttätools[].nameTyyppistringVaatimusValinnainenArvot & rajat
Sovelletaan, kun: työkalu annettu
Oletus—
Kenttätools[].descriptionTyyppistringVaatimusValinnainenArvot & rajatOletus—
Kenttätools[].input_schemaTyyppiJSON_schemaVaatimusValinnainenArvot & rajatOletus—
Kenttätool_choiceTyyppiobjectVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäthinking.typeTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäthinking.budget_tokensTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäoutput_config.effortTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttämetadataTyyppiobjectVaatimusValinnainenArvot & rajatOletus—
Kenttäcache_controlTyyppiobjectVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Syöteaineistojen yhdistelmät

Teksti · UTF8-teksti

messages[].content tai type=text-lohko

Teksti + kuva

{type:image,source:{type:base64,media_type,data}} tai lähde, jossa type=url

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametrimaterial_typesSopimustext, image
ParametrirequiredSopimusmodel, messages, max_tokens
Parametrioptional_controlsSopimusnull
Parametricontent_typeSopimusapplication/json
Parametritext_file_materialSopimusvarsinainen UTF-8-sisältö lisätään tekstinä; tiedostojen ID- tai URLs-arvot tarvitsevat erillisen täsmällisen tuen

Elinkaari: exact retained published method

Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä.

Hinnoittelu

Ailoot-menetelmien hinnat

Ailoot Anthropic MessagesPOST /v1/messages
Syöte
0,002 $ / 1K
Tuloste
0,012 $ / 1K
Välimuistin luku
0,0002 $ / 1K

Hinnat pyynnön pituuden mukaan · Anthropic Messages

Pyynnön koko tokeneinaSyöteTulosteVälimuistin lukuVälimuistiin kirjoitusVälimuisti 5 minVälimuisti 1 tunti
Pyynnön koko tokeneina(0; 200 000]Syöte0,002 $Tuloste0,012 $Välimuistin luku0,0002 $Välimuistiin kirjoitusPerushinta: —Välimuisti 5 minPerushinta: —Välimuisti 1 tuntiPerushinta: —
Pyynnön koko tokeneina(200 000; ∞)Syöte0,004 $Tuloste0,018 $Välimuistin luku0,0004 $Välimuistiin kirjoitusPerushinta: —Välimuisti 5 minPerushinta: —Välimuisti 1 tuntiPerushinta: —

Hinnat USD-määräisinä 1K tokenia kohden. Jos hintaa ei ole asetettu, käytetään tämän menetelmän perushintaa; «—» tarkoittaa, ettei perushintaa ole asetettu.

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Viitehinnaston tiedot

Mallitason viitehinnastot eivät muuta menetelmän valintaa, hinta-arvioita tai veloituksia. Käytössä olevat veloitukset käyttävät valitun Ailoot-menetelmän hintoja.

Mallin viitehinnastot

Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

AsetuksetHinnastoKontekstin tokenit, enemmän kuinKontekstin tokenit, enintään raja-arvo mukaan lukienVeloitus
AsetuksetOpenAI Chat · Tokenien perushinnatHinnastoPerushintaKontekstin tokenit, enemmän kuin—Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
Tuloste · Päättelyn tulostokenit $0.024 / 1K tokenia
AsetuksetOpenAI Chat · Pyynnön pituuden mukainen taso 1Hinnasto—Kontekstin tokenit, enemmän kuin0Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000Veloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetOpenAI Chat · Pyynnön pituuden mukainen taso 2Hinnasto—Kontekstin tokenit, enemmän kuin200 000Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.008 / 1K tokenia
Tuloste · Tulostokenit $0.036 / 1K tokenia
Syöte · Välimuistin luku $0.0008 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetAnthropic Messages · Tokenien perushinnatHinnastoPerushintaKontekstin tokenit, enemmän kuin—Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
Tuloste · Päättelyn tulostokenit $0.024 / 1K tokenia
AsetuksetAnthropic Messages · Pyynnön pituuden mukainen taso 1Hinnasto—Kontekstin tokenit, enemmän kuin0Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000Veloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetAnthropic Messages · Pyynnön pituuden mukainen taso 2Hinnasto—Kontekstin tokenit, enemmän kuin200 000Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.008 / 1K tokenia
Tuloste · Tulostokenit $0.036 / 1K tokenia
Syöte · Välimuistin luku $0.0008 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia

Esimerkkipyynnöt

Ailoot · Anthropic Messages

TekstiesimerkkiSyöte, kuvaPython SDKNode.js SDKPython-suoratoisto
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.1-pro-preview", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3.1-pro-preview", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
    model="gemini-3.1-pro-preview",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
  model: "gemini-3.1-pro-preview",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(msg);
import anthropic,os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.messages.stream(model='gemini-3.1-pro-preview',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_message()
    save_result(final.to_dict(mode="json"),"stream-result")

Vastaanota ja tallenna tulokset

Ailoot · Anthropic Messages

json tai SSE

Säilytä kaikki valmistuneet tulokset

Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.

Säilytä kaikki sisältölohkot, päättelyallekirjoitukset ja todelliset työkalukäytön ID:t. Kokoa kaikki SSE-lohkomuutokset; ensimmäinen tekstilohko ei ole koko tulos.

Jos alkuperäinen vastaus on tarkistettava

Säilytä pyyntöjen/vastausten ID:t ja otsakkeet. Yleistä tekstityön haku-URL:ää ei anneta.

Vastauksen kentät
KenttäTyyppi
KenttäidTyyppistring
KenttämodelTyyppistring
Kenttäcontent[]Tyyppitext|thinking|tool_use|other content block
Kenttästop_reasonTyyppistring|null
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.

Aliakset

Mallin aliakset

Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview
~google/gemini-pro-latest

Menetelmäpolkujen aliakset

/chat/completions

Liittyvät kutsujan ID:t

google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview

Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-3.1-pro-preview

gemini-3.1-pro-preview

Google /gemini-3.1-pro-preview

Aloitus

Gemini 3.1 Pro Preview on Googlen multimodaalinen päättelymalli monimutkaisiin ohjelmisto-, algoritmi- ja tietotehtäviin. Se vastaanottaa tekstiä, kuvia, ääntä, videota ja PDF-tiedostoja ja palauttaa tekstiä tai koodia. Se tukee työkaluja ja rakenteista tulostetta. Päättelytasot low, medium ja high ohjaavat työmäärää; dokumentoitu oletus on high.

Hyväksytyt syötteet
Teksti · Kuvat
Tulokset
Teksti

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
Syötetyypit
text, image
Tulostyypit
text
Konteksti
1 048 576 tokens
Enimmäistuloste
65 536 tokens
Tulosteen muoto
json tai tuettu virtakäsittely
KenttäTyyppiVaatimusArvot & rajatOletus
Kenttäpath.modelTyyppistringVaatimusPakollinenArvot & rajat
gemini-3.1-pro-preview
Oletus—
KenttäcontentsTyyppicontent[]VaatimusPakollinenArvot & rajat
Kohteiden vähimmäismäärä: 1
Oletus—
Kenttäcontents[].roleTyyppistringVaatimusValinnainenArvot & rajat
user, model
Oletus—
Kenttäcontents[].partsTyyppipart[]VaatimusPakollinenArvot & rajatOletus—
KenttäsystemInstructionTyyppicontentVaatimusValinnainenArvot & rajatOletus—
KenttägenerationConfig.maxOutputTokensTyyppiintegerVaatimusValinnainenArvot & rajat
Vähimmäismäärä: 1
Riippuu mallista
Oletus—
KenttägenerationConfig.temperatureTyyppinumberVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttägenerationConfig.topPTyyppinumberVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttägenerationConfig.topKTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttägenerationConfig.stopSequencesTyyppistring[]VaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttägenerationConfig.thinkingConfig.includeThoughtsTyyppibooleanVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttägenerationConfig.thinkingConfig.thinkingBudgetTyyppiintegerVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttätools[].functionDeclarationsTyyppifunction_declaration[]VaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttätoolConfig.functionCallingConfig.modeTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäsafetySettingsTyyppiobject[]VaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäsessionIdTyyppistringVaatimusValinnainenArvot & rajatOletus—
Syöteaineistojen yhdistelmät

Teksti · UTF8-teksti

contents[].parts[].text

Teksti + kuva

parts[].inlineData={mimeType,data}

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametrimaterial_typesSopimustext, image
ParametrirequiredSopimuscontents
Parametrioptional_controlsSopimusnull
Parametricontent_typeSopimusapplication/json
Parametritext_file_materialSopimusvarsinainen UTF-8-sisältö lisätään tekstinä; tiedostojen ID- tai URLs-arvot tarvitsevat erillisen täsmällisen tuen

Elinkaari: exact retained published method

Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä.

Hinnoittelu

Ailoot-menetelmien hinnat

Ailoot Gemini generateContentPOST /v1beta/models/{model}:generateContent
Syöte
0,002 $ / 1K
Tuloste
0,012 $ / 1K
Välimuistin luku
0,0002 $ / 1K

Hinnat pyynnön pituuden mukaan · Gemini generateContent

Pyynnön koko tokeneinaSyöteTulosteVälimuistin lukuVälimuistiin kirjoitusVälimuisti 5 minVälimuisti 1 tunti
Pyynnön koko tokeneina(0; 200 000]Syöte0,002 $Tuloste0,012 $Välimuistin luku0,0002 $Välimuistiin kirjoitusPerushinta: —Välimuisti 5 minPerushinta: —Välimuisti 1 tuntiPerushinta: —
Pyynnön koko tokeneina(200 000; ∞)Syöte0,004 $Tuloste0,018 $Välimuistin luku0,0004 $Välimuistiin kirjoitusPerushinta: —Välimuisti 5 minPerushinta: —Välimuisti 1 tuntiPerushinta: —

Hinnat USD-määräisinä 1K tokenia kohden. Jos hintaa ei ole asetettu, käytetään tämän menetelmän perushintaa; «—» tarkoittaa, ettei perushintaa ole asetettu.

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Viitehinnaston tiedot

Mallitason viitehinnastot eivät muuta menetelmän valintaa, hinta-arvioita tai veloituksia. Käytössä olevat veloitukset käyttävät valitun Ailoot-menetelmän hintoja.

Mallin viitehinnastot

Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

AsetuksetHinnastoKontekstin tokenit, enemmän kuinKontekstin tokenit, enintään raja-arvo mukaan lukienVeloitus
AsetuksetOpenAI Chat · Tokenien perushinnatHinnastoPerushintaKontekstin tokenit, enemmän kuin—Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
Tuloste · Päättelyn tulostokenit $0.024 / 1K tokenia
AsetuksetOpenAI Chat · Pyynnön pituuden mukainen taso 1Hinnasto—Kontekstin tokenit, enemmän kuin0Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000Veloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetOpenAI Chat · Pyynnön pituuden mukainen taso 2Hinnasto—Kontekstin tokenit, enemmän kuin200 000Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.008 / 1K tokenia
Tuloste · Tulostokenit $0.036 / 1K tokenia
Syöte · Välimuistin luku $0.0008 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetAnthropic Messages · Tokenien perushinnatHinnastoPerushintaKontekstin tokenit, enemmän kuin—Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
Tuloste · Päättelyn tulostokenit $0.024 / 1K tokenia
AsetuksetAnthropic Messages · Pyynnön pituuden mukainen taso 1Hinnasto—Kontekstin tokenit, enemmän kuin0Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000Veloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetAnthropic Messages · Pyynnön pituuden mukainen taso 2Hinnasto—Kontekstin tokenit, enemmän kuin200 000Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.008 / 1K tokenia
Tuloste · Tulostokenit $0.036 / 1K tokenia
Syöte · Välimuistin luku $0.0008 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia

Esimerkkipyynnöt

Ailoot · Gemini generateContent

TekstiesimerkkiSyöte, kuvaPython SDKNode.js SDKPython-suoratoisto
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["contents"]=[{"role":"user","parts":[{"text":"Summarize this material and quote supporting source passages.\n\n"+text}]}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-3.1-pro-preview:generateContent \
  -H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": [{"role": "user", "parts": [{"text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["contents"][0]["parts"].append({"inlineData":{"mimeType":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-3.1-pro-preview:generateContent \
  -H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from google import genai
from google.genai import types
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = genai.Client(
    api_key=os.environ["AILOOT_API_KEY"],
    http_options=types.HttpOptions(base_url="https://api.ailoot.ai"),
)
resp = client.models.generate_content(model="gemini-3.1-pro-preview", contents="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(resp.to_json_dict())
import { GoogleGenAI } from "@google/genai";

if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const ai = new GoogleGenAI({ apiKey: process.env.AILOOT_API_KEY, httpOptions: { baseUrl: "https://api.ailoot.ai" } });
const resp = await ai.models.generateContent({ model: "gemini-3.1-pro-preview", contents: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";

function saveResult(data, stem = "result") {
  writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
  console.log(JSON.stringify(data, null, 2));
  const saveBlob = (encoded, suffix, label) => {
    const raw = Buffer.from(encoded, "base64");
    const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
    const file = `${stem}-${label}.${ext}`;
    writeFileSync(file, raw); console.log("Saved", file);
  };
  for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
  for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
  for (const [i, item] of (data.output || []).entries()) {
    console.log("Output", i, JSON.stringify(item));
    if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
  }
  for (const [ci, candidate] of (data.candidates || []).entries()) {
    for (const [pi, part] of (candidate.content?.parts || []).entries()) {
      console.log("Candidate/part", ci, pi, JSON.stringify(part));
      const blob = part.inlineData || part.inline_data;
      if (blob?.data) {
        const mime = blob.mimeType || blob.mime_type;
        const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
        saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
      }
    }
  }
}

saveResult(resp);
from google import genai
from google.genai import types
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=genai.Client(api_key=os.environ["AILOOT_API_KEY"],http_options=types.HttpOptions(base_url="https://api.ailoot.ai"))
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

count=0
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
    for chunk in client.models.generate_content_stream(model='gemini-3.1-pro-preview',contents="Explain observations and hypotheses in three sentences."):
        payload=chunk.to_json_dict()
        log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
        save_result(payload,"stream-chunk-"+str(count))
        count+=1

Vastaanota ja tallenna tulokset

Ailoot · Gemini generateContent

json tai tuettu virtakäsittely

Säilytä kaikki valmistuneet tulokset

Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.

Säilytä kaikki ehdokkaat ja osat, mukaan lukien funktiokutsut, päättelyallekirjoitukset ja käyttötiedot; kokoa virran lohkot järjestyksessä.

Jos alkuperäinen vastaus on tarkistettava

Säilytä pyyntöjen/vastausten ID:t ja otsakkeet. Yleistä tekstityön haku-URL:ää ei anneta.

Vastauksen kentät
KenttäTyyppi
KenttäresponseIdTyyppistring
KenttämodelVersionTyyppistring
Kenttäcandidates[].content.parts[]Tyyppitext|inlineData|functionCall|other part
Kenttäcandidates[].finishReasonTyyppistring
KenttäusageMetadataTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.

Aliakset

Mallin aliakset

Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview
~google/gemini-pro-latest

Menetelmäpolkujen aliakset

/chat/completions

Liittyvät kutsujan ID:t

google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions gemini-3.1-pro-preview

gemini-3.1-pro-preview

Google /gemini-3.1-pro-preview
Mallin ID
  • gemini-3.1-pro-preview
  • google/gemini-3.1-pro-preview

Aloitus

Gemini 3.1 Pro Preview on Googlen multimodaalinen päättelymalli monimutkaisiin ohjelmisto-, algoritmi- ja tietotehtäviin. Se vastaanottaa tekstiä, kuvia, ääntä, videota ja PDF-tiedostoja ja palauttaa tekstiä tai koodia. Se tukee työkaluja ja rakenteista tulostetta. Päättelytasot low, medium ja high ohjaavat työmäärää; dokumentoitu oletus on high.

Hyväksytyt syötteet
Teksti
Tulokset
Teksti

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Syötetyypit
text
Tulostyypit
text
Tulosteen muoto
json tai SSE
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
gemini-3.1-pro-preview
Oletus—
KenttämessagesTyyppimessage[]VaatimusPakollinenArvot & rajat
Kohteiden vähimmäismäärä: 1
Oletus—
Kenttämessages[].roleTyyppistringVaatimusPakollinenArvot & rajat
Riippuu mallista
Oletus—
Kenttämessages[].contentTyyppistringVaatimusValinnainenArvot & rajat
Sovelletaan, kun: Tekstikeskustelu
Oletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
Syöteaineistojen yhdistelmät

Teksti · UTF8-teksti

messages[].content

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametricontent_typeSopimusapplication/json
ParametrirequiredSopimusmodel, messages
Parametrimaterial_typesSopimustext
ParametrimessagesSopimusviestitaulukko role/content-rakenteella
Parametrifile_materialSopimusvarsinainen UTF-8-asiakirja lisätään sellaisenaan tekstinä; tiedoston ID:tä ei päätellä
Parametrioptional_controlsSopimusstream
Parametricontrol_scopeSopimusTekstikeskustelu; stream on totuusarvo, jonka oletus on false.
Parametrioutput_modalitiesSopimustext
Parametrihosted_operationsSopimusfalse
Parametrimultimodal_input_bindingSopimusnull

Menetelmien aliakset: /chat/completions

Elinkaari: synchronous_or_streamed

Lähetä mallin täsmällinen ID yhdessä messages-kentän kanssa.

Kontekstin pituus ei ole tuloksen yläraja.

Tekstitiedosto voi antaa tekstiä sellaisenaan; kuva-, ääni- ja tiedosto-objektisyötteet tarvitsevat täsmällisen sidonnan.

Hinnoittelu

Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.

Nopea tila
Vakiohinta Kun nopea tila on valittu
Flex-tila
Vakiohinta Kun flex-tila on valittu
Päättelyn enimmäisteho
Vakiohinta Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä
Päättelyn teho · suuri
Vakiohinta Kun päättelyn teho on suuri
Päättelyn teho · pieni
Vakiohinta Kun päättelyn teho on pieni
Päättelyn teho · keskitaso
Vakiohinta Kun päättelyn teho on keskitasoa
Eksplisiittisen välimuistin hinnoittelu
Ei käytössä Kun eksplisiittistä välimuistia pyydetään
Päättelytulos
Päättelyyn sovelletaan lueteltua osajoukon hintaa kokonaistuloksen sisällä; älä lisää näitä tokeneita kahdesti. Kun tulos sisältää päättelytokeneita

Ailoot-hinnat

Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

AsetuksetHinnastoKontekstin tokenit, enemmän kuinKontekstin tokenit, enintään raja-arvo mukaan lukienVeloitus
AsetuksetTokenien perushinnatHinnastoPerushintaKontekstin tokenit, enemmän kuin—Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
Tuloste · Päättelyn tulostokenit $0.024 / 1K tokenia
AsetuksetPyynnön pituusluokka 1Hinnasto—Kontekstin tokenit, enemmän kuin0Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000Veloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetPyynnön pituusluokka 2Hinnasto—Kontekstin tokenit, enemmän kuin200 000Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.008 / 1K tokenia
Tuloste · Tulostokenit $0.036 / 1K tokenia
Syöte · Välimuistin luku $0.0008 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Esimerkkipyynnöt

Ailoot Ultra · OpenAI Chat

curlPython SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"gemini-3.1-pro-preview","messages":[{"role":"user","content":"hello"}],"stream":false}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="gemini-3.1-pro-preview", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))

Vastaanota ja tallenna tulokset

Ailoot Ultra · OpenAI Chat

json tai SSE

Säilytä kaikki valmistuneet tulokset

Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.

Säilytä jokainen vastausvaihtoehto sisältöineen, työkalukutsuineen ja päättelyineen. Kokoa SSE:ssä muutokset vastausvaihtoehdon ja työkalun indeksin mukaan ja säilytä lopullinen päättymissyy sekä käyttötiedot.

Jos alkuperäinen vastaus on tarkistettava

Säilytä pyyntöjen/vastausten ID:t ja otsakkeet. Yleistä tekstityön haku-URL:ää ei anneta.

Vastauksen kentät
KenttäTyyppi
Kenttächoices[].indexTyyppiinteger
Kenttächoices[].message.contentTyyppistring|null
Kenttächoices[].message.tool_callsTyyppitool_call[]
Kenttächoices[].message.reasoning_contentTyyppistring
Kenttächoices[].message.reasoning_detailsTyyppiobject|array
Kenttächoices[].finish_reasonTyyppistring|null
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.

Aliakset

Mallin aliakset

Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview
~google/gemini-pro-latest

Menetelmäpolkujen aliakset

/chat/completions

Liittyvät kutsujan ID:t

google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview

Ailoot Ultra · Anthropic Messages POST /v1/messages gemini-3.1-pro-preview

gemini-3.1-pro-preview

Google /gemini-3.1-pro-preview
Mallin ID
  • gemini-3.1-pro-preview
  • google/gemini-3.1-pro-preview

Aloitus

Gemini 3.1 Pro Preview on Googlen multimodaalinen päättelymalli monimutkaisiin ohjelmisto-, algoritmi- ja tietotehtäviin. Se vastaanottaa tekstiä, kuvia, ääntä, videota ja PDF-tiedostoja ja palauttaa tekstiä tai koodia. Se tukee työkaluja ja rakenteista tulostetta. Päättelytasot low, medium ja high ohjaavat työmäärää; dokumentoitu oletus on high.

Hyväksytyt syötteet
Teksti
Tulokset
json · sse

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot Ultra · Anthropic Messages POST /v1/messages
Syötetyypit
text
Tulostyypit
json, sse
Tulosteen muoto
JSON tai SSE
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
gemini-3.1-pro-preview
Oletus—
KenttämessagesTyyppimessage[]VaatimusPakollinenArvot & rajatOletus—
Kenttämessages[].roleTyyppistringVaatimusPakollinenArvot & rajat
user, assistant
Oletus—
Kenttämessages[].contentTyyppistringVaatimusPakollinenArvot & rajatOletus—
Kenttämax_tokensTyyppiintegerVaatimusPakollinenArvot & rajatOletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
Syöteaineistojen yhdistelmät

Teksti · UTF-8-teksti

messages[].content-merkkijono

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametricontent_typeSopimusapplication/json
ParametrirequiredSopimusmodel, messages, max_tokens
Parametrioptional_controlsSopimusstream
Parametrimaterial_typesSopimustext
Parametritext_file_materialSopimusLue varsinainen UTF-8-asiakirja ja sijoita sen teksti ilmoitettuun syöte- tai viestisisällön merkkijonoon.

Elinkaari: synchronous_or_streamed

Hinnoittelu

Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.

Nopea tila
Vakiohinta Kun nopea tila on valittu
Flex-tila
Vakiohinta Kun flex-tila on valittu
Päättelyn enimmäisteho
Vakiohinta Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä
Päättelyn teho · suuri
Vakiohinta Kun päättelyn teho on suuri
Päättelyn teho · pieni
Vakiohinta Kun päättelyn teho on pieni
Päättelyn teho · keskitaso
Vakiohinta Kun päättelyn teho on keskitasoa
Eksplisiittisen välimuistin hinnoittelu
Ei käytössä Kun eksplisiittistä välimuistia pyydetään
Päättelytulos
Päättelyyn sovelletaan lueteltua osajoukon hintaa kokonaistuloksen sisällä; älä lisää näitä tokeneita kahdesti. Kun tulos sisältää päättelytokeneita

Ailoot-hinnat

Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

AsetuksetHinnastoKontekstin tokenit, enemmän kuinKontekstin tokenit, enintään raja-arvo mukaan lukienVeloitus
AsetuksetTokenien perushinnatHinnastoPerushintaKontekstin tokenit, enemmän kuin—Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
Tuloste · Päättelyn tulostokenit $0.024 / 1K tokenia
AsetuksetPyynnön pituusluokka 1Hinnasto—Kontekstin tokenit, enemmän kuin0Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000Veloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetPyynnön pituusluokka 2Hinnasto—Kontekstin tokenit, enemmän kuin200 000Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.008 / 1K tokenia
Tuloste · Tulostokenit $0.036 / 1K tokenia
Syöte · Välimuistin luku $0.0008 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Esimerkkipyynnöt

Ailoot Ultra · Anthropic Messages

Täydellinen minimaalinen JSON-runkocurl · käytä omaa UTF-8-dokumenttiasiPython · tallenna koko tulos
{
  "model": "gemini-3.1-pro-preview",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-3.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-3.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Vastaanota ja tallenna tulokset

Ailoot Ultra · Anthropic Messages

JSON tai SSE

Säilytä kaikki valmistuneet tulokset

Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.

Säilytä kaikki sisältölohkot, päättelyallekirjoitukset ja todelliset työkalukäytön ID:t. Kokoa kaikki SSE-lohkomuutokset; ensimmäinen tekstilohko ei ole koko tulos.

Jos alkuperäinen vastaus on tarkistettava

Säilytä pyyntöjen/vastausten ID:t ja otsakkeet. Yleistä tekstityön haku-URL:ää ei anneta.

Vastauksen kentät
KenttäTyyppi
KenttäidTyyppistring
KenttämodelTyyppistring
Kenttäcontent[]Tyyppitext|thinking|tool_use|other content block
Kenttästop_reasonTyyppistring|null
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.

Aliakset

Mallin aliakset

Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview
~google/gemini-pro-latest

Menetelmäpolkujen aliakset

/chat/completions

Liittyvät kutsujan ID:t

google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.1-pro-preview

google/gemini-3.1-pro-preview

Google /google/gemini-3.1-pro-preview
Mallin ID
  • gemini-3.1-pro-preview
  • google/gemini-3.1-pro-preview

Aloitus

Gemini 3.1 Pro Preview on Googlen multimodaalinen päättelymalli monimutkaisiin ohjelmisto-, algoritmi- ja tietotehtäviin. Se vastaanottaa tekstiä, kuvia, ääntä, videota ja PDF-tiedostoja ja palauttaa tekstiä tai koodia. Se tukee työkaluja ja rakenteista tulostetta. Päättelytasot low, medium ja high ohjaavat työmäärää; dokumentoitu oletus on high.

Hyväksytyt syötteet
Teksti
Tulokset
Teksti

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Syötetyypit
text
Tulostyypit
text
Tulosteen muoto
json tai SSE
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
google/gemini-3.1-pro-preview
Oletus—
KenttämessagesTyyppimessage[]VaatimusPakollinenArvot & rajat
Kohteiden vähimmäismäärä: 1
Oletus—
Kenttämessages[].roleTyyppistringVaatimusPakollinenArvot & rajat
Esimerkit: system, user, assistant, tool, function
Ehdot: Nämä roolit esitetään nimenomaisesti lähdekoodin yhteensopivuustyypeissä; mallin täsmällinen roolijoukko pysyy mallikohtaisena.
Riippuu mallista
Oletus—
Kenttämessages[].contentTyyppistring|content_part[]|nullVaatimusValinnainenArvot & rajatOletus—
Kenttämessages[].tool_callsTyyppitool_call[]VaatimusValinnainenArvot & rajatOletus—
Kenttämessages[].tool_call_idTyyppistringVaatimusValinnainenArvot & rajat
Sovelletaan, kun: role=tool; käytä todella palautettua ID:tä
Oletus—
Kenttämessages[].nameTyyppistringVaatimusValinnainenArvot & rajatOletus—
Kenttämessages[].reasoning_contentTyyppistringVaatimusValinnainenArvot & rajat
Sovelletaan, kun: Palauta todella saatu päättely takaisin mallille, kun kyseinen malli käyttää sitä
Oletus—
Kenttämessages[].reasoning_detailsTyyppiobject|arrayVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttämax_tokensTyyppiintegerVaatimusValinnainenArvot & rajat
Vähimmäismäärä: 1
Riippuu mallista
Oletus—
Kenttämax_completion_tokensTyyppiintegerVaatimusValinnainenArvot & rajat
Vähimmäismäärä: 1
Riippuu mallista
Oletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
Kenttästream_options.include_usageTyyppibooleanVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttätemperatureTyyppinumberVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttätop_pTyyppinumberVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttästopTyyppistring|string[]VaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttätoolsTyyppifunction_tool[]VaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttätools[].typeTyyppistringVaatimusValinnainenArvot & rajat
function
Riippuu mallista
Oletus—
Kenttätools[].function.nameTyyppistringVaatimusPakollinenArvot & rajat
Sovelletaan, kun: funktiotyökalu annettu
Oletus—
Kenttätools[].function.descriptionTyyppistringVaatimusValinnainenArvot & rajatOletus—
Kenttätools[].function.parametersTyyppiJSON_schemaVaatimusValinnainenArvot & rajatOletus—
Kenttätool_choiceTyyppistring|objectVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäparallel_tool_callsTyyppibooleanVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäresponse_formatTyyppiobjectVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäreasoning_effortTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäreasoningTyyppiobjectVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäservice_tierTyyppistringVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttäinstructionsTyyppistringVaatimusValinnainenArvot & rajat
Yhteensopivuuskenttä
Oletus—
KenttäfunctionsTyyppifunction[]VaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäfunction_callTyyppistring|objectVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
Kenttäprompt_cache_optionsTyyppiobjectVaatimusValinnainenArvot & rajat
Riippuu mallista
Oletus—
KenttämodalitiesTyyppistring[]VaatimusValinnainenArvot & rajat
text
Oletus—
KenttäproviderTyyppiobjectVaatimusValinnainenArvot & rajat
Ehdot: provider.options hylätään tällä Ultran tekstireitillä
Oletus—
Kenttäcache_control.ttlTyyppistringVaatimusValinnainenArvot & rajat
Ehdot: 1h hylätään varsinaisissa kehotevälimuistin kohdissa
Oletus—
Syöteaineistojen yhdistelmät

Teksti · UTF8-teksti

messages[].content

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametricontent_typeSopimusapplication/json
ParametrirequiredSopimusmodel, messages
Parametrimaterial_typesSopimustext
ParametrimessagesSopimusviestitaulukko role/content-rakenteella
Parametrifile_materialSopimusvarsinainen UTF-8-asiakirja lisätään sellaisenaan tekstinä; tiedoston ID:tä ei päätellä
Parametrioptional_controlsSopimusstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametricontrol_scopeSopimusmallikohtainen; käyttäjän funktiotyökalut eroavat palvelun isännöimistä työkaluista
Parametrioutput_modalitiesSopimustext
Parametrihosted_operationsSopimusfalse
Parametrimultimodal_input_bindingSopimusnull

Elinkaari: synchronous_or_streamed

Lähetä mallin täsmällinen ID yhdessä messages-kentän kanssa.

Kontekstin pituus ei ole tuloksen yläraja.

Tekstitiedosto voi antaa tekstiä sellaisenaan; kuva-, ääni- ja tiedosto-objektisyötteet tarvitsevat täsmällisen sidonnan.

Hinnoittelu

Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.

Nopea tila
Vakiohinta Kun nopea tila on valittu
Flex-tila
Vakiohinta Kun flex-tila on valittu
Päättelyn enimmäisteho
Vakiohinta Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä
Päättelyn teho · suuri
Vakiohinta Kun päättelyn teho on suuri
Päättelyn teho · pieni
Vakiohinta Kun päättelyn teho on pieni
Päättelyn teho · keskitaso
Vakiohinta Kun päättelyn teho on keskitasoa
Eksplisiittisen välimuistin hinnoittelu
Ei käytössä Kun eksplisiittistä välimuistia pyydetään
Päättelytulos
Päättelyyn sovelletaan lueteltua osajoukon hintaa kokonaistuloksen sisällä; älä lisää näitä tokeneita kahdesti. Kun tulos sisältää päättelytokeneita

Ailoot-hinnat

Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

AsetuksetHinnastoKontekstin tokenit, enemmän kuinKontekstin tokenit, enintään raja-arvo mukaan lukienVeloitus
AsetuksetTokenien perushinnatHinnastoPerushintaKontekstin tokenit, enemmän kuin—Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
Tuloste · Päättelyn tulostokenit $0.024 / 1K tokenia
AsetuksetPyynnön pituusluokka 1Hinnasto—Kontekstin tokenit, enemmän kuin0Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000Veloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetPyynnön pituusluokka 2Hinnasto—Kontekstin tokenit, enemmän kuin200 000Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.008 / 1K tokenia
Tuloste · Tulostokenit $0.036 / 1K tokenia
Syöte · Välimuistin luku $0.0008 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Esimerkkipyynnöt

Ailoot Ultra · OpenAI Chat

curlPython SDKPython-suoratoisto
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-3.1-pro-preview", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-3.1-pro-preview',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='google/gemini-3.1-pro-preview',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Vastaanota ja tallenna tulokset

Ailoot Ultra · OpenAI Chat

json tai SSE

Säilytä kaikki valmistuneet tulokset

Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.

Säilytä jokainen vastausvaihtoehto sisältöineen, työkalukutsuineen ja päättelyineen. Kokoa SSE:ssä muutokset vastausvaihtoehdon ja työkalun indeksin mukaan ja säilytä lopullinen päättymissyy sekä käyttötiedot.

Jos alkuperäinen vastaus on tarkistettava

Säilytä pyyntöjen/vastausten ID:t ja otsakkeet. Yleistä tekstityön haku-URL:ää ei anneta.

Vastauksen kentät
KenttäTyyppi
Kenttächoices[].indexTyyppiinteger
Kenttächoices[].message.contentTyyppistring|null
Kenttächoices[].message.tool_callsTyyppitool_call[]
Kenttächoices[].message.reasoning_contentTyyppistring
Kenttächoices[].message.reasoning_detailsTyyppiobject|array
Kenttächoices[].finish_reasonTyyppistring|null
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.

Aliakset

Mallin aliakset

Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview
~google/gemini-pro-latest

Menetelmäpolkujen aliakset

/chat/completions

Liittyvät kutsujan ID:t

google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview

Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.1-pro-preview

google/gemini-3.1-pro-preview

Google /google/gemini-3.1-pro-preview
Mallin ID
  • gemini-3.1-pro-preview
  • google/gemini-3.1-pro-preview

Aloitus

Gemini 3.1 Pro Preview on Googlen multimodaalinen päättelymalli monimutkaisiin ohjelmisto-, algoritmi- ja tietotehtäviin. Se vastaanottaa tekstiä, kuvia, ääntä, videota ja PDF-tiedostoja ja palauttaa tekstiä tai koodia. Se tukee työkaluja ja rakenteista tulostetta. Päättelytasot low, medium ja high ohjaavat työmäärää; dokumentoitu oletus on high.

Hyväksytyt syötteet
Teksti
Tulokset
json · sse

Saatavilla Ailootissa · syötteet & menetelmät

Ailoot Ultra · Anthropic Messages POST /v1/messages
Syötetyypit
text
Tulostyypit
json, sse
Tulosteen muoto
JSON tai SSE
KenttäTyyppiVaatimusArvot & rajatOletus
KenttämodelTyyppistringVaatimusPakollinenArvot & rajat
google/gemini-3.1-pro-preview
Oletus—
KenttämessagesTyyppimessage[]VaatimusPakollinenArvot & rajatOletus—
Kenttämessages[].roleTyyppistringVaatimusPakollinenArvot & rajat
user, assistant
Oletus—
Kenttämessages[].contentTyyppistringVaatimusPakollinenArvot & rajatOletus—
Kenttämax_tokensTyyppiintegerVaatimusPakollinenArvot & rajatOletus—
KenttästreamTyyppibooleanVaatimusValinnainenArvot & rajatOletusfalse
Syöteaineistojen yhdistelmät

Teksti · UTF-8-teksti

messages[].content-merkkijono

Menetelmän parametrit ja elinkaari
ParametriSopimus
Parametricontent_typeSopimusapplication/json
ParametrirequiredSopimusmodel, messages, max_tokens
Parametrioptional_controlsSopimusstream
Parametrimaterial_typesSopimustext
Parametritext_file_materialSopimusLue varsinainen UTF-8-asiakirja ja sijoita sen teksti ilmoitettuun syöte- tai viestisisällön merkkijonoon.

Elinkaari: synchronous_or_streamed

Hinnoittelu

Hintatiedot eivät lisää pyyntövalintoja. Tuetut parametrit on lueteltu valitulle menetelmälle.

Nopea tila
Vakiohinta Kun nopea tila on valittu
Flex-tila
Vakiohinta Kun flex-tila on valittu
Päättelyn enimmäisteho
Vakiohinta Kun päättelyn enimmäistehoon sovelletaan default-oletussäätöä
Päättelyn teho · suuri
Vakiohinta Kun päättelyn teho on suuri
Päättelyn teho · pieni
Vakiohinta Kun päättelyn teho on pieni
Päättelyn teho · keskitaso
Vakiohinta Kun päättelyn teho on keskitasoa
Eksplisiittisen välimuistin hinnoittelu
Ei käytössä Kun eksplisiittistä välimuistia pyydetään
Päättelytulos
Päättelyyn sovelletaan lueteltua osajoukon hintaa kokonaistuloksen sisällä; älä lisää näitä tokeneita kahdesti. Kun tulos sisältää päättelytokeneita

Ailoot-hinnat

Hinnat asetusten mukaan

Kohdista kukin veloitus näytettyihin ehtoihin. Käytä yhtä hintaa kutakin vaihtoehtoisten asetusten ryhmää kohden.

AsetuksetHinnastoKontekstin tokenit, enemmän kuinKontekstin tokenit, enintään raja-arvo mukaan lukienVeloitus
AsetuksetTokenien perushinnatHinnastoPerushintaKontekstin tokenit, enemmän kuin—Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
Tuloste · Päättelyn tulostokenit $0.024 / 1K tokenia
AsetuksetPyynnön pituusluokka 1Hinnasto—Kontekstin tokenit, enemmän kuin0Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000Veloitus
Syöte · Syötetokenit $0.004 / 1K tokenia
Tuloste · Tulostokenit $0.024 / 1K tokenia
Syöte · Välimuistin luku $0.0004 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia
AsetuksetPyynnön pituusluokka 2Hinnasto—Kontekstin tokenit, enemmän kuin200 000Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaaVeloitus
Syöte · Syötetokenit $0.008 / 1K tokenia
Tuloste · Tulostokenit $0.036 / 1K tokenia
Syöte · Välimuistin luku $0.0008 / 1K tokenia
Syöte · Välimuistiin kirjoitus $0.00075 / 1K tokenia
Syöte · Välimuistiin kirjoitus, 1 tunti — / 1K tokenia

Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. Varauksen ja lopullisen veloituksen toiminta →

Esimerkkipyynnöt

Ailoot Ultra · Anthropic Messages

Täydellinen minimaalinen JSON-runkocurl · käytä omaa UTF-8-dokumenttiasiPython · tallenna koko tulos
{
  "model": "google/gemini-3.1-pro-preview",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3.1-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Vastaanota ja tallenna tulokset

Ailoot Ultra · Anthropic Messages

JSON tai SSE

Säilytä kaikki valmistuneet tulokset

Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.

Säilytä kaikki sisältölohkot, päättelyallekirjoitukset ja todelliset työkalukäytön ID:t. Kokoa kaikki SSE-lohkomuutokset; ensimmäinen tekstilohko ei ole koko tulos.

Jos alkuperäinen vastaus on tarkistettava

Säilytä pyyntöjen/vastausten ID:t ja otsakkeet. Yleistä tekstityön haku-URL:ää ei anneta.

Vastauksen kentät
KenttäTyyppi
KenttäidTyyppistring
KenttämodelTyyppistring
Kenttäcontent[]Tyyppitext|thinking|tool_use|other content block
Kenttästop_reasonTyyppistring|null
KenttäusageTyyppiobject
Virheet ja seuraavat vaiheet
VastausEhtoSeuraava vaihe
Vastaus400 · invalid_request_errorEhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvoSeuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä.

Aliakset

Mallin aliakset

Ailoot gemini-3.1-pro-preview
Ailoot Ultra gemini-3.1-pro-preview, google/gemini-3.1-pro-preview
~google/gemini-pro-latest

Menetelmäpolkujen aliakset

/chat/completions

Liittyvät kutsujan ID:t

google/gemini-3.1-pro-preview, ~google/gemini-pro-latest, gemini-3.1-pro-preview, gemini-3.1-pro-preview

FAQ · Google: Gemini 3.1 Pro Preview
Mitä syötteitä ja tuloksia on saatavilla?

POST /v1/messages · gemini-3.1-pro-preview: text, image → text

POST /v1beta/models/{model}:generateContent · gemini-3.1-pro-preview: text, image → text

POST /v1/chat/completions · gemini-3.1-pro-preview: text → text

POST /v1/messages · gemini-3.1-pro-preview: text → json, sse

POST /v1/chat/completions · google/gemini-3.1-pro-preview: text → text

POST /v1/messages · google/gemini-3.1-pro-preview: text → json, sse

Mitä kenttiä pyyntö käyttää?

POST /v1/messages · gemini-3.1-pro-preview: model, messages, system, max_tokens, stream, metadata

POST /v1beta/models/{model}:generateContent · gemini-3.1-pro-preview: contents, systemInstruction, sessionId

POST /v1/chat/completions · gemini-3.1-pro-preview: model, messages, stream

POST /v1/messages · gemini-3.1-pro-preview: model, messages, max_tokens, stream

POST /v1/chat/completions · google/gemini-3.1-pro-preview: model, messages, stream, modalities, provider

POST /v1/messages · google/gemini-3.1-pro-preview: model, messages, max_tokens, stream

Mitä rajoja sovelletaan?

POST /v1/messages · gemini-3.1-pro-preview: ctx: 1048576; max_out: 65536; messages.min_items: 1; max_tokens.minimum: 1

POST /v1beta/models/{model}:generateContent · gemini-3.1-pro-preview: ctx: 1048576; max_out: 65536; contents.min_items: 1

POST /v1/chat/completions · gemini-3.1-pro-preview: messages.min_items: 1

POST /v1/chat/completions · google/gemini-3.1-pro-preview: messages.min_items: 1

Lisätietoja

Yhdistä Ailoot Claude Codeen, OpenCodeen, Hermesiin tai omaan sovellukseesi.

Yritys ja sen projektisalkku

Yritys ja sen projektisalkku: miljoonia asiakkaita; kuukausittainen myynti miljardiluokassa.

Osta tokenit alennuksella.

Tilausalennus säännölliseen käyttöön. Kampanjakoodit — jopa 50% tokeniostoista.

Tilaus
Valitse alennushintainen paketti säännöllisiä pyyntöjäsi varten.
Kampanjakoodi jopa 50%
Syötä koodi oston yhteydessä. Hinta lasketaan uudelleen voimassa olevan kampanjan mukaan.
Kulut historiassa
Malli, tokenit ja summa tallennetaan jokaiselle pyynnölle.

Valitse tilaus · Katso mallihinnat

Yhdistä API tuotteeseen, jonka myyt.

SaaS, sovellukset ja botit Ailootin palveluehtojen ja lisenssisopimuksen mukaisesti. Pyydä edelleenmyyntiin jälleenmyyjälisenssi.

Kaupallinen sovellus
Lisää tekstin, kuvien, videoiden ja äänen luonti palvelusi maksullisiin ominaisuuksiin.
Jälleenmyyjälisenssi
Lähetä projektikuvaus ja pääsyn toteutustapa. Pyydä kirjalliset käyttö- ja jälleenmyyntiehdot.
Asiakirjat verkkosivustolla
Palveluehdot, lisenssisopimus ja tietojenkäsittelykäytäntö ovat saatavilla ennen yhdistämistä.

Pyydä jälleenmyyjälisenssi · Palveluehdot ja lisenssisopimus