Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)
Nano Banana 2 (Gemini 3.1 Flash Image Preview) kuria ir redaguoja vaizdus pagal tekstą bei vizualinius pavyzdžius. Dokumentuotos jo stiprybės – objektų nuoseklumas, tekstas vaizde ir lokalizavimas, pakeitimai pokalbio metu ir kūrybinis kompozicijos, kraštinių santykio bei raiškos valdymas.
- Ailoot Ultra · OpenAI pokalbis
POST /v1/chat/completionsgoogle/gemini-3.1-flash-image-preview - Ailoot Ultra · Vaizdai
POST /v1/images/generationsgoogle/gemini-3.1-flash-image-preview - Ailoot Ultra · Anthropic pranešimai
POST /v1/messagesgoogle/gemini-3.1-flash-image-preview
Apie modelį
Šis aprašas apima modelio galimybes. Pasirinktam metodui Ailoot prieinamos įvestys, išvestys ir parinktys nurodytos toliau.
Nano Banana 2 – Google Gemini 3.1 Flash Image modelis vaizdams generuoti ir redaguoti pokalbio metu. Šiame įraše išsaugotas tikslus Preview pavadinimas. Rašytinis aprašymas gali apibrėžti naują vaizdą, o įvesties vaizdas – keičiamą objektą, išvaizdą ar kompoziciją. Rezultate gali būti vaizdas ir lydintis tekstas. Google pristatymo medžiagoje pabrėžiamos pasaulio žinios, teksto atvaizdavimas ir objektų nuoseklumas, taip pat galimybė tobulinti sceną susijusiais pokalbio ėjimais.
Pagrįstai vizualinei kūrybai dokumentuotas modelis gali naudoti žiniatinklio ir vaizdų paieškos informaciją generavimui. Tai padeda atlikti tokias užduotis kaip vietovės įkvėpta iliustracija arba pateikta informacija paremta schema. Apibrėžkite šaltinio faktus, kuriuos būtina perteikti, ir atskirkite juos nuo meninių pasirinkimų. Paieška paremtas generavimas nepaverčia kiekvienos galutinio paveikslo detalės patikrintu teiginiu. Jei produktas, lankytinas objektas ar schema turi būti tikslūs, pateikite autoritetingą pavyzdį ir pagal jį patikrinkite išvestį.
Pristatyme aprašytas geresnis teksto vaizde atvaizdavimas ir lokalizavimas. Plakatui, infografikui ar rinkodaros maketui pateikite tikslias formuluotes, kalbą ir kiekvieno teksto elemento vaidmenį. Pirmiausia patvirtinkite tekstą, tada prašykite vaizdo su juo, kaip rekomenduojama vaizdų vadove. Paaiškinkite skaitymo tvarką ir santykinį akcentavimą, kad antraštė, prierašas ir schemos žyma nebūtų supainioti. Prieš naudodami vaizdą leidinyje patikrinkite rašybą, skyrybą ir žymos ryšį su iliustruotu elementu.
Kūrybiniai valdikliai apima kraštinių santykį ir raišką. Leidime prie 1K, 2K ir 4K pasirinkimų pridedama 512 pikselių išvestis, taip pat 4:1, 1:4, 8:1 ir 1:8 kraštinių santykiai. Kūrėjo vadove minimal samprotavimas nurodytas kaip numatytasis, o high – kaip sudėtingesnių kompozicijų parinktis. Prieš kompoziciją pasirinkite numatomą naudojimą: vertikaliai istorijai, plačiam reklaminiam skydeliui ir kompaktiškai schemai reikia skirtingos erdvės objektui bei užrašams. Šie nustatymai aprašo gamintojo šios linijos generavimo eigą, o ne automatinį esamo užbaigto artefakto dydžio keitimą.
Objektų nuoseklumui pažymėkite kiekvieno pavyzdžio vaidmenį: produkto išvaizda, personažo tapatybė, fonas ar vizualinis stilius. Nurodykite išsaugotinas detales, tada įvardykite keičiamus elementus. Originalioje užduotyje galima pateiktą produkto nuotrauką perkelti į naują sceną, išlaikant jo formą, medžiagą ir matomą prekės ženklo atributiką. Iliustruotai sekai naudokite tuos pačius pavyzdžius ir apibrėžkite, kurios konkrečių scenų detalės keičiasi. Daugiau pavyzdžių nepakeičia aiškaus paaiškinimo, ką kiekvienas vaizdas duoda užduočiai.
Redagavimas pokalbio metu naudingas konkrečiai pataisai. Paprašykite pakoreguoti vieną objektą, foną ar apšvietimą išsaugant priimtą kompoziciją. Gamintojo vadove aprašomas semantinis maskavimas, kai redaguojama sritis nurodoma žodžiais. Kelių ėjimų darbui pasirinktoje sąsajoje išsaugokite pokalbį ir reikalingus samprotavimo konteksto metaduomenis; Gemini 3 vadove paaiškinama, kad samprotavimo parašai padeda perduoti šį kontekstą. Nepakeistos srities aprašymas yra instrukcija, kurią reikia patikrinti pagal originalą, o ne garantija, kad kiekvienas pikselis liks identiškas.
Gemini 3 kūrėjo lentelėje tiesiogiai įvardytas gemini-3.1-flash-image-preview su 128K įvesties ir 32K išvesties biudžetu. Fiksuodami generavimą išsaugokite tikslų Preview modelio pavadinimą. Prieinamus pavyzdžių, išvesties ir raiškos nustatymus išsaugokite kartu su šaltinio vaizdais ir užklausa, kad pataisą būtų galima nuosekliai atkartoti. Taisydami naudokite tuos pačius šaltinio pavyzdžius ir nurodykite tikslų vizualinį pakeitimą, išsaugodami priimtą kiekvienos įvesties vaidmenį.
Vaizdų vadove įspėjama, kad prašomo vaizdų skaičiaus gali būti laikomasi ne visada, ir nurodomas sugeneruotų vaizdų SynthID ženklinimas. Patikrinkite visus grąžintus vaizdus ir bet kokį lydintį tekstą, užuot manę, kad rezultatas yra vienas nekintamas paveikslas. Numatomu rodymo dydžiu patikrinkite objekto tapatybę, objektų skaičių, formuluotes vaizde, kompoziciją ir atitiktį pavyzdžiams. Sudėtingai scenai komponentus nurodykite logine tvarka ir norimą išvaizdą aprašykite teigiamai. Naudingas rezultatas – patikrintas vizualinis artefaktas su išsaugotais šaltinio pavyzdžiais ir tiksliu modelio pavadinimu kitam redagavimui.
Praktinė užduotis
Praktinė užduotis
Techninis pavyzdys anglų kalba
Create a four-stage growing guide
Create a friendly flat illustration for a gardening guide showing four tomato-growing stages from left to right: seed in soil, small seedling, leafy plant, mature plant with red tomatoes. Use a warm cream background, consistent pots and simple green shapes. Keep each stage clearly separated. Include no text, numbers, labels or decorative extra plants.Laukiamas rezultatas
An image with four distinct growing stages in the specified order and a consistent illustration style.Rezultato patikra
Inspect the actual image for exactly four stages, the left-to-right progression and absence of text or extra plants.Ailoot Ultra · OpenAI pokalbis POST /v1/chat/completions google/gemini-3.1-flash-image-preview
google/gemini-3.1-flash-image-preview
google/gemini-3.1-flash-image-previewPradžia
Nano Banana 2 (Gemini 3.1 Flash Image Preview) kuria ir redaguoja vaizdus pagal tekstą bei vizualinius pavyzdžius. Dokumentuotos jo stiprybės – objektų nuoseklumas, tekstas vaizde ir lokalizavimas, pakeitimai pokalbio metu ir kūrybinis kompozicijos, kraštinių santykio bei raiškos valdymas.
- Leidžiamos įvestys
- Tekstas
- Rezultatai
- Tekstas
Prieinama Ailoot · įvestys ir metodai
Ailoot Ultra · OpenAI pokalbis POST /v1/chat/completions
- Įvestis
text- Išvestis
text- Išvesties formatas
- json arba SSE
| Laukas | Tipas | Reikalavimas | Reikšmės ir ribos | Numatyta |
|---|---|---|---|---|
Laukasmodel | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos google/gemini-3.1-flash-image-preview | Numatyta— |
Laukasmessages | Tipasmessage[] | ReikalavimasPrivaloma | Reikšmės ir ribos Mažiausias elementų skaičius: 1 | Numatyta— |
Laukasmessages[].role | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos Pavyzdžiai: system, user, assistant, tool, function Sąlygos: Šie vaidmenys aiškiai išreikšti šaltinio kodo suderinamumo tipuose; tikslus vaidmenų rinkinys priklauso nuo konkretaus modelio. Priklauso nuo modelio | Numatyta— |
Laukasmessages[].content | Tipasstring|content_part[]|null | ReikalavimasNeprivaloma | Reikšmės ir ribos | Numatyta— |
Laukasmessages[].tool_calls | Tipastool_call[] | ReikalavimasNeprivaloma | Reikšmės ir ribos | Numatyta— |
Laukasmessages[].tool_call_id | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos Taikoma, kai: role=tool; naudokite tikrąjį grąžintą ID | Numatyta— |
Laukasmessages[].name | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos | Numatyta— |
Laukasmessages[].reasoning_content | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos Taikoma, kai: Grąžinkite tikrąjį gautą samprotavimą ten, kur šis modelis jį naudoja | Numatyta— |
Laukasmessages[].reasoning_details | Tipasobject|array | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasmax_tokens | Tipasinteger | ReikalavimasNeprivaloma | Reikšmės ir ribos Mažiausia reikšmė: 1 Priklauso nuo modelio | Numatyta— |
Laukasmax_completion_tokens | Tipasinteger | ReikalavimasNeprivaloma | Reikšmės ir ribos Mažiausia reikšmė: 1 Priklauso nuo modelio | Numatyta— |
Laukasstream | Tipasboolean | ReikalavimasNeprivaloma | Reikšmės ir ribos | Numatytafalse |
Laukasstream_options.include_usage | Tipasboolean | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukastemperature | Tipasnumber | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukastop_p | Tipasnumber | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasstop | Tipasstring|string[] | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukastools | Tipasfunction_tool[] | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukastools[].type | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos function Priklauso nuo modelio | Numatyta— |
Laukastools[].function.name | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos Taikoma, kai: pateiktas funkcijos tipo įrankis | Numatyta— |
Laukastools[].function.description | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos | Numatyta— |
Laukastools[].function.parameters | TipasJSON_schema | ReikalavimasNeprivaloma | Reikšmės ir ribos | Numatyta— |
Laukastool_choice | Tipasstring|object | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasparallel_tool_calls | Tipasboolean | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasresponse_format | Tipasobject | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasreasoning_effort | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasreasoning | Tipasobject | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasservice_tier | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasinstructions | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos Suderinamumo laukas | Numatyta— |
Laukasfunctions | Tipasfunction[] | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasfunction_call | Tipasstring|object | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasprompt_cache_options | Tipasobject | ReikalavimasNeprivaloma | Reikšmės ir ribos Priklauso nuo modelio | Numatyta— |
Laukasmodalities | Tipasstring[] | ReikalavimasNeprivaloma | Reikšmės ir ribos text | Numatyta— |
Laukasprovider | Tipasobject | ReikalavimasNeprivaloma | Reikšmės ir ribos Sąlygos: provider.options šiame Ultra teksto maršrute atmetamas | Numatyta— |
Laukascache_control.ttl | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos Sąlygos: 1h atmetamas tikrosiose užklausų podėlio vietose | Numatyta— |
Įvesties medžiagos deriniai
Tekstas · UTF8 tekstas
messages[].content
Metodo parametrai ir gyvavimo ciklas
| Parametras | Specifikacija |
|---|---|
Parametrascontent_type | Specifikacijaapplication/json |
Parametrasrequired | Specifikacijamodel, messages |
Parametrasmaterial_types | Specifikacijatext |
Parametrasmessages | Specifikacijapranešimų masyvas su role/content struktūra |
Parametrasfile_material | Specifikacijatikrasis UTF-8 dokumentas įterptas kaip pažodinis tekstas; failo ID nenumanomas |
Parametrasoptional_controls | Specifikacijastream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Parametrascontrol_scope | Specifikacijapriklauso nuo modelio; naudotojo funkcijų įrankiai skiriasi nuo priglobtų įrankių |
Parametrasoutput_modalities | Specifikacijatext |
Parametrashosted_operations | Specifikacijafalse |
Parametrasmultimodal_input_binding | Specifikacijanull |
Gyvavimo ciklas: synchronous_or_streamed
Siųskite tikslų modelio ID kartu su messages.
Konteksto ilgis nėra išvesties limitas.
Teksto failas gali pateikti pažodinį tekstą; vaizdų / garso / failų objektų įvestims reikia tikslaus susiejimo.
Planai
Tarifų informacija neprideda užklausos parinkčių. Palaikomi parametrai nurodyti prie pasirinkto metodo.
- Spartusis režimas
- Standartinis įkainis Pasirinkus spartųjį režimą
- Flex režimas
- Standartinis įkainis Pasirinkus flex režimą
- Didžiausios samprotavimo pastangos
- Standartinis įkainis Kai didžiausioms samprotavimo pastangoms taikomas numatytasis koregavimas (default)
- Samprotavimo pastangos · high
- Standartinis įkainis Kai samprotavimo pastangų lygis yra high
- Samprotavimo pastangos · minimal
- Standartinis įkainis Kai samprotavimo pastangų lygis yra minimal
- Išreikštinio podėlio kainodara
- Neįjungta Kai prašoma išreikštinio podėlio
Ailoot įkainiai
Kainos pagal konfigūraciją
Kiekvieną mokestį susiekite su nurodytomis sąlygomis. Kiekvienam alternatyvių konfigūracijų rinkiniui taikykite vieną įkainį.
| Konfigūracija | Įkainių lentelė | Konteksto tokenų daugiau nei | Konteksto tokenų iki imtinai | Mokestis |
|---|---|---|---|---|
| KonfigūracijaBaziniai žetonų įkainiai | Įkainių lentelėBazinis įkainis | Konteksto tokenų daugiau nei— | Konteksto tokenų iki imtinaiBe viršutinės ribos | Mokestis Įvestis · Įvesties tokenai $0.001 / 1K tokenų Išvestis · Išvesties tokenai $0.006 / 1K tokenų Įvestis · Talpyklos skaitymas — / 1K tokenų Įvestis · Rašymas į talpyklą — / 1K tokenų Įvestis · Rašymas į talpyklą, 1 val — / 1K tokenų Išvestis · Vaizdo išvesties žetonai $0.12 / 1K vaizdo tokenų |
| KonfigūracijaUžklausos ilgio pakopa 1 | Įkainių lentelė— | Konteksto tokenų daugiau nei0 | Konteksto tokenų iki imtinaiBe viršutinės ribos | Mokestis Įvestis · Įvesties tokenai $0.001 / 1K tokenų Išvestis · Išvesties tokenai $0.006 / 1K tokenų Įvestis · Talpyklos skaitymas — / 1K tokenų Įvestis · Rašymas į talpyklą — / 1K tokenų Įvestis · Rašymas į talpyklą, 1 val — / 1K tokenų |
Informacinio tarifo duomenys
Modelio informacinės lentelės nekeičia metodo pasirinkimo, kainos įverčių ar mokesčių. Galiojantys mokesčiai nustatomi pagal pasirinkto Ailoot metodo įkainius.
google/gemini-3.1-flash-image-preview
Kainos pagal konfigūraciją
| Konfigūracija | Apmokestinimo sąlygos | Mokestis |
|---|---|---|
| Konfigūracijagoogle/gemini-3.1-flash-image-preview · Numatytoji konfigūracija | Apmokestinimo sąlygosNumatytoji konfigūracija | Mokestis Įvestis · Įvestis 0,001 USD / 1K tokenų Išvestis · Išvestis 0,12 USD / 1K tokenų |
google/gemini-3.1-flash-image-preview
Kainos pagal konfigūraciją
| Konfigūracija | Apmokestinimo sąlygos | Mokestis |
|---|---|---|
| Konfigūracijagoogle/gemini-3.1-flash-image-preview · Numatytoji konfigūracija | Apmokestinimo sąlygosNumatytoji konfigūracija | Mokestis Įvestis · Įvestis 0,001 USD / 1K tokenų Išvestis · Išvestis 0,12 USD / 1K tokenų |
google/gemini-3.1-flash-image-preview
Kainos pagal konfigūraciją
| Konfigūracija | Apmokestinimo sąlygos | Mokestis |
|---|---|---|
| Konfigūracijagoogle/gemini-3.1-flash-image-preview · Numatytoji konfigūracija | Apmokestinimo sąlygosNumatytoji konfigūracija | Mokestis Įvestis · Įvestis 0,00 USD už iškvietimą Išvestis · Išvestis 0,16 USD už iškvietimą |
google/gemini-3.1-flash-image-preview
Kainos pagal konfigūraciją
| Konfigūracija | Apmokestinimo sąlygos | Mokestis |
|---|---|---|
| Konfigūracijagoogle/gemini-3.1-flash-image-preview · Numatytoji konfigūracija | Apmokestinimo sąlygosNumatytoji konfigūracija | Mokestis Įvestis · Įvestis 0,00 USD už iškvietimą Išvestis · Išvestis 0,32 USD už iškvietimą |
google/gemini-3.1-flash-image-preview
Kainos pagal konfigūraciją
| Konfigūracija | Apmokestinimo sąlygos | Mokestis |
|---|---|---|
| Konfigūracijagoogle/gemini-3.1-flash-image-preview · Numatytoji konfigūracija | Apmokestinimo sąlygosNumatytoji konfigūracija | Mokestis Įvestis · Įvestis 0,00 USD už iškvietimą Išvestis · Išvestis 0,00 USD už iškvietimą |
Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)
Kainos pagal konfigūraciją
| Konfigūracija | Apmokestinimo sąlygos | Mokestis |
|---|---|---|
| KonfigūracijaGoogle: Nano Banana 2 (Gemini 3.1 Flash Image Preview) · Numatytoji konfigūracija | Apmokestinimo sąlygosNumatytoji konfigūracija | Mokestis Įvestis · Įvesties tokenai 0,001 USD / 1K tokenų Išvestis · Išvesties tokenai 0,006 USD / 1K tokenų Išvestis · Išvesties vaizdas 0,12 USD / 1K tokenų Išvestis · Paieška žiniatinklyje 0,028 USD už paiešką |
Ailoot prieš užklausą rezervuoja numatomą sumą. Gavus rezultatą, galutinis mokestis nuskaitomas pagal išmatuotą naudojimą. Srautinio atsakymo atsiskaitymui naudojamas galutinis naudojimo įrašas. Kaip veikia rezervavimas ir atsiskaitymas →
Užklausų pavyzdžiai
Ailoot Ultra · OpenAI pokalbis
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-flash-image-preview", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-3.1-flash-image-preview',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.chat.completions.stream(model='google/gemini-3.1-flash-image-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")
Gauti ir išsaugoti rezultatus
Ailoot Ultra · OpenAI pokalbis
json arba SSE
Išsaugoti visus baigtus rezultatus
Išsaugokite kiekvieną visą grąžintą atsakymą, failą ir turinio dalį.
Išsaugokite kiekvieną variantą ir jo turinį / įrankių iškvietimus / samprotavimą. SSE prieaugius surinkite pagal varianto / įrankio indeksą; išsaugokite galutinę užbaigimo priežastį ir naudojimo duomenis.
Jei reikia patikrinti pradinį atsakymą
Išsaugokite užklausų / atsakymų ID ir antraštes. Bendras teksto užduoties gavimo URL nepateikiamas.
Atsakymo laukai
| Laukas | Tipas |
|---|---|
Laukaschoices[].index | Tipasinteger |
Laukaschoices[].message.content | Tipasstring|null |
Laukaschoices[].message.tool_calls | Tipastool_call[] |
Laukaschoices[].message.reasoning_content | Tipasstring |
Laukaschoices[].message.reasoning_details | Tipasobject|array |
Laukaschoices[].finish_reason | Tipasstring|null |
Laukasusage | Tipasobject |
Klaidos ir tolesni veiksmai
| Atsakymas | Sąlyga | Kitas žingsnis |
|---|---|---|
Atsakymas400 · invalid_request_error | SąlygaNetinkami privalomi laukai, medžiagos pateikimo forma arba parametro reikšmė | Kitas žingsnisPrieš naują kūrimo užklausą pataisykite nurodytus laukus. |
Pseudonimai
Modelių pseudonimai
Ailoot Ultra google/gemini-3.1-flash-image-preview
Metodų kelių pseudonimai
/v1/images
Susiję ID iškvietimui
Ailoot Ultra · Vaizdai POST /v1/images/generations google/gemini-3.1-flash-image-preview
google/gemini-3.1-flash-image-preview
google/gemini-3.1-flash-image-previewPradžia
Nano Banana 2 (Gemini 3.1 Flash Image Preview) kuria ir redaguoja vaizdus pagal tekstą bei vizualinius pavyzdžius. Dokumentuotos jo stiprybės – objektų nuoseklumas, tekstas vaizde ir lokalizavimas, pakeitimai pokalbio metu ir kūrybinis kompozicijos, kraštinių santykio bei raiškos valdymas.
- Leidžiamos įvestys
- Tekstas · Vaizdai
- Rezultatai
- Vaizdai
Prieinama Ailoot · įvestys ir metodai
Ailoot Ultra · Vaizdai POST /v1/images/generations
- Įvestis
text,image- Išvestis
image
| Laukas | Tipas | Reikalavimas | Reikšmės ir ribos | Numatyta |
|---|---|---|---|---|
Laukasmodel | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos google/gemini-3.1-flash-image-preview | Numatyta— |
Laukasprompt | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos Mažiausias ilgis: 1 | Numatyta— |
Laukasresolution | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos 512, 1K, 2K, 4K | Numatyta— |
Laukasaspect_ratio | Tipasstring | ReikalavimasNeprivaloma | Reikšmės ir ribos 1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9 | Numatyta— |
Laukasn | Tipasinteger | ReikalavimasNeprivaloma | Reikšmės ir ribos Mažiausia reikšmė: 1 Didžiausia reikšmė: 1 | Numatyta— |
Laukasinput_references | Tipasarray | ReikalavimasNeprivaloma | Reikšmės ir ribos Mažiausias elementų skaičius: 0 Didžiausias elementų skaičius: 14 | Numatyta— |
Laukasprovider | Tipasobject | ReikalavimasNeprivaloma | Reikšmės ir ribos | Numatyta— |
Metodo parametrai ir gyvavimo ciklas
| Parametras | Specifikacija |
|---|---|
Parametrascontent_type | Specifikacijaapplication/json |
Parametrasrequired | Specifikacijamodel, prompt |
Parametrasmaterial_types | Specifikacijatext, image |
Gyvavimo ciklas: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · faktiškai grąžinta task_id reikšmė arba medijos bibliotekos įrašas
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Planai
Kaip apskaičiuojamas galutinis mokestis
Rodomi įkainiai leidžia įvertinti kainą prieš generavimą. Galutinė suma apskaičiuojama pagal užfiksuotą pradinio generavimo kainą. Išmatuota rezultato trukmė ir prognozuoti kiekiai nėra galutinis apmokestinamas kiekis.
Tarifų informacija neprideda užklausos parinkčių. Palaikomi parametrai nurodyti prie pasirinkto metodo.
- Spartusis režimas
- Nenurodyta Pasirinkus spartųjį režimą
- Flex režimas
- Nenurodyta Pasirinkus flex režimą
- Didžiausios samprotavimo pastangos
- Nenurodyta Kai didžiausioms samprotavimo pastangoms taikomas numatytasis koregavimas (default)
Numatomi įkainiai palyginimui
Kainos pagal konfigūraciją
Kiekvieną mokestį susiekite su nurodytomis sąlygomis. Kiekvienam alternatyvių konfigūracijų rinkiniui taikykite vieną įkainį.
| Konfigūracija | Įkainių lentelė | Numatomas kiekis | Mokestis |
|---|---|---|---|
| KonfigūracijaBaziniai žetonų įkainiai | Įkainių lentelėBazinis įkainis | Numatomas kiekis— | Mokestis Įvestis · Įvesties tokenai · Įvertis tik palyginimui — / 1K tokenų Išvestis · Išvesties tokenai · Įvertis tik palyginimui — / 1K tokenų Įvestis · Talpyklos skaitymas · Įvertis tik palyginimui — / 1K tokenų Įvestis · Rašymas į talpyklą · Įvertis tik palyginimui — / 1K tokenų Įvestis · Rašymas į talpyklą, 1 val · Įvertis tik palyginimui — / 1K tokenų |
| KonfigūracijaNumatoma generavimo kaina | Įkainių lentelė— | Numatomas kiekisvieno generavimo įvertis | Mokestis Išvestis · Numatoma generavimo kaina · Įvertis tik palyginimui $0.49152 įvertis prieš generavimą Šis įvertis nėra papildomas mokestis ar fiksuotas užbaigto generavimo įkainis. |
Ailoot prieš užklausą rezervuoja numatomą sumą. Gavus rezultatą, galutinis mokestis nuskaitomas pagal išmatuotą naudojimą. Srautinio atsakymo atsiskaitymui naudojamas galutinis naudojimo įrašas. Kaip veikia rezervavimas ir atsiskaitymas →
Užklausų pavyzdžiai
Ailoot Ultra · Vaizdai
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'google/gemini-3.1-flash-image-preview', 'prompt': 'a red panda astronaut floating in space, studio lighting'}
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/images/generations \
-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 base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin
def save_images(items):
if not items: raise SystemExit("No completed images; retain the full response")
for index, item in enumerate(items):
encoded=item.get("b64_json")
uri=item.get("url", "")
if not encoded and uri.startswith("data:image/"):
header, separator, encoded=uri.partition(",")
if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
if encoded:
raw=base64.b64decode(encoded,validate=True)
elif uri:
uri=urljoin("https://api.ailoot.ai",uri)
parsed=urlsplit(uri)
if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
raise SystemExit("Invalid returned image URL")
owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
args=["curl","--fail-with-body","--silent","--show-error",uri]
if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
temporary=Path(f"image-{index}.bin")
subprocess.run(args+["-o",str(temporary)],check=True)
raw=temporary.read_bytes()
temporary.unlink()
else: raise SystemExit("Image has neither bytes nor URL")
if not raw: raise SystemExit("Empty image result")
ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
Path(f"image-{index}.{ext}").write_bytes(raw)
print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
Gauti ir išsaugoti rezultatus
Ailoot Ultra · Vaizdai
Atsisiųskite kiekvieną grąžintą vaizdą arba išsaugokite jo Base64 turinį
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Kito turinio skaitymas
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Išsaugoti visus baigtus rezultatus
Išsaugokite kiekvieną baigtą vaizdą; gaukite turinį iš kiekvieno grąžinto URL arba dekoduokite jo Base64 turinį.
Išsaugokite visą atsakymą ir antraštes, visus faktiškai gautus rezultatus, pradinius grąžintus identifikatorius ir visus naudojimo apskaitos laukus. Atkurkite prieigą prie pradinės operacijos pakartotinai neteikdami kūrimo užklausos.
Jei reikia patikrinti pradinį atsakymą
Išsaugokite grąžintą X-Client-Request-ID duomenims sutikrinti. Tikrinkite tik faktiškai grąžintas task_id/asset_id reikšmes arba jums priklausančią medijos biblioteką; niekada nekurkite užduoties URL iš operacijos ID ir niekada pakartotinai neteikite kūrimo užklausos.
Atsakymo laukai
| Laukas | Tipas |
|---|---|
Laukascreated | Tipas |
Laukasdata[].url | Tipas |
Laukasdata[].b64_json | Tipas |
Laukasusage | Tipas |
Pseudonimai
Modelių pseudonimai
Ailoot Ultra google/gemini-3.1-flash-image-preview
Metodų kelių pseudonimai
/v1/images
Susiję ID iškvietimui
Ailoot Ultra · Anthropic pranešimai POST /v1/messages google/gemini-3.1-flash-image-preview
google/gemini-3.1-flash-image-preview
google/gemini-3.1-flash-image-previewPradžia
Nano Banana 2 (Gemini 3.1 Flash Image Preview) kuria ir redaguoja vaizdus pagal tekstą bei vizualinius pavyzdžius. Dokumentuotos jo stiprybės – objektų nuoseklumas, tekstas vaizde ir lokalizavimas, pakeitimai pokalbio metu ir kūrybinis kompozicijos, kraštinių santykio bei raiškos valdymas.
- Leidžiamos įvestys
- Tekstas
- Rezultatai
- json · sse
Prieinama Ailoot · įvestys ir metodai
Ailoot Ultra · Anthropic pranešimai POST /v1/messages
- Įvestis
text- Išvestis
json,sse- Išvesties formatas
- JSON arba SSE
| Laukas | Tipas | Reikalavimas | Reikšmės ir ribos | Numatyta |
|---|---|---|---|---|
Laukasmodel | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos google/gemini-3.1-flash-image-preview | Numatyta— |
Laukasmessages | Tipasmessage[] | ReikalavimasPrivaloma | Reikšmės ir ribos | Numatyta— |
Laukasmessages[].role | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos user, assistant | Numatyta— |
Laukasmessages[].content | Tipasstring | ReikalavimasPrivaloma | Reikšmės ir ribos | Numatyta— |
Laukasmax_tokens | Tipasinteger | ReikalavimasPrivaloma | Reikšmės ir ribos | Numatyta— |
Laukasstream | Tipasboolean | ReikalavimasNeprivaloma | Reikšmės ir ribos | Numatytafalse |
Įvesties medžiagos deriniai
Tekstas · UTF-8 tekstas
messages[].content eilutė
Metodo parametrai ir gyvavimo ciklas
| Parametras | Specifikacija |
|---|---|
Parametrascontent_type | Specifikacijaapplication/json |
Parametrasrequired | Specifikacijamodel, messages, max_tokens |
Parametrasoptional_controls | Specifikacijastream |
Parametrasmaterial_types | Specifikacijatext |
Parametrastext_file_material | SpecifikacijaPerskaitykite tikrąjį UTF-8 dokumentą ir įterpkite jo tekstą į nurodytą input lauką arba pranešimo turinio eilutę. |
Gyvavimo ciklas: synchronous_or_streamed
Planai
Tarifų informacija neprideda užklausos parinkčių. Palaikomi parametrai nurodyti prie pasirinkto metodo.
- Spartusis režimas
- Standartinis įkainis Pasirinkus spartųjį režimą
- Flex režimas
- Standartinis įkainis Pasirinkus flex režimą
- Didžiausios samprotavimo pastangos
- Standartinis įkainis Kai didžiausioms samprotavimo pastangoms taikomas numatytasis koregavimas (default)
- Samprotavimo pastangos · high
- Standartinis įkainis Kai samprotavimo pastangų lygis yra high
- Samprotavimo pastangos · minimal
- Standartinis įkainis Kai samprotavimo pastangų lygis yra minimal
- Išreikštinio podėlio kainodara
- Neįjungta Kai prašoma išreikštinio podėlio
Ailoot įkainiai
Kainos pagal konfigūraciją
Kiekvieną mokestį susiekite su nurodytomis sąlygomis. Kiekvienam alternatyvių konfigūracijų rinkiniui taikykite vieną įkainį.
| Konfigūracija | Įkainių lentelė | Konteksto tokenų daugiau nei | Konteksto tokenų iki imtinai | Mokestis |
|---|---|---|---|---|
| KonfigūracijaBaziniai žetonų įkainiai | Įkainių lentelėBazinis įkainis | Konteksto tokenų daugiau nei— | Konteksto tokenų iki imtinaiBe viršutinės ribos | Mokestis Įvestis · Įvesties tokenai $0.001 / 1K tokenų Išvestis · Išvesties tokenai $0.006 / 1K tokenų Įvestis · Talpyklos skaitymas — / 1K tokenų Įvestis · Rašymas į talpyklą — / 1K tokenų Įvestis · Rašymas į talpyklą, 1 val — / 1K tokenų Išvestis · Vaizdo išvesties žetonai $0.12 / 1K vaizdo tokenų |
| KonfigūracijaUžklausos ilgio pakopa 1 | Įkainių lentelė— | Konteksto tokenų daugiau nei0 | Konteksto tokenų iki imtinaiBe viršutinės ribos | Mokestis Įvestis · Įvesties tokenai $0.001 / 1K tokenų Išvestis · Išvesties tokenai $0.006 / 1K tokenų Įvestis · Talpyklos skaitymas — / 1K tokenų Įvestis · Rašymas į talpyklą — / 1K tokenų Įvestis · Rašymas į talpyklą, 1 val — / 1K tokenų |
Ailoot prieš užklausą rezervuoja numatomą sumą. Gavus rezultatą, galutinis mokestis nuskaitomas pagal išmatuotą naudojimą. Srautinio atsakymo atsiskaitymui naudojamas galutinis naudojimo įrašas. Kaip veikia rezervavimas ir atsiskaitymas →
Užklausų pavyzdžiai
Ailoot Ultra · Anthropic pranešimai
{
"model": "google/gemini-3.1-flash-image-preview",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3.1-flash-image-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3.1-flash-image-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))
Gauti ir išsaugoti rezultatus
Ailoot Ultra · Anthropic pranešimai
JSON arba SSE
Išsaugoti visus baigtus rezultatus
Išsaugokite kiekvieną visą grąžintą atsakymą, failą ir turinio dalį.
Išsaugokite visus turinio blokus, mąstymo parašus ir tikruosius įrankių naudojimo ID. Surinkite visus SSE blokų prieaugius; pirmasis teksto blokas nėra visa išvestis.
Jei reikia patikrinti pradinį atsakymą
Išsaugokite užklausų / atsakymų ID ir antraštes. Bendras teksto užduoties gavimo URL nepateikiamas.
Atsakymo laukai
| Laukas | Tipas |
|---|---|
Laukasid | Tipasstring |
Laukasmodel | Tipasstring |
Laukascontent[] | Tipastext|thinking|tool_use|other content block |
Laukasstop_reason | Tipasstring|null |
Laukasusage | Tipasobject |
Klaidos ir tolesni veiksmai
| Atsakymas | Sąlyga | Kitas žingsnis |
|---|---|---|
Atsakymas400 · invalid_request_error | SąlygaNetinkami privalomi laukai, medžiagos pateikimo forma arba parametro reikšmė | Kitas žingsnisPrieš naują kūrimo užklausą pataisykite nurodytus laukus. |
Pseudonimai
Modelių pseudonimai
Ailoot Ultra google/gemini-3.1-flash-image-preview
Metodų kelių pseudonimai
/v1/images
Susiję ID iškvietimui
FAQ · Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)
- Kokios įvestys ir rezultatai prieinami?
POST /v1/chat/completions·google/gemini-3.1-flash-image-preview:text→textPOST /v1/images/generations·google/gemini-3.1-flash-image-preview:text,image→imagePOST /v1/messages·google/gemini-3.1-flash-image-preview:text→json,sse- Kokius laukus naudoja užklausa?
POST /v1/chat/completions·google/gemini-3.1-flash-image-preview:model,messages,stream,modalities,providerPOST /v1/images/generations·google/gemini-3.1-flash-image-preview:model,prompt,resolution,aspect_ratio,n,input_references,providerPOST /v1/messages·google/gemini-3.1-flash-image-preview:model,messages,max_tokens,stream- Kokie apribojimai taikomi?
POST /v1/chat/completions·google/gemini-3.1-flash-image-preview:messages.min_items:1POST /v1/images/generations·google/gemini-3.1-flash-image-preview:n.minimum:1;n.maximum:1