Source: https://ailoot.ai/models/fi/gemini-3-1-pro-preview/
Canonical: https://ailoot.ai/models/fi/gemini-3-1-pro-preview/
Language: fi

# Google: Gemini 3.1 Pro Preview

[Markdown](https://ailoot.ai/models/fi/gemini-3-1-pro-preview/index.md) · [JSON](https://ailoot.ai/models/fi/gemini-3-1-pro-preview/facts.json)

## [Google: Gemini 3.1 Pro Preview](https://ailoot.ai/models/fi/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.

- [**Ailoot · Anthropic Messages** `POST /v1/messages` `gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/gemini-3-1-pro-preview/#method-0)
- [**Ailoot · Gemini generateContent** `POST /v1beta/models/{model}:generateContent` `gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/gemini-3-1-pro-preview/#method-1)
- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/gemini-3-1-pro-preview/#method-2)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/gemini-3-1-pro-preview/#method-3)
- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/gemini-3-1-pro-preview/#method-4)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/gemini-3-1-pro-preview/#method-5)

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`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=messages)

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ä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat gemini-3.1-pro-preview | Oletus— |
| Kenttä`messages` | Tyyppi`message[]` | VaatimusPakollinen | Arvot & rajat Kohteiden vähimmäismäärä: 1 | Oletus— |
| Kenttä`messages[].role` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat user, assistant | Oletus— |
| Kenttä`messages[].content` | Tyyppi`string\|content_block[]` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`system` | Tyyppi`string\|content_block[]` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`max_tokens` | Tyyppi`integer` | VaatimusPakollinen | Arvot & rajat Vähimmäismäärä: 1 Rajoitus koskee: valitun mallin/kortin täsmällinen yläraja | Oletus— |
| Kenttä`stream` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat | Oletusfalse |
| Kenttä`temperature` | Tyyppi`number` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`top_p` | Tyyppi`number` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`stop_sequences` | Tyyppi`string[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`tools` | Tyyppi`tool[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`tools[].name` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Sovelletaan, kun: työkalu annettu | Oletus— |
| Kenttä`tools[].description` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`tools[].input_schema` | Tyyppi`JSON_schema` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`tool_choice` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`thinking.type` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`thinking.budget_tokens` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`output_config.effort` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`metadata` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`cache_control` | Tyyppi`object` | VaatimusValinnainen | Arvot & 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

| Parametri | Sopimus |
| --- | --- |
| Parametri`material_types` | Sopimustext, image |
| Parametri`required` | Sopimusmodel, messages, max\_tokens |
| Parametri`optional_controls` | Sopimusnull |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`text_file_material` | Sopimusvarsinainen 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

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 tokeneina | Syöte | Tuloste | Välimuistin luku | Välimuistiin kirjoitus | Välimuisti 5 min | Vä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 →](https://ailoot.ai/docs/fi/billing/reserve/)

#### 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.

| Asetukset | Hinnasto | Kontekstin tokenit, enemmän kuin | Kontekstin tokenit, enintään raja-arvo mukaan lukien | Veloitus |
| --- | --- | --- | --- | --- |
| AsetuksetOpenAI Chat · Tokenien perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000 | Veloitus 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 2 | Hinnasto— | Kontekstin tokenit, enemmän kuin200 000 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000 | Veloitus 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 2 | Hinnasto— | Kontekstin tokenit, enemmän kuin200 000 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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

```bash
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
```

```bash
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
```

```python
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"))
```

```js
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);
```

```python
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ä`id` | Tyyppistring |
| Kenttä`model` | Tyyppistring |
| Kenttä`content[]` | Tyyppitext\|thinking\|tool\_use\|other content block |
| Kenttä`stop_reason` | Tyyppistring\|null |
| Kenttä`usage` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=messages)
**Ailoot Ultra** [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=messages), [`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=messages)
[`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest)

#### Menetelmäpolkujen aliakset

`/chat/completions`

#### Liittyvät kutsujan ID:t

[`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=messages), [`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=messages), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=messages)

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

[`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=gemini)

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ä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`path.model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat gemini-3.1-pro-preview | Oletus— |
| Kenttä`contents` | Tyyppi`content[]` | VaatimusPakollinen | Arvot & rajat Kohteiden vähimmäismäärä: 1 | Oletus— |
| Kenttä`contents[].role` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat user, model | Oletus— |
| Kenttä`contents[].parts` | Tyyppi`part[]` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`systemInstruction` | Tyyppi`content` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`generationConfig.maxOutputTokens` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Vähimmäismäärä: 1 Riippuu mallista | Oletus— |
| Kenttä`generationConfig.temperature` | Tyyppi`number` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`generationConfig.topP` | Tyyppi`number` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`generationConfig.topK` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`generationConfig.stopSequences` | Tyyppi`string[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`generationConfig.thinkingConfig.includeThoughts` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`generationConfig.thinkingConfig.thinkingBudget` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`tools[].functionDeclarations` | Tyyppi`function_declaration[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`toolConfig.functionCallingConfig.mode` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`safetySettings` | Tyyppi`object[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`sessionId` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat | Oletus— |

Syöteaineistojen yhdistelmät

**Teksti** · UTF8-teksti

`contents[].parts[].text`

**Teksti + kuva**

`parts[].inlineData={mimeType,data}`

Menetelmän parametrit ja elinkaari

| Parametri | Sopimus |
| --- | --- |
| Parametri`material_types` | Sopimustext, image |
| Parametri`required` | Sopimuscontents |
| Parametri`optional_controls` | Sopimusnull |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`text_file_material` | Sopimusvarsinainen 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

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 tokeneina | Syöte | Tuloste | Välimuistin luku | Välimuistiin kirjoitus | Välimuisti 5 min | Vä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 →](https://ailoot.ai/docs/fi/billing/reserve/)

#### 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.

| Asetukset | Hinnasto | Kontekstin tokenit, enemmän kuin | Kontekstin tokenit, enintään raja-arvo mukaan lukien | Veloitus |
| --- | --- | --- | --- | --- |
| AsetuksetOpenAI Chat · Tokenien perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000 | Veloitus 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 2 | Hinnasto— | Kontekstin tokenit, enemmän kuin200 000 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000 | Veloitus 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 2 | Hinnasto— | Kontekstin tokenit, enemmän kuin200 000 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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

```bash
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
```

```bash
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
```

```python
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())
```

```js
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);
```

```python
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ä`responseId` | Tyyppistring |
| Kenttä`modelVersion` | Tyyppistring |
| Kenttä`candidates[].content.parts[]` | Tyyppitext\|inlineData\|functionCall\|other part |
| Kenttä`candidates[].finishReason` | Tyyppistring |
| Kenttä`usageMetadata` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=gemini)
**Ailoot Ultra** [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview), [`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview)
[`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest)

#### Menetelmäpolkujen aliakset

`/chat/completions`

#### Liittyvät kutsujan ID:t

[`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview), [`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=gemini), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview)

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

[`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=chat)

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ä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat gemini-3.1-pro-preview | Oletus— |
| Kenttä`messages` | Tyyppi`message[]` | VaatimusPakollinen | Arvot & rajat Kohteiden vähimmäismäärä: 1 | Oletus— |
| Kenttä`messages[].role` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`messages[].content` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Sovelletaan, kun: Tekstikeskustelu | Oletus— |
| Kenttä`stream` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat | Oletusfalse |

Syöteaineistojen yhdistelmät

**Teksti** · UTF8-teksti

`messages[].content`

Menetelmän parametrit ja elinkaari

| Parametri | Sopimus |
| --- | --- |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`required` | Sopimusmodel, messages |
| Parametri`material_types` | Sopimustext |
| Parametri`messages` | Sopimusviestitaulukko role/content-rakenteella |
| Parametri`file_material` | Sopimusvarsinainen UTF-8-asiakirja lisätään sellaisenaan tekstinä; tiedoston ID:tä ei päätellä |
| Parametri`optional_controls` | Sopimusstream |
| Parametri`control_scope` | SopimusTekstikeskustelu; stream on totuusarvo, jonka oletus on false. |
| Parametri`output_modalities` | Sopimustext |
| Parametri`hosted_operations` | Sopimusfalse |
| Parametri`multimodal_input_binding` | Sopimusnull |

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.

| Asetukset | Hinnasto | Kontekstin tokenit, enemmän kuin | Kontekstin tokenit, enintään raja-arvo mukaan lukien | Veloitus |
| --- | --- | --- | --- | --- |
| AsetuksetTokenien perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000 | Veloitus 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 2 | Hinnasto— | Kontekstin tokenit, enemmän kuin200 000 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 →](https://ailoot.ai/docs/fi/billing/reserve/)

### Esimerkkipyynnöt

#### Ailoot Ultra · OpenAI Chat

curlPython SDK

```bash
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
```

```python
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[].index` | Tyyppiinteger |
| Kenttä`choices[].message.content` | Tyyppistring\|null |
| Kenttä`choices[].message.tool_calls` | Tyyppitool\_call\[\] |
| Kenttä`choices[].message.reasoning_content` | Tyyppistring |
| Kenttä`choices[].message.reasoning_details` | Tyyppiobject\|array |
| Kenttä`choices[].finish_reason` | Tyyppistring\|null |
| Kenttä`usage` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview)
**Ailoot Ultra** [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=chat), [`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=chat)
[`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest)

#### Menetelmäpolkujen aliakset

`/chat/completions`

#### Liittyvät kutsujan ID:t

[`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=chat), [`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=chat)

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

[`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=messages)

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ä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat gemini-3.1-pro-preview | Oletus— |
| Kenttä`messages` | Tyyppi`message[]` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`messages[].role` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat user, assistant | Oletus— |
| Kenttä`messages[].content` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`max_tokens` | Tyyppi`integer` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`stream` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat | Oletusfalse |

Syöteaineistojen yhdistelmät

**Teksti** · UTF-8-teksti

`messages[].content-merkkijono`

Menetelmän parametrit ja elinkaari

| Parametri | Sopimus |
| --- | --- |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`required` | Sopimusmodel, messages, max\_tokens |
| Parametri`optional_controls` | Sopimusstream |
| Parametri`material_types` | Sopimustext |
| Parametri`text_file_material` | SopimusLue 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.

| Asetukset | Hinnasto | Kontekstin tokenit, enemmän kuin | Kontekstin tokenit, enintään raja-arvo mukaan lukien | Veloitus |
| --- | --- | --- | --- | --- |
| AsetuksetTokenien perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000 | Veloitus 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 2 | Hinnasto— | Kontekstin tokenit, enemmän kuin200 000 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 →](https://ailoot.ai/docs/fi/billing/reserve/)

### Esimerkkipyynnöt

#### Ailoot Ultra · Anthropic Messages

Täydellinen minimaalinen JSON-runkocurl · käytä omaa UTF-8-dokumenttiasiPython · tallenna koko tulos

```json
{
  "model": "gemini-3.1-pro-preview",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
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
```

```python
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ä`id` | Tyyppistring |
| Kenttä`model` | Tyyppistring |
| Kenttä`content[]` | Tyyppitext\|thinking\|tool\_use\|other content block |
| Kenttä`stop_reason` | Tyyppistring\|null |
| Kenttä`usage` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=messages)
**Ailoot Ultra** [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=messages), [`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=messages)
[`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest)

#### Menetelmäpolkujen aliakset

`/chat/completions`

#### Liittyvät kutsujan ID:t

[`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=messages), [`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=messages), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=messages)

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

[`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=chat)

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ä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat google/gemini-3.1-pro-preview | Oletus— |
| Kenttä`messages` | Tyyppi`message[]` | VaatimusPakollinen | Arvot & rajat Kohteiden vähimmäismäärä: 1 | Oletus— |
| Kenttä`messages[].role` | Tyyppi`string` | VaatimusPakollinen | Arvot & 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[].content` | Tyyppi`string\|content_part[]\|null` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`messages[].tool_calls` | Tyyppi`tool_call[]` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`messages[].tool_call_id` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Sovelletaan, kun: role=tool; käytä todella palautettua ID:tä | Oletus— |
| Kenttä`messages[].name` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`messages[].reasoning_content` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Sovelletaan, kun: Palauta todella saatu päättely takaisin mallille, kun kyseinen malli käyttää sitä | Oletus— |
| Kenttä`messages[].reasoning_details` | Tyyppi`object\|array` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`max_tokens` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Vähimmäismäärä: 1 Riippuu mallista | Oletus— |
| Kenttä`max_completion_tokens` | Tyyppi`integer` | VaatimusValinnainen | Arvot & rajat Vähimmäismäärä: 1 Riippuu mallista | Oletus— |
| Kenttä`stream` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat | Oletusfalse |
| Kenttä`stream_options.include_usage` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`temperature` | Tyyppi`number` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`top_p` | Tyyppi`number` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`stop` | Tyyppi`string\|string[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`tools` | Tyyppi`function_tool[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`tools[].type` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat function Riippuu mallista | Oletus— |
| Kenttä`tools[].function.name` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat Sovelletaan, kun: funktiotyökalu annettu | Oletus— |
| Kenttä`tools[].function.description` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`tools[].function.parameters` | Tyyppi`JSON_schema` | VaatimusValinnainen | Arvot & rajat | Oletus— |
| Kenttä`tool_choice` | Tyyppi`string\|object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`parallel_tool_calls` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`response_format` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`reasoning_effort` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`reasoning` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`service_tier` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`instructions` | Tyyppi`string` | VaatimusValinnainen | Arvot & rajat Yhteensopivuuskenttä | Oletus— |
| Kenttä`functions` | Tyyppi`function[]` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`function_call` | Tyyppi`string\|object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`prompt_cache_options` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Riippuu mallista | Oletus— |
| Kenttä`modalities` | Tyyppi`string[]` | VaatimusValinnainen | Arvot & rajat text | Oletus— |
| Kenttä`provider` | Tyyppi`object` | VaatimusValinnainen | Arvot & rajat Ehdot: provider.options hylätään tällä Ultran tekstireitillä | Oletus— |
| Kenttä`cache_control.ttl` | Tyyppi`string` | VaatimusValinnainen | Arvot & 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

| Parametri | Sopimus |
| --- | --- |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`required` | Sopimusmodel, messages |
| Parametri`material_types` | Sopimustext |
| Parametri`messages` | Sopimusviestitaulukko role/content-rakenteella |
| Parametri`file_material` | Sopimusvarsinainen UTF-8-asiakirja lisätään sellaisenaan tekstinä; tiedoston ID:tä ei päätellä |
| Parametri`optional_controls` | Sopimusstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parametri`control_scope` | Sopimusmallikohtainen; käyttäjän funktiotyökalut eroavat palvelun isännöimistä työkaluista |
| Parametri`output_modalities` | Sopimustext |
| Parametri`hosted_operations` | Sopimusfalse |
| Parametri`multimodal_input_binding` | Sopimusnull |

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.

| Asetukset | Hinnasto | Kontekstin tokenit, enemmän kuin | Kontekstin tokenit, enintään raja-arvo mukaan lukien | Veloitus |
| --- | --- | --- | --- | --- |
| AsetuksetTokenien perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000 | Veloitus 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 2 | Hinnasto— | Kontekstin tokenit, enemmän kuin200 000 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 →](https://ailoot.ai/docs/fi/billing/reserve/)

### Esimerkkipyynnöt

#### Ailoot Ultra · OpenAI Chat

curlPython SDKPython-suoratoisto

```bash
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
```

```python
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"))
```

```python
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[].index` | Tyyppiinteger |
| Kenttä`choices[].message.content` | Tyyppistring\|null |
| Kenttä`choices[].message.tool_calls` | Tyyppitool\_call\[\] |
| Kenttä`choices[].message.reasoning_content` | Tyyppistring |
| Kenttä`choices[].message.reasoning_details` | Tyyppiobject\|array |
| Kenttä`choices[].finish_reason` | Tyyppistring\|null |
| Kenttä`usage` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview)
**Ailoot Ultra** [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=chat), [`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=chat)
[`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest)

#### Menetelmäpolkujen aliakset

`/chat/completions`

#### Liittyvät kutsujan ID:t

[`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=chat), [`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=chat)

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

[`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=messages)

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ä | Tyyppi | Vaatimus | Arvot & rajat | Oletus |
| --- | --- | --- | --- | --- |
| Kenttä`model` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat google/gemini-3.1-pro-preview | Oletus— |
| Kenttä`messages` | Tyyppi`message[]` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`messages[].role` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat user, assistant | Oletus— |
| Kenttä`messages[].content` | Tyyppi`string` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`max_tokens` | Tyyppi`integer` | VaatimusPakollinen | Arvot & rajat | Oletus— |
| Kenttä`stream` | Tyyppi`boolean` | VaatimusValinnainen | Arvot & rajat | Oletusfalse |

Syöteaineistojen yhdistelmät

**Teksti** · UTF-8-teksti

`messages[].content-merkkijono`

Menetelmän parametrit ja elinkaari

| Parametri | Sopimus |
| --- | --- |
| Parametri`content_type` | Sopimusapplication/json |
| Parametri`required` | Sopimusmodel, messages, max\_tokens |
| Parametri`optional_controls` | Sopimusstream |
| Parametri`material_types` | Sopimustext |
| Parametri`text_file_material` | SopimusLue 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.

| Asetukset | Hinnasto | Kontekstin tokenit, enemmän kuin | Kontekstin tokenit, enintään raja-arvo mukaan lukien | Veloitus |
| --- | --- | --- | --- | --- |
| AsetuksetTokenien perushinnat | HinnastoPerushinta | Kontekstin tokenit, enemmän kuin— | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 1 | Hinnasto— | Kontekstin tokenit, enemmän kuin0 | Kontekstin tokenit, enintään raja-arvo mukaan lukien200 000 | Veloitus 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 2 | Hinnasto— | Kontekstin tokenit, enemmän kuin200 000 | Kontekstin tokenit, enintään raja-arvo mukaan lukienEi ylärajaa | Veloitus 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 →](https://ailoot.ai/docs/fi/billing/reserve/)

### Esimerkkipyynnöt

#### Ailoot Ultra · Anthropic Messages

Täydellinen minimaalinen JSON-runkocurl · käytä omaa UTF-8-dokumenttiasiPython · tallenna koko tulos

```json
{
  "model": "google/gemini-3.1-pro-preview",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
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
```

```python
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ä`id` | Tyyppistring |
| Kenttä`model` | Tyyppistring |
| Kenttä`content[]` | Tyyppitext\|thinking\|tool\_use\|other content block |
| Kenttä`stop_reason` | Tyyppistring\|null |
| Kenttä`usage` | Tyyppiobject |

Virheet ja seuraavat vaiheet

| Vastaus | Ehto | Seuraava vaihe |
| --- | --- | --- |
| Vastaus400 · `invalid_request_error` | EhtoVirheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo | Seuraava vaiheKorjaa ilmoitetut kentät ennen uutta luontipyyntöä. |

### Aliakset

#### Mallin aliakset

<strong>Ailoot</strong> [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=messages)
**Ailoot Ultra** [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=messages), [`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=messages)
[`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest)

#### Menetelmäpolkujen aliakset

`/chat/completions`

#### Liittyvät kutsujan ID:t

[`google/gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=google%2Fgemini-3.1-pro-preview&fmt=messages), [`~google/gemini-pro-latest`](https://ailoot.ai/models/fi/#m=~google%2Fgemini-pro-latest), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Core&caller=gemini-3.1-pro-preview&fmt=messages), [`gemini-3.1-pro-preview`](https://ailoot.ai/models/fi/#m=google%2Fgemini-3.1-pro-preview&route=Ultra&caller=gemini-3.1-pro-preview&fmt=messages)

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`

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](https://ailoot.ai/docs/fi/billing/subscriptions/) · [Katso mallihinnat](https://ailoot.ai/models/fi/)

## 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](mailto:support@ailoot.ai) · [Palveluehdot ja lisenssisopimus](https://ailoot.ai/legal/offer?lang=fi)

## Ailoot · Yritys ja sen projektisalkku





Ailoot perustuu kertyneeseen toimintakokemukseen, laajaan asiakaskuntaan, vakaaseen palveluun ja jatkuvaan KPI-seurantaan.





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





Ailoot hyödyntää tätä toimintakokemusta tarjotessaan API-yhteyden tekoälytoimintoihin asiakkaiden tuotteissa, agenteissa, sovelluksissa ja automaatioissa.
