Google GenAI SDK
MarkdownFormat asal Gemini: SDK Google GenAI untuk Python dan JavaScript, serta permintaan REST secara langsung.
Panduan lengkap
Pemasangan
pip install google-genainpm install @google/genaiSambungan
Alamat ialah https://api.ailoot.ai tanpa /v1beta: SDK membina laluan /v1beta/models/<model>:generateContent secara automatik. Dalam Python, alamat ditetapkan melalui HttpOptions(base_url=…), dalam JavaScript — melalui httpOptions.baseUrl. SDK menghantar kunci dalam pengepala 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"), # tanpa /v1beta
)
resp = client.models.generate_content(
model="gemini-3.8-flash",
contents="Cadangkan tiga nama untuk kedai kopi.",
)
print(resp.text)import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({
apiKey: process.env.AILOOT_API_KEY,
httpOptions: { baseUrl: "https://api.ailoot.ai" }, // tanpa /v1beta
});
const resp = await ai.models.generateContent({
model: "gemini-3.8-flash",
contents: "Cadangkan tiga nama untuk kedai kopi.",
});
console.log(resp.text);curl "https://api.ailoot.ai/v1beta/models/gemini-3.8-flash:generateContent" \
-H "x-goog-api-key: $AILOOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{"role": "user", "parts": [{"text": "Cadangkan tiga nama untuk kedai kopi."}]}
]
}' Input yang boleh dihantar
- Medan peringkat teratas:
contents,systemInstruction,generationConfig,safetySettings,toolsdantoolConfig. generationConfigmenerimatemperature,topP,topK,maxOutputTokens,thinkingConfig,responseMimeType(text/plainatauapplication/json),responseSchemaatauresponseJsonSchema(objek JSON),stopSequences(tatasusunan rentetan),candidateCount: 1, integerseed, nilai berangkapresencePenaltydanfrequencyPenalty. Julat dan keupayaan yang dibenarkan bergantung pada model tepat; untuk respons JSON, pilih satu bentuk skema yang disokong danapplication/json. Bagi model teksresponseModalities— hanya["TEXT"].safetySettings— tatasusunan objek dengancategory,thresholddan medan pilihanmethod; pilih nilai berdasarkan dokumentasi model tepat.- Bagi model Gemini yang menyokong input berkenaan
parts[].inlineDatamengandungimimeTypedan data base64 yang tidak kosong; PDF mestilah fail PDF sebenar.fileDatamengandungi alamat awam berprotokolhttpsdalamfileUridan jenis MIME fail. Untuk YouTube, MIME boleh diabaikan.http, alamat peribadi,gs://dan objek Google Files API tidak disokong, begitu juga muat naik melalui Google Files API. Untuk video, anda boleh menambahvideoMetadata:startOffset/endOffsetsebagai rentetan dalam saat (contohnya,1.5s) danfpslebih daripada 0 dan tidak melebihi 24. Saiz badan permintaan, konteks, input yang dibenarkan dan had respons diperiksa mengikut model dan format. - Fungsi klien
functionDeclarationsdilaksanakan oleh aplikasi anda. Model teks juga menerima{"googleSearch": {}}dan{"urlContext": {}}: secara berasingan atau bersama-sama dalam tatasusunantools. Google Search dan URL context tidak boleh digabungkan denganfunctionDeclarationsdalam permintaan yang sama. Untuk output imej, hanya fungsi klien tersedia. Alat terbina dalam lain dan explicit cache tidak disokong. Search/URL context mungkin memerlukan rizab berdasarkan had penuh input; nilai sebenartoolUsePromptTokenCountdikira sebagai token input. - Jika model tidak menyokong medan, lampiran atau gabungan alat, permintaan ditolak sebelum rizab dibuat — tiada caj dikenakan. HTTP yang diterima ialah
400denganstatusINVALID_ARGUMENTdan kelasinvalid_request(dalamErrorInfo.reason—INVALID_REQUEST). JSON tidak sah, ralat parameter laluan dan kegagalan semakan lain juga mengembalikan400; baca mesej ralat dan Request ID. Keupayaan bergantung pada model: semak format dan inputnya dalam katalog.
| Input | MIME yang disokong |
|---|---|
| Imej inline | image/png, image/jpeg, image/webp |
| Dokumen | application/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 |
| Audio | audio/wav, audio/mp3, audio/mpeg, audio/aiff, audio/aac, audio/ogg, audio/flac |
| Video | video/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"},
)
# Hantar sekali sahaja. Selepas tamat masa, semak Request ID dalam sejarah penggunaan anda sebelum mencuba semula.
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
# Sediakan fail PDF, audio atau video setempat yang sebenar berserta jenis MIME yang disokong.
path, mime = pathlib.Path(sys.argv[1]), sys.argv[2]
payload = {"contents": [{"role": "user", "parts": [
{"text": "Huraikan kandungan fail secara ringkas."},
{"inlineData": {"mimeType": mime,
"data": base64.b64encode(path.read_bytes()).decode()}},
]}]}
print(generate("gemini-3.8-flash", payload))
# Lampiran alternatif: {"fileData": {"mimeType": mime, "fileUri": public_https_url}}
# Untuk URL YouTube sebenar: {"fileData": {"fileUri": youtube_url}}Kitaran penuh fungsi
Hantar pengisytiharan fungsi, terima functionCall, jalankan fungsi anda, kembalikan functionResponse dan minta respons seterusnya. Kekalkan keseluruhan content model, termasuk thoughtSignature; jangan cipta tandatangan sendiri.
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"},
)
# Hantar sekali sahaja. Selepas tamat masa, semak Request ID dalam sejarah penggunaan anda sebelum mencuba semula.
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": "Mendarab dua nombor",
"parameters": {"type": "object", "properties": {
"a": {"type": "number"}, "b": {"type": "number"}},
"required": ["a", "b"]},
}]}]
contents = [{"role": "user", "parts": [{"text": "Darabkan 7 dengan 8 menggunakan fungsi"}]}]
for turn in range(4): # Hadkan gelung alat; jangan hantar semula permintaan yang hasilnya tidak jelas.
reply = generate("gemini-3.8-flash", {"contents": contents, "tools": tools})
content = reply["candidates"][0]["content"]
contents.append(content) # Kekalkan SEMUA (ALL) bahagian asal dan thoughtSignature tanpa perubahan.
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")Respons penstriman
for chunk in client.models.generate_content_stream(
model="gemini-3.8-flash",
contents="Huraikan matahari terbenam di laut",
):
print(chunk.text, end="", flush=True)curl -N "https://api.ailoot.ai/v1beta/models/gemini-3.8-flash:streamGenerateContent?alt=sse" \
-H "x-goog-api-key: $AILOOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents": [{"role": "user", "parts": [{"text": "Huraikan matahari terbenam di laut"}]}]}' Model yang tersedia
Dalam format Gemini, terdapat 27 pengecam: 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.
Model Gemini juga tersedia dalam format Anthropic Messages — memudahkan klien yang hanya menyokong format tersebut: Anthropic SDK.