docs
Prijungimas

Google GenAI SDK

Markdown

Savasis Gemini formatas: Google GenAI SDK Python ir JavaScript kalboms bei tiesioginės REST užklausos.

Visas vadovas

Diegimas

pip install google-genai

Prijungimas

Adresas — https://api.ailoot.ai be /v1beta: SDK surinks kelią /v1beta/models/<modelis>:generateContent pats. Python kalboje adresas nustatomas per HttpOptions(base_url=…), JavaScript — per httpOptions.baseUrl. SDK raktą išsiųs antraštėje x-goog-api-key.

from google import genai
from google.genai import types
import os

client = genai.Client(
    api_key=os.environ["AILOOT_API_KEY"],
    http_options=types.HttpOptions(base_url="https://api.ailoot.ai"),  # be /v1beta
)

resp = client.models.generate_content(
    model="gemini-3.8-flash",
    contents="Sugalvok tris pavadinimus kavinei.",
)
print(resp.text)

Ką galima perduoti

  • Aukščiausio lygio laukai: contents, systemInstruction, generationConfig, safetySettings, tools ir toolConfig.
  • generationConfig priima temperature, topP, topK, maxOutputTokens, thinkingConfig, responseMimeType (text/plain arba application/json), responseSchema arba responseJsonSchema (JSON objektas), stopSequences (eilučių masyvas), candidateCount: 1, sveikąjį skaičių seed, skaitines reikšmes presencePenalty ir frequencyPenalty. Leistini intervalai ir galimybės priklauso nuo konkretaus modelio; JSON atsakymui pasirinkite vieną palaikomą schemos formą ir application/json. Tekstinių modelių responseModalities — tik ["TEXT"].
  • safetySettings — objektų masyvas su category, threshold ir neprivalomu method; reikšmes pasirinkite pagal konkretaus modelio dokumentaciją.
  • Gemini modeliuose, palaikančiuose atitinkamą įvestį, parts[].inlineData apima mimeType ir netuščius base64 duomenis; PDF turi būti tikras PDF failas. fileData apima viešą https adresą lauke fileUri ir failo tipo MIME. YouTube atveju MIME galima nenurodyti. http, privatūs adresai, gs:// ir Google Files API objektai nepalaikomi, taip pat nepalaikomas įkėlimas per Google Files API. Vaizdo įrašams galima pridėti videoMetadata: startOffset/endOffset eilute sekundėmis (pavyzdžiui, 1.5s) ir fps didesnis už 0 ir ne didesnis už 24. Turinio dydis, kontekstas, leistina įvestis ir atsakymo limitas tikrinami pagal modelį ir formatą.
  • Kliento functionDeclarations vykdo jūsų programa. Tekstiniai modeliai taip pat priima {"googleSearch": {}} ir {"urlContext": {}}: atskirai arba kartu masyve tools. Nei Google Search, nei URL context negalima derinti su functionDeclarations vienoje užklausoje. Vaizdų išvesčiai prieinamos tik kliento funkcijos. Kiti integruoti įrankiai ir explicit cache nepalaikomi. Search/URL context gali reikėti rezervo pagal visą įvesties limitą; faktiniai toolUsePromptTokenCount įskaičiuojami kaip įvesties žetonai.
  • Jei modelis nepalaiko lauko, priedo ar įrankių derinio, užklausa atmetama prieš rezervuojant lėšas — nieko nenurašoma. Grąžinamas HTTP 400 su status INVALID_ARGUMENT ir klase invalid_request (lauke ErrorInfo.reason — INVALID_REQUEST). Netaisyklingas JSON, kelio parametrų ir kitų patikrų klaidos taip pat grąžina 400; skaitykite klaidos tekstą ir Request ID. Galimybės priklauso nuo modelio: kataloge patikrinkite jo formatus ir įvestis.
ĮvestisPalaikomi MIME tipai
Įterptieji vaizdaiimage/png, image/jpeg, image/webp
Dokumentaiapplication/pdf; text/plain, text/html, text/css, text/csv, text/xml, text/rtf, text/markdown, text/javascript, application/x-javascript, text/x-python, application/x-python
Garsasaudio/wav, audio/mp3, audio/mpeg, audio/aiff, audio/aac, audio/ogg, audio/flac
Vaizdo įrašaivideo/mp4, video/mpeg, video/mov, video/quicktime, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp
import json, os, urllib.request

def generate(model, payload):
    req = urllib.request.Request(
        "https://api.ailoot.ai/v1beta/models/" + model + ":generateContent",
        data=json.dumps(payload).encode(),
        headers={"x-goog-api-key": os.environ["AILOOT_API_KEY"],
                 "Content-Type": "application/json"},
    )
    # Siųskite vieną kartą. Jei baigėsi laukimo laikas, prieš bandydami dar kartą naudojimo istorijoje patikrinkite Request ID.
    with urllib.request.urlopen(req, timeout=300) as response:
        print("Request ID:", response.headers.get("X-Request-ID"))
        return json.load(response)

import base64, pathlib, sys

# Pateikite tikrą savo kompiuteryje esantį PDF, garso arba vaizdo failą ir palaikomą jo MIME tipą.
path, mime = pathlib.Path(sys.argv[1]), sys.argv[2]
payload = {"contents": [{"role": "user", "parts": [
    {"text": "Trumpai apibūdink failo turinį."},
    {"inlineData": {"mimeType": mime,
                    "data": base64.b64encode(path.read_bytes()).decode()}},
]}]}
print(generate("gemini-3.8-flash", payload))
# Kitas priedo pateikimo būdas: {"fileData": {"mimeType": mime, "fileUri": public_https_url}}
# Jei naudojate tikrą YouTube URL: {"fileData": {"fileUri": youtube_url}}

Visas funkcijos ciklas

Perduokite deklaraciją, gaukite functionCall, įvykdykite savo funkciją, grąžinkite functionResponse ir paprašykite kito atsakymo. Išsaugokite visą modelio content, įskaitant thoughtSignature; parašo nekurkite patys.

import json, os, urllib.request

def generate(model, payload):
    req = urllib.request.Request(
        "https://api.ailoot.ai/v1beta/models/" + model + ":generateContent",
        data=json.dumps(payload).encode(),
        headers={"x-goog-api-key": os.environ["AILOOT_API_KEY"],
                 "Content-Type": "application/json"},
    )
    # Siųskite vieną kartą. Jei baigėsi laukimo laikas, prieš bandydami dar kartą naudojimo istorijoje patikrinkite Request ID.
    with urllib.request.urlopen(req, timeout=300) as response:
        print("Request ID:", response.headers.get("X-Request-ID"))
        return json.load(response)

tools = [{"functionDeclarations": [{
    "name": "multiply", "description": "Padauginti du skaičius",
    "parameters": {"type": "object", "properties": {
        "a": {"type": "number"}, "b": {"type": "number"}},
        "required": ["a", "b"]},
}]}]
contents = [{"role": "user", "parts": [{"text": "Naudodamas funkciją padaugink 7 iš 8"}]}]
for turn in range(4):  # Apribokite įrankių ciklo iteracijų skaičių; pakartotinai nesiųskite užklausos, kurios rezultatas neaiškus.
    reply = generate("gemini-3.8-flash", {"contents": contents, "tools": tools})
    content = reply["candidates"][0]["content"]
    contents.append(content)  # Visas pradines dalis (ALL) ir thoughtSignature palikite be pakeitimų.
    results = []
    for part in content.get("parts", []):
        call = part.get("functionCall")
        if not call:
            continue
        if call["name"] != "multiply":
            raise ValueError("Unexpected function")
        args = call["args"]
        result = {"name": call["name"], "response": {"value": args["a"] * args["b"]}}
        if "id" in call:
            result["id"] = call["id"]
        results.append({"functionResponse": result})
    if not results:
        print(content)
        break
    contents.append({"role": "user", "parts": results})
else:
    raise RuntimeError("Tool loop limit reached")

Srautinis atsakymas

for chunk in client.models.generate_content_stream(
    model="gemini-3.8-flash",
    contents="Apibūdink saulėlydį virš jūros",
):
    print(chunk.text, end="", flush=True)

Prieinami modeliai

Gemini formatu prieinami 27 identifikatoriai: gemini-3.8-flash, gemini-3.1-pro, gemini-pro-agent, gemini-3.8-flash-tiered, gemini-3.8-flash-medium, gemini-3.8-flash-low, gemini-3.8-flash-high, gemini-3.7-flash, gemini-3.7-flash-tiered, gemini-3.7-flash-medium, gemini-3.7-flash-low, gemini-3.7-flash-high, gemini-3.6-flash, gemini-3.6-flash-tiered, gemini-3.6-flash-medium, gemini-3.6-flash-low, gemini-3.6-flash-high, gemini-3.5-flash-lite, gemini-3.1-pro-preview, gemini-3.1-pro-low, gemini-3.1-pro-high, gemini-3.1-flash-lite, gemini-3-flash, gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-thinking, gemini-2.5-flash-lite.

Gemini modeliai prieinami ir Anthropic Messages formatu — patogu klientams, palaikantiems tik jį: Anthropic SDK.

Liko klausimų? Atsiųskite Request ID ir aprašymą — padėsime išsiaiškinti.Rašyti pagalbos tarnybai