modele

Google: Gemini 3.8 Flash

Markdown · JSON

Google: Gemini 3.8 Flash

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

O modelu

Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.

Gemini 3.8 Flash to model Google z wyjściem tekstowym do długotrwałej pracy nad oprogramowaniem, wieloetapowych zadań agentowych i złożonych przepływów pracy opartych na wiedzy. Rozwija Gemini 3.7 Flash, usprawniając inżynierię oprogramowania i pracę agentów z wiedzą. Przyjmuje tekst, obrazy, audio, wideo i PDF, dzięki czemu zadanie może łączyć pisemny cel z rzeczywistym materiałem potrzebnym do jego rozwiązania. Przydatny wynik to zmiana kodu, analiza z wyjaśnieniem, pisemna odpowiedź lub rekord strukturalny.

W zleceniu programistycznym podaj wymaganie, odpowiednie pliki, zaobserwowane zachowanie i ograniczenia do zachowania. Zrzut ekranu może określać zamierzony interfejs, a logi lub przykład odtwarzający problem pokazywać awarię. W zadaniu debugowania poproś model o prześledzenie niezgodności między widocznym stanem formularza a jego zapisaną wartością, wskazanie odpowiedzialnej ścieżki kodu i zaproponowanie konkretnej poprawki. Zachowuj jasny zamierzony rezultat końcowy, aby dłuższa sekwencja badania i użycia narzędzi nadal miała konkretny warunek ukończenia.

Przy dłuższej pracy stosuj mniejsze kroki rozumowania, iteracyjne wywołania narzędzi i kontrole wyników pośrednich. Poziomy myślenia low, medium i high sterują ilością rozumowania; udokumentowane ustawienie domyślne to medium. Low pasuje do szybkiego szkicu lub analizy o ograniczonym zakresie, a high jest przeznaczone do trudnej matematyki, programowania lub zadań wieloetapowych. Gemini 3.8 Flash nie obsługuje poziomu myślenia minimal. Długotrwałe zlecenie debugowania i prosta ekstrakcja pól wymagają więc różnych wyborów rozumowania, zamiast tego samego ustawienia dla każdego żądania.

Udokumentowane narzędzia obejmują wywoływanie funkcji, wykonywanie kodu, wyszukiwanie plików, ugruntowanie przez wyszukiwanie, ugruntowanie Google Maps i kontekst URL, a Computer Use wymieniono jako możliwość w wersji preview. Structured outputs określają wynik czytelny maszynowo. Funkcje powinny mieć jasny cel i definicję parametrów: model może zażądać funkcji, a połączona aplikacja wykonuje operację i zwraca jej wynik. Zachowuj tożsamości funkcji i rzeczywiście zwrócone materiały między turami. Przydatna odpowiedź końcowa wyjaśnia, jakie dowody wspierają proponowaną poprawkę lub wyodrębnioną wartość.

Przewodnik migracji 3.8 stosuje sterowanie poziomami myślenia zamiast starszej konfiguracji budżetu rozumowania i zaleca usunięcie przestarzałych parametrów próbkowania oraz wstępnie wypełnionych tur modelu. Wymaga też zachowywania sygnatur myśli w odpowiednim bezstanowym przepływie pracy i dopasowywania odpowiedzi funkcji do ich wywołań według tożsamości i nazwy. Te szczegóły mają znaczenie przy kontynuowaniu zadania wieloetapowego: następna tura potrzebuje rzeczywistego wcześniejszego kontekstu zamiast przeredagowanego opisu, który gubi wynik narzędzia lub sygnaturę. W nowej turze użytkownika jawnie określ pytanie i żądane wyjście.

W multimodalnej pracy z wiedzą wskaż odpowiednie strony dokumentu, wykres, przedział audio lub zdarzenie wideo i określ, jak mają przyczynić się do odpowiedzi. Porównanie dokumentów może wymagać tabeli różnic z fragmentami źródłowymi; pytanie o wykres może wymagać widocznych wartości i wniosku, który wspierają. Analiza wideo może wymagać opisu zdarzeń uzasadniających ustalenie. Model zwraca tekst na podstawie tych danych wejściowych. Generowane obrazy, mowa i interakcja dźwiękowa Live należą do osobnych profili modeli.

Limity Gemini API wynoszą 1,048,576 tokenów wejściowych i 65,536 tokenów wyjściowych, co odpowiada natywnemu kontekstowi modelu do 1M i wyjściu tekstowemu 64K. Instrukcje, historia rozmowy i dostarczone media zużywają kontekst wejściowy, a rozumowanie lub długi rezultat końcowy muszą zmieścić się w udokumentowanym limicie wyjścia. Google wymienia również buforowanie, przetwarzanie wsadowe oraz przetwarzanie Flex i Priority dla tego profilu producenta. Dla niezależnych pozycji zachowuj stały identyfikator pozycji i jawny format wyjścia, aby każdy wynik pozostał powiązany ze źródłem.

Możliwe ograniczenia obejmują halucynacje, sporadyczne spowolnienia lub przekroczenia czasu oraz większe zużycie tokenów przy wyższym wysiłku. Data graniczna wiedzy to marzec 2026, przy czym niektóre dziedziny nadal są ograniczone do stycznia 2025. Dostarcz aktualne dowody lub użyj udokumentowanych narzędzi ugruntowania, gdy zadanie zależy od późniejszych informacji. Sprawdzaj cytowania źródeł, obliczenia i proponowany kod względem rzeczywistych danych wejściowych i wyników wykonania. Przydatny rezultat końcowy powinien odróżniać poparte ustalenie od nierozstrzygniętego pytania, bez założenia, że płynna odpowiedź potwierdza żądany wynik.

Zadanie praktyczne

Zadanie praktyczne

Przykład techniczny po angielsku

Diagnose an unsaved form value

Review this form flow: the input displays draft.name; typing updates draft.name; Save sends original.name; after reload the old name reappears. Explain the mismatch and propose a minimal correction in framework-neutral pseudocode. Include a regression scenario that types a new name, saves, reloads, and checks the stored value. Do not claim any browser action occurred.

Oczekiwany wynik

A cause explanation, corrected Save pseudocode and an end-to-end regression scenario.

Sprawdź wynik

The submitted value comes from the edited draft, and the reload check verifies persistence rather than just the visible input.
Ailoot · Anthropic Messages POST /v1/messages gemini-3.8-flash

gemini-3.8-flash

Google /gemini-3.8-flash

Start

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

Akceptowane dane wejściowe
Tekst · Obrazy
Wyniki
Tekst

Dostępne w Ailoot · dane wejściowe i metody

Ailoot · Anthropic Messages POST /v1/messages
Wejście
text, image
Wyjście
text
Kontekst
1 048 576 tokens
Maksymalny wynik
65 536 tokens
Format wyjściowy
json lub SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
gemini-3.8-flash
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limity
Minimalna liczba elementów: 1
Domyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
user, assistant
Domyślnie—
Polemessages[].contentTypstring|content_block[]WymaganieWymaganeWartości i limityDomyślnie—
PolesystemTypstring|content_block[]WymaganieOpcjonalneWartości i limityDomyślnie—
Polemax_tokensTypintegerWymaganieWymaganeWartości i limity
Minimum: 1
Limit dotyczy: dokładny limit wybranego modelu/karty
Domyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
PoletemperatureTypnumberWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poletop_pTypnumberWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polestop_sequencesTypstring[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PoletoolsTyptool[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poletools[].nameTypstringWymaganieOpcjonalneWartości i limity
Obowiązuje, gdy: udostępnione narzędzie
Domyślnie—
Poletools[].descriptionTypstringWymaganieOpcjonalneWartości i limityDomyślnie—
Poletools[].input_schemaTypJSON_schemaWymaganieOpcjonalneWartości i limityDomyślnie—
Poletool_choiceTypobjectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polethinking.typeTypstringWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polethinking.budget_tokensTypintegerWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleoutput_config.effortTypstringWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolemetadataTypobjectWymaganieOpcjonalneWartości i limityDomyślnie—
Polecache_controlTypobjectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Kombinacje materiałów wejściowych

Tekst · tekst UTF8

messages[].content lub blok type=text

Tekst + obraz

{type:image,source:{type:base64,media_type,data}} lub źródło type=url

Parametry i cykl życia metody
ParametrKontrakt
Parametrmaterial_typesKontrakttext, image
ParametrrequiredKontraktmodel, messages, max_tokens
Parametroptional_controlsKontraktnull
Parametrcontent_typeKontraktapplication/json
Parametrtext_file_materialKontraktrzeczywista treść UTF-8 wstawiona jako tekst; ID/URLs plików wymagają oddzielnej, dokładnie określonej obsługi

Cykl życia: exact retained published method

Struktury metod i ID są dokładne; możliwości dostawcy są odrębne od dopuszczenia żądania.

Cennik

Stawki metod Ailoot

Ailoot Anthropic MessagesPOST /v1/messages
Wejście
0,00075 USD / 1K
Wyjście
0,00375 USD / 1K
Odczyt cache
0,000075 USD / 1K

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Szczegóły taryfy referencyjnej

Referencyjne tabele modelu nie zmieniają wyboru metody, wyceny ani opłat. Naliczane opłaty korzystają ze stawek wybranej metody Ailoot.

Referencyjne tabele modelu

Ceny według konfiguracji

Dopasuj każdą opłatę do pokazanych warunków. Użyj jednej stawki dla każdego zestawu alternatywnych konfiguracji.

KonfiguracjaTabela stawekOpłata
KonfiguracjaOpenAI Chat · Podstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów
KonfiguracjaAnthropic Messages · Podstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Przykładowe żądania

Ailoot · Anthropic Messages

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

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

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

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

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

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

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

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

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

with client.messages.stream(model='gemini-3.8-flash',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")

Odbieranie i zapisywanie wyników

Ailoot · Anthropic Messages

json lub SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj wszystkie bloki treści, sygnatury myślenia i rzeczywiste ID użycia narzędzi. Złóż wszystkie przyrosty bloków SSE; pierwszy blok tekstowy nie jest pełnym wyjściem.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
PoleidTypstring
PolemodelTypstring
Polecontent[]Typtext|thinking|tool_use|other content block
Polestop_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot gemini-3.8-flash
Ailoot Ultra gemini-3.8-flash, google/gemini-3.8-flash, ~google/gemini-flash-latest

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

google/gemini-3.8-flash, ~google/gemini-flash-latest, gemini-3.8-flash, gemini-3.8-flash

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

gemini-3.8-flash

Google /gemini-3.8-flash

Start

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

Akceptowane dane wejściowe
Tekst · Obrazy
Wyniki
Tekst

Dostępne w Ailoot · dane wejściowe i metody

Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
Wejście
text, image
Wyjście
text
Format wyjściowy
json lub obsługiwane strumieniowanie
PoleTypWymaganieWartości i limityDomyślnie
Polepath.modelTypstringWymaganieWymaganeWartości i limity
gemini-3.8-flash
Domyślnie—
PolecontentsTypcontent[]WymaganieWymaganeWartości i limity
Minimalna liczba elementów: 1
Domyślnie—
Polecontents[].roleTypstringWymaganieOpcjonalneWartości i limity
user, model
Domyślnie—
Polecontents[].partsTyppart[]WymaganieWymaganeWartości i limityDomyślnie—
PolesystemInstructionTypcontentWymaganieOpcjonalneWartości i limityDomyślnie—
PolegenerationConfig.maxOutputTokensTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 1
Model-specific
Domyślnie—
PolegenerationConfig.temperatureTypnumberWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolegenerationConfig.topPTypnumberWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolegenerationConfig.topKTypintegerWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolegenerationConfig.stopSequencesTypstring[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolegenerationConfig.thinkingConfig.includeThoughtsTypbooleanWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolegenerationConfig.thinkingConfig.thinkingBudgetTypintegerWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poletools[].functionDeclarationsTypfunction_declaration[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PoletoolConfig.functionCallingConfig.modeTypstringWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolesafetySettingsTypobject[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolesessionIdTypstringWymaganieOpcjonalneWartości i limityDomyślnie—
Kombinacje materiałów wejściowych

Tekst · tekst UTF8

contents[].parts[].text

Tekst + obraz

parts[].inlineData={mimeType,data}

Parametry i cykl życia metody
ParametrKontrakt
Parametrmaterial_typesKontrakttext, image
ParametrrequiredKontraktcontents
Parametroptional_controlsKontraktnull
Parametrcontent_typeKontraktapplication/json
Parametrtext_file_materialKontraktrzeczywista treść UTF-8 wstawiona jako tekst; ID/URLs plików wymagają oddzielnej, dokładnie określonej obsługi

Cykl życia: exact retained published method

Struktury metod i ID są dokładne; możliwości dostawcy są odrębne od dopuszczenia żądania.

Cennik

Stawki metod Ailoot

Ailoot Gemini generateContentPOST /v1beta/models/{model}:generateContent
Wejście
0,00075 USD / 1K
Wyjście
0,00375 USD / 1K
Odczyt cache
0,000075 USD / 1K

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Szczegóły taryfy referencyjnej

Referencyjne tabele modelu nie zmieniają wyboru metody, wyceny ani opłat. Naliczane opłaty korzystają ze stawek wybranej metody Ailoot.

Referencyjne tabele modelu

Ceny według konfiguracji

Dopasuj każdą opłatę do pokazanych warunków. Użyj jednej stawki dla każdego zestawu alternatywnych konfiguracji.

KonfiguracjaTabela stawekOpłata
KonfiguracjaOpenAI Chat · Podstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów
KonfiguracjaAnthropic Messages · Podstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Przykładowe żądania

Ailoot · Gemini generateContent

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

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

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

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

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

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

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

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

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

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

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

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

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

count=0
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
    for chunk in client.models.generate_content_stream(model='gemini-3.8-flash',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

Odbieranie i zapisywanie wyników

Ailoot · Gemini generateContent

json lub obsługiwane strumieniowanie

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj wszystkich kandydatów i części, w tym wywołania funkcji, sygnatury myślenia i dane użycia; składaj fragmenty strumienia w kolejności.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
PoleresponseIdTypstring
PolemodelVersionTypstring
Polecandidates[].content.parts[]Typtext|inlineData|functionCall|other part
Polecandidates[].finishReasonTypstring
PoleusageMetadataTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot gemini-3.8-flash
Ailoot Ultra gemini-3.8-flash, google/gemini-3.8-flash, ~google/gemini-flash-latest

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

google/gemini-3.8-flash, ~google/gemini-flash-latest, gemini-3.8-flash, gemini-3.8-flash

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions gemini-3.8-flash

gemini-3.8-flash

Google /gemini-3.8-flash
ID modelu
  • gemini-3.8-flash
  • google/gemini-3.8-flash
  • ~google/gemini-flash-latest

Start

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

Akceptowane dane wejściowe
Tekst
Wyniki
Tekst

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Wejście
text
Wyjście
text
Format wyjściowy
json lub SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
gemini-3.8-flash
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limity
Minimalna liczba elementów: 1
Domyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
Model-specific
Domyślnie—
Polemessages[].contentTypstringWymaganieOpcjonalneWartości i limity
Obowiązuje, gdy: Rozmowa tekstowa
Domyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Kombinacje materiałów wejściowych

Tekst · tekst UTF8

messages[].content

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages
Parametrmaterial_typesKontrakttext
ParametrmessagesKontrakttablica wiadomości o strukturze role/content
Parametrfile_materialKontraktrzeczywisty dokument UTF-8 wstawiony jako dosłowny tekst; bez wywnioskowanego ID pliku
Parametroptional_controlsKontraktstream
Parametrcontrol_scopeKontraktRozmowa tekstowa; stream jest wartością logiczną i domyślnie wynosi false.
Parametroutput_modalitiesKontrakttext
Parametrhosted_operationsKontraktfalse
Parametrmultimodal_input_bindingKontraktnull

Aliasy metody: /chat/completions

Cykl życia: synchronous_or_streamed

Wyślij dokładne ID modelu wraz z messages.

Długość kontekstu nie jest limitem wyjścia.

Plik tekstowy może dostarczyć dosłowny tekst; wejścia obrazowe/dźwiękowe/obiekty plików wymagają dokładnego powiązania.

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)
Wycena jawnej pamięci podręcznej
Niewłączone Gdy zażądano jawnej pamięci podręcznej

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaPodstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · OpenAI Chat

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

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

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="gemini-3.8-flash", 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"))

Odbieranie i zapisywanie wyników

Ailoot Ultra · OpenAI Chat

json lub SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj każdy wariant i jego treść/wywołania narzędzi/rozumowanie. W SSE składaj przyrosty według indeksu wariantu/narzędzia, zachowując końcowy powód zakończenia i dane użycia.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
Polechoices[].indexTypinteger
Polechoices[].message.contentTypstring|null
Polechoices[].message.tool_callsTyptool_call[]
Polechoices[].message.reasoning_contentTypstring
Polechoices[].message.reasoning_detailsTypobject|array
Polechoices[].finish_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot gemini-3.8-flash
Ailoot Ultra gemini-3.8-flash, google/gemini-3.8-flash, ~google/gemini-flash-latest

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

google/gemini-3.8-flash, ~google/gemini-flash-latest, gemini-3.8-flash, gemini-3.8-flash

Ailoot Ultra · Anthropic Messages POST /v1/messages gemini-3.8-flash

gemini-3.8-flash

Google /gemini-3.8-flash
ID modelu
  • gemini-3.8-flash
  • google/gemini-3.8-flash
  • ~google/gemini-flash-latest

Start

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

Akceptowane dane wejściowe
Tekst
Wyniki
json · sse

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · Anthropic Messages POST /v1/messages
Wejście
text
Wyjście
json, sse
Format wyjściowy
JSON lub SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
gemini-3.8-flash
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limityDomyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
user, assistant
Domyślnie—
Polemessages[].contentTypstringWymaganieWymaganeWartości i limityDomyślnie—
Polemax_tokensTypintegerWymaganieWymaganeWartości i limityDomyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Kombinacje materiałów wejściowych

Tekst · tekst UTF-8

ciąg messages[].content

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages, max_tokens
Parametroptional_controlsKontraktstream
Parametrmaterial_typesKontrakttext
Parametrtext_file_materialKontraktOdczytaj rzeczywisty dokument UTF-8 i umieść jego tekst we wskazanym polu input lub w ciągu treści wiadomości.

Cykl życia: synchronous_or_streamed

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)
Wycena jawnej pamięci podręcznej
Niewłączone Gdy zażądano jawnej pamięci podręcznej

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaPodstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · Anthropic Messages

Kompletna minimalna treść żądania JSONcurl · użyj swojego dokumentu UTF-8Python · zapisz kompletny wynik
{
  "model": "gemini-3.8-flash",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

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

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

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-3.8-flash', '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))

Odbieranie i zapisywanie wyników

Ailoot Ultra · Anthropic Messages

JSON lub SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj wszystkie bloki treści, sygnatury myślenia i rzeczywiste ID użycia narzędzi. Złóż wszystkie przyrosty bloków SSE; pierwszy blok tekstowy nie jest pełnym wyjściem.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
PoleidTypstring
PolemodelTypstring
Polecontent[]Typtext|thinking|tool_use|other content block
Polestop_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot gemini-3.8-flash
Ailoot Ultra gemini-3.8-flash, google/gemini-3.8-flash, ~google/gemini-flash-latest

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

google/gemini-3.8-flash, ~google/gemini-flash-latest, gemini-3.8-flash, gemini-3.8-flash

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-3.8-flash

google/gemini-3.8-flash

Google /google/gemini-3.8-flash
ID modelu
  • gemini-3.8-flash
  • google/gemini-3.8-flash
  • ~google/gemini-flash-latest

Start

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

Akceptowane dane wejściowe
Tekst
Wyniki
Tekst

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Wejście
text
Wyjście
text
Format wyjściowy
json lub SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
google/gemini-3.8-flash
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limity
Minimalna liczba elementów: 1
Domyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
Przykłady: system, user, assistant, tool, function
Warunki: Te role są jawnie reprezentowane przez typy zgodności w kodzie źródłowym; dokładny zestaw ról pozostaje właściwy dla danego modelu.
Model-specific
Domyślnie—
Polemessages[].contentTypstring|content_part[]|nullWymaganieOpcjonalneWartości i limityDomyślnie—
Polemessages[].tool_callsTyptool_call[]WymaganieOpcjonalneWartości i limityDomyślnie—
Polemessages[].tool_call_idTypstringWymaganieOpcjonalneWartości i limity
Obowiązuje, gdy: role=tool; użyj rzeczywiście zwróconego ID
Domyślnie—
Polemessages[].nameTypstringWymaganieOpcjonalneWartości i limityDomyślnie—
Polemessages[].reasoning_contentTypstringWymaganieOpcjonalneWartości i limity
Obowiązuje, gdy: Przekazuj z powrotem rzeczywiście zwróconą treść rozumowania, gdy ten model jej używa
Domyślnie—
Polemessages[].reasoning_detailsTypobject|arrayWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polemax_tokensTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 1
Model-specific
Domyślnie—
Polemax_completion_tokensTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 1
Model-specific
Domyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Polestream_options.include_usageTypbooleanWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PoletemperatureTypnumberWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poletop_pTypnumberWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolestopTypstring|string[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PoletoolsTypfunction_tool[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poletools[].typeTypstringWymaganieOpcjonalneWartości i limity
function
Model-specific
Domyślnie—
Poletools[].function.nameTypstringWymaganieWymaganeWartości i limity
Obowiązuje, gdy: udostępnione narzędzie funkcji
Domyślnie—
Poletools[].function.descriptionTypstringWymaganieOpcjonalneWartości i limityDomyślnie—
Poletools[].function.parametersTypJSON_schemaWymaganieOpcjonalneWartości i limityDomyślnie—
Poletool_choiceTypstring|objectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleparallel_tool_callsTypbooleanWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleresponse_formatTypobjectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polereasoning_effortTypstringWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolereasoningTypobjectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleservice_tierTypstringWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PoleinstructionsTypstringWymaganieOpcjonalneWartości i limity
Pole zgodności
Domyślnie—
PolefunctionsTypfunction[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polefunction_callTypstring|objectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleprompt_cache_optionsTypobjectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolemodalitiesTypstring[]WymaganieOpcjonalneWartości i limity
text
Domyślnie—
PoleproviderTypobjectWymaganieOpcjonalneWartości i limity
Warunki: provider.options jest odrzucane na tej tekstowej trasie Ultra
Domyślnie—
Polecache_control.ttlTypstringWymaganieOpcjonalneWartości i limity
Warunki: 1h jest odrzucane w rzeczywistych miejscach pamięci podręcznej promptów
Domyślnie—
Kombinacje materiałów wejściowych

Tekst · tekst UTF8

messages[].content

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages
Parametrmaterial_typesKontrakttext
ParametrmessagesKontrakttablica wiadomości o strukturze role/content
Parametrfile_materialKontraktrzeczywisty dokument UTF-8 wstawiony jako dosłowny tekst; bez wywnioskowanego ID pliku
Parametroptional_controlsKontraktstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametrcontrol_scopeKontraktwłaściwe dla modelu; narzędzia funkcji użytkownika różnią się od narzędzi hostowanych
Parametroutput_modalitiesKontrakttext
Parametrhosted_operationsKontraktfalse
Parametrmultimodal_input_bindingKontraktnull

Cykl życia: synchronous_or_streamed

Wyślij dokładne ID modelu wraz z messages.

Długość kontekstu nie jest limitem wyjścia.

Plik tekstowy może dostarczyć dosłowny tekst; wejścia obrazowe/dźwiękowe/obiekty plików wymagają dokładnego powiązania.

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)
Wycena jawnej pamięci podręcznej
Niewłączone Gdy zażądano jawnej pamięci podręcznej

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaPodstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · OpenAI Chat

curlPython SDKStrumień w Pythonie
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.8-flash", "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.8-flash',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.8-flash',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")

Odbieranie i zapisywanie wyników

Ailoot Ultra · OpenAI Chat

json lub SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj każdy wariant i jego treść/wywołania narzędzi/rozumowanie. W SSE składaj przyrosty według indeksu wariantu/narzędzia, zachowując końcowy powód zakończenia i dane użycia.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
Polechoices[].indexTypinteger
Polechoices[].message.contentTypstring|null
Polechoices[].message.tool_callsTyptool_call[]
Polechoices[].message.reasoning_contentTypstring
Polechoices[].message.reasoning_detailsTypobject|array
Polechoices[].finish_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot gemini-3.8-flash
Ailoot Ultra gemini-3.8-flash, google/gemini-3.8-flash, ~google/gemini-flash-latest

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

google/gemini-3.8-flash, ~google/gemini-flash-latest, gemini-3.8-flash, gemini-3.8-flash

Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-3.8-flash

google/gemini-3.8-flash

Google /google/gemini-3.8-flash
ID modelu
  • gemini-3.8-flash
  • google/gemini-3.8-flash
  • ~google/gemini-flash-latest

Start

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

Akceptowane dane wejściowe
Tekst
Wyniki
json · sse

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · Anthropic Messages POST /v1/messages
Wejście
text
Wyjście
json, sse
Format wyjściowy
JSON lub SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
google/gemini-3.8-flash
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limityDomyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
user, assistant
Domyślnie—
Polemessages[].contentTypstringWymaganieWymaganeWartości i limityDomyślnie—
Polemax_tokensTypintegerWymaganieWymaganeWartości i limityDomyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Kombinacje materiałów wejściowych

Tekst · tekst UTF-8

ciąg messages[].content

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages, max_tokens
Parametroptional_controlsKontraktstream
Parametrmaterial_typesKontrakttext
Parametrtext_file_materialKontraktOdczytaj rzeczywisty dokument UTF-8 i umieść jego tekst we wskazanym polu input lub w ciągu treści wiadomości.

Cykl życia: synchronous_or_streamed

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)
Wycena jawnej pamięci podręcznej
Niewłączone Gdy zażądano jawnej pamięci podręcznej

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaPodstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · Anthropic Messages

Kompletna minimalna treść żądania JSONcurl · użyj swojego dokumentu UTF-8Python · zapisz kompletny wynik
{
  "model": "google/gemini-3.8-flash",
  "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.8-flash', '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.8-flash', '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))

Odbieranie i zapisywanie wyników

Ailoot Ultra · Anthropic Messages

JSON lub SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj wszystkie bloki treści, sygnatury myślenia i rzeczywiste ID użycia narzędzi. Złóż wszystkie przyrosty bloków SSE; pierwszy blok tekstowy nie jest pełnym wyjściem.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
PoleidTypstring
PolemodelTypstring
Polecontent[]Typtext|thinking|tool_use|other content block
Polestop_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot gemini-3.8-flash
Ailoot Ultra gemini-3.8-flash, google/gemini-3.8-flash, ~google/gemini-flash-latest

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

google/gemini-3.8-flash, ~google/gemini-flash-latest, gemini-3.8-flash, gemini-3.8-flash

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions ~google/gemini-flash-latest

~google/gemini-flash-latest

Google /~google/gemini-flash-latest
ID modelu
  • gemini-3.8-flash
  • google/gemini-3.8-flash
  • ~google/gemini-flash-latest

Start

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

Akceptowane dane wejściowe
Tekst
Wyniki
Tekst

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Wejście
text
Wyjście
text
Format wyjściowy
json or SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
~google/gemini-flash-latest
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limity
Minimalna liczba elementów: 1
Domyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
Przykłady: system, user, assistant, tool, function
Warunki: These roles are explicitly represented by Source compatibility types; the exact model role set remains model-specific.
Model-specific
Domyślnie—
Polemessages[].contentTypstring|content_part[]|nullWymaganieOpcjonalneWartości i limityDomyślnie—
Polemessages[].tool_callsTyptool_call[]WymaganieOpcjonalneWartości i limityDomyślnie—
Polemessages[].tool_call_idTypstringWymaganieOpcjonalneWartości i limity
Obowiązuje, gdy: role=tool; use actual returned ID
Domyślnie—
Polemessages[].nameTypstringWymaganieOpcjonalneWartości i limityDomyślnie—
Polemessages[].reasoning_contentTypstringWymaganieOpcjonalneWartości i limity
Obowiązuje, gdy: Round-trip actual returned reasoning where this model uses it
Domyślnie—
Polemessages[].reasoning_detailsTypobject|arrayWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polemax_tokensTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 1
Model-specific
Domyślnie—
Polemax_completion_tokensTypintegerWymaganieOpcjonalneWartości i limity
Minimum: 1
Model-specific
Domyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Polestream_options.include_usageTypbooleanWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PoletemperatureTypnumberWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poletop_pTypnumberWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolestopTypstring|string[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PoletoolsTypfunction_tool[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poletools[].typeTypstringWymaganieOpcjonalneWartości i limity
function
Model-specific
Domyślnie—
Poletools[].function.nameTypstringWymaganieWymaganeWartości i limity
Obowiązuje, gdy: function tool supplied
Domyślnie—
Poletools[].function.descriptionTypstringWymaganieOpcjonalneWartości i limityDomyślnie—
Poletools[].function.parametersTypJSON_schemaWymaganieOpcjonalneWartości i limityDomyślnie—
Poletool_choiceTypstring|objectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleparallel_tool_callsTypbooleanWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleresponse_formatTypobjectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polereasoning_effortTypstringWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolereasoningTypobjectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleservice_tierTypstringWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PoleinstructionsTypstringWymaganieOpcjonalneWartości i limity
Pole zgodności
Domyślnie—
PolefunctionsTypfunction[]WymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Polefunction_callTypstring|objectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
Poleprompt_cache_optionsTypobjectWymaganieOpcjonalneWartości i limity
Model-specific
Domyślnie—
PolemodalitiesTypstring[]WymaganieOpcjonalneWartości i limity
text
Domyślnie—
PoleproviderTypobjectWymaganieOpcjonalneWartości i limity
Warunki: provider.options is rejected on this Ultra text route
Domyślnie—
Polecache_control.ttlTypstringWymaganieOpcjonalneWartości i limity
Warunki: 1h is rejected in actual prompt-cache locations
Domyślnie—
Kombinacje materiałów wejściowych

Tekst · UTF8 text

messages[].content

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages
Parametrmaterial_typesKontrakttext
ParametrmessagesKontraktmessage array with role/content shape
Parametrfile_materialKontraktactual UTF-8 document inserted as literal text; no file ID inferred
Parametroptional_controlsKontraktstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parametrcontrol_scopeKontraktmodel-specific; user function tools differ from hosted tools
Parametroutput_modalitiesKontrakttext
Parametrhosted_operationsKontraktfalse
Parametrmultimodal_input_bindingKontraktnull

Cykl życia: synchronous_or_streamed

Send exact model ID with messages.

Context length is not an output cap.

A text file may supply literal text; image/audio/file-object inputs need exact binding.

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)
Wycena jawnej pamięci podręcznej
Niewłączone Gdy zażądano jawnej pamięci podręcznej

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaBazowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · OpenAI Chat

curlPython SDKStrumień w Pythonie
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-flash-latest", "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-flash-latest',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-flash-latest',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")

Odbieranie i zapisywanie wyników

Ailoot Ultra · OpenAI Chat

json or SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Keep every choice and its content/tool calls/reasoning. In SSE assemble deltas by choice/tool index, retain the final finish reason and usage.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Keep request/response IDs and headers. No generic text job retrieval URL is supplied.

Pola odpowiedzi
PoleTyp
Polechoices[].indexTypinteger
Polechoices[].message.contentTypstring|null
Polechoices[].message.tool_callsTyptool_call[]
Polechoices[].message.reasoning_contentTypstring
Polechoices[].message.reasoning_detailsTypobject|array
Polechoices[].finish_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekInvalid required fields, material representation or parameter valueNastępny krokCorrect the indicated fields before a new creation request.

Aliasy

Aliasy modelu

Ailoot gemini-3.8-flash
Ailoot Ultra gemini-3.8-flash, google/gemini-3.8-flash, ~google/gemini-flash-latest

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

google/gemini-3.8-flash, ~google/gemini-flash-latest, gemini-3.8-flash, gemini-3.8-flash

Ailoot Ultra · Anthropic Messages POST /v1/messages ~google/gemini-flash-latest

~google/gemini-flash-latest

Google /~google/gemini-flash-latest
ID modelu
  • gemini-3.8-flash
  • google/gemini-3.8-flash
  • ~google/gemini-flash-latest

Start

Gemini 3.8 Flash to wszechstronny multimodalny model Google do długotrwałej pracy nad oprogramowaniem, zadań agentowych i złożonych zadań opartych na wiedzy. Przyjmuje tekst, obrazy, audio, wideo i PDF, zwraca tekst oraz oferuje rozumowanie low, medium lub high z narzędziami i wyjściem strukturalnym. Udokumentowane limity wejścia/wyjścia wynoszą 1,048,576/65,536 tokenów.

Akceptowane dane wejściowe
Tekst
Wyniki
json · sse

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · Anthropic Messages POST /v1/messages
Wejście
text
Wyjście
json, sse
Format wyjściowy
JSON or SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
~google/gemini-flash-latest
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limityDomyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
user, assistant
Domyślnie—
Polemessages[].contentTypstringWymaganieWymaganeWartości i limityDomyślnie—
Polemax_tokensTypintegerWymaganieWymaganeWartości i limityDomyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Kombinacje materiałów wejściowych

Tekst · UTF-8 text

messages[].content string

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages, max_tokens
Parametroptional_controlsKontraktstream
Parametrmaterial_typesKontrakttext
Parametrtext_file_materialKontraktRead the actual UTF-8 document and put its text in the indicated input or message content string.

Cykl życia: synchronous_or_streamed

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)
Wycena jawnej pamięci podręcznej
Niewłączone Gdy zażądano jawnej pamięci podręcznej

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaBazowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0.003 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.015 / 1K tokenów
Wejście · Odczyt cache $0.0003 / 1K tokenów
Wejście · Zapis do cache — / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · Anthropic Messages

Kompletna minimalna treść żądania JSONcurl · użyj swojego dokumentu UTF-8Python · zapisz kompletny wynik
{
  "model": "~google/gemini-flash-latest",
  "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-flash-latest', '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-flash-latest', '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))

Odbieranie i zapisywanie wyników

Ailoot Ultra · Anthropic Messages

JSON or SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Keep request/response IDs and headers. No generic text job retrieval URL is supplied.

Pola odpowiedzi
PoleTyp
PoleidTypstring
PolemodelTypstring
Polecontent[]Typtext|thinking|tool_use|other content block
Polestop_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekInvalid required fields, material representation or parameter valueNastępny krokCorrect the indicated fields before a new creation request.

Aliasy

Aliasy modelu

Ailoot gemini-3.8-flash
Ailoot Ultra gemini-3.8-flash, google/gemini-3.8-flash, ~google/gemini-flash-latest

Aliasy ścieżek metod

/chat/completions

Powiązane ID modeli

google/gemini-3.8-flash, ~google/gemini-flash-latest, gemini-3.8-flash, gemini-3.8-flash

FAQ · Google: Gemini 3.8 Flash
Jakie dane wejściowe i wyniki są dostępne?

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

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

POST /v1/chat/completions · gemini-3.8-flash: text → text

POST /v1/messages · gemini-3.8-flash: text → json, sse

POST /v1/chat/completions · google/gemini-3.8-flash: text → text

POST /v1/messages · google/gemini-3.8-flash: text → json, sse

POST /v1/chat/completions · ~google/gemini-flash-latest: text → text

POST /v1/messages · ~google/gemini-flash-latest: text → json, sse

Jakich pól używa żądanie?

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

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

POST /v1/chat/completions · gemini-3.8-flash: model, messages, stream

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

POST /v1/chat/completions · google/gemini-3.8-flash: model, messages, stream, modalities, provider

POST /v1/messages · google/gemini-3.8-flash: model, messages, max_tokens, stream

POST /v1/chat/completions · ~google/gemini-flash-latest: model, messages, stream, modalities, provider

POST /v1/messages · ~google/gemini-flash-latest: model, messages, max_tokens, stream

Jakie limity obowiązują?

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

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

POST /v1/chat/completions · gemini-3.8-flash: messages.min_items: 1

POST /v1/chat/completions · google/gemini-3.8-flash: messages.min_items: 1

POST /v1/chat/completions · ~google/gemini-flash-latest: messages.min_items: 1

Więcej szczegółów

Połącz Ailoot z Claude Code, OpenCode, Hermes albo własną aplikacją.

Firma i jej portfel projektów

Firma i jej portfel projektów: miliony klientów; miesięczna sprzedaż liczona w miliardach.

Kupuj tokeny z rabatem.

Rabat subskrypcji do regularnej pracy. Kody promocyjne — do 50% na tokeny.

Subskrypcja
Wybierz plan z rabatem do regularnych żądań.
Kod promocyjny do 50%
Wpisz kod przy zakupie. Cena zostanie przeliczona według aktualnej promocji.
Koszty w historii
Model, tokeny i kwota są zapisywane dla każdego żądania.

Wybierz subskrypcję · Sprawdź ceny modeli

Połącz API z produktem, który sprzedajesz.

SaaS, aplikacje i boty na warunkach oferty i umowy licencyjnej Ailoot. Do odsprzedaży poproś o licencję resellerską.

Aplikacja komercyjna
Wbuduj generowanie tekstu, obrazów, wideo i dźwięku w płatne funkcje usługi.
Licencja resellerska
Prześlij opis projektu i schemat dostępu. Poproś o pisemne warunki używania i odsprzedaży.
Dokumenty na stronie
Oferta, umowa licencyjna i polityka przetwarzania danych są dostępne przed połączeniem.

Poproś o licencję resellerską · Oferta i umowa licencyjna