Google GenAI SDK
MarkdownFormat asli Gemini: SDK Google GenAI untuk Python dan JavaScript serta permintaan REST langsung.
Panduan lengkap
Instalasi
pip install google-genainpm install @google/genaiKoneksi
Alamat — https://api.ailoot.ai tanpa /v1beta: SDK menyusun jalur /v1beta/models/<model>:generateContent secara otomatis. Dalam Python, alamat diatur melalui HttpOptions(base_url=…), dalam JavaScript — melalui httpOptions.baseUrl. SDK mengirim kunci melalui header 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="Buat 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: "Buat 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": "Buat tiga nama untuk kedai kopi."}]}
]
}' Yang dapat dikirim
- Kolom tingkat atas:
contents,systemInstruction,generationConfig,safetySettings,toolsdantoolConfig. generationConfigmenerimatemperature,topP,topK,maxOutputTokens,thinkingConfig,responseMimeType(text/plainatauapplication/json),responseSchemaatauresponseJsonSchema(objek JSON),stopSequences(array string),candidateCount: 1, bilangan bulatseed, nilai numerikpresencePenaltydanfrequencyPenalty. Rentang yang diizinkan dan fitur bergantung pada model yang tepat; untuk respons JSON, pilih satu bentuk skema yang didukung danapplication/json. Untuk model teksresponseModalities— hanya["TEXT"].safetySettings— array objek dengancategory,thresholddan kolom opsionalmethod; pilih nilai sesuai dokumentasi model yang tepat.- Untuk model Gemini yang mendukung jenis input tersebut,
parts[].inlineDataberisimimeTypedan data base64 yang tidak kosong; PDF harus berupa file PDF yang valid.fileDataberisi alamat publikhttpsdifileUridan MIME jenis file. Untuk YouTube, MIME boleh tidak diisi.http, alamat privat,gs://dan objek Google Files API tidak didukung, begitu pula unggahan melalui Google Files API. Untuk video, Anda dapat menambahkanvideoMetadata:startOffset/endOffsetsebagai string dalam detik (misalnya,1.5s) danfpslebih dari 0 dan tidak lebih dari 24. Ukuran isi permintaan, konteks, input yang diizinkan, dan batas respons diperiksa berdasarkan model dan format. - Deklarasi fungsi klien
functionDeclarationsdijalankan oleh aplikasi Anda. Model teks juga menerima{"googleSearch": {}}dan{"urlContext": {}}: secara terpisah atau bersama-sama dalam arraytools. Google Search maupun URL context tidak dapat digabungkan denganfunctionDeclarationsdalam satu permintaan. Untuk output gambar, hanya fungsi klien yang tersedia. Alat bawaan lainnya dan explicit cache tidak didukung. Search/URL context dapat memerlukan saldo yang ditahan berdasarkan batas input penuh; nilai aktualtoolUsePromptTokenCountdihitung sebagai token input. - Jika model tidak mendukung kolom, lampiran, atau kombinasi alat, permintaan ditolak sebelum dana ditahan — tidak ada pendebitan. Respons berupa HTTP
400denganstatusINVALID_ARGUMENTdan kelasinvalid_request(diErrorInfo.reason—INVALID_REQUEST). JSON yang tidak valid, kesalahan parameter jalur, dan kegagalan validasi lainnya juga mengembalikan400; baca pesan kesalahan dan Request ID. Fitur bergantung pada model: periksa format dan inputnya di katalog.
| Input | MIME yang didukung |
|---|---|
| Gambar 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"},
)
# Kirim sekali saja. Jika batas waktu terlampaui, periksa Request ID di riwayat penggunaan sebelum mencoba lagi.
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 berkas PDF, audio, atau video lokal yang nyata beserta jenis MIME yang didukung.
path, mime = pathlib.Path(sys.argv[1]), sys.argv[2]
payload = {"contents": [{"role": "user", "parts": [
{"text": "Jelaskan isi berkas secara singkat."},
{"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 yang nyata: {"fileData": {"fileUri": youtube_url}}Siklus lengkap fungsi
Kirim deklarasi, terima functionCall, jalankan fungsi Anda, kembalikan functionResponse, lalu minta respons berikutnya. Pertahankan seluruh content model, termasuk thoughtSignature; jangan buat tanda tangan 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"},
)
# Kirim sekali saja. Jika batas waktu terlampaui, periksa Request ID di riwayat penggunaan sebelum mencoba lagi.
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": "Mengalikan dua bilangan",
"parameters": {"type": "object", "properties": {
"a": {"type": "number"}, "b": {"type": "number"}},
"required": ["a", "b"]},
}]}]
contents = [{"role": "user", "parts": [{"text": "Kalikan 7 dengan 8 menggunakan fungsi"}]}]
for turn in range(4): # Batasi pengulangan pemanggilan alat; jangan kirim ulang permintaan yang hasilnya belum jelas.
reply = generate("gemini-3.8-flash", {"contents": contents, "tools": tools})
content = reply["candidates"][0]["content"]
contents.append(content) # Pertahankan semua (ALL) bagian asli 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 streaming
for chunk in client.models.generate_content_stream(
model="gemini-3.8-flash",
contents="Gambarkan matahari terbenam di atas 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": "Gambarkan matahari terbenam di atas laut"}]}]}' Model yang tersedia
Dalam format Gemini tersedia 27 ID: 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 — praktis untuk klien yang hanya mendukungnya: Anthropic SDK.