Google GenAI SDK
MarkdownΗ εγγενής μορφή Gemini: Google GenAI SDK για Python και JavaScript και απευθείας αιτήματα REST.
Πλήρης οδηγός
Εγκατάσταση
pip install google-genainpm install @google/genaiΣύνδεση υπηρεσιών
Διεύθυνση — https://api.ailoot.ai χωρίς /v1beta: το SDK συνθέτει τη διαδρομή /v1beta/models/<μοντέλο>:generateContent μόνο του. Στην Python, η διεύθυνση ορίζεται μέσω HttpOptions(base_url=…), στην JavaScript — μέσω httpOptions.baseUrl. Το SDK στέλνει το κλειδί στην κεφαλίδα 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"), # χωρίς /v1beta
)
resp = client.models.generate_content(
model="gemini-3.8-flash",
contents="Πρότεινε τρία ονόματα για μια καφετέρια.",
)
print(resp.text)import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({
apiKey: process.env.AILOOT_API_KEY,
httpOptions: { baseUrl: "https://api.ailoot.ai" }, // χωρίς /v1beta
});
const resp = await ai.models.generateContent({
model: "gemini-3.8-flash",
contents: "Πρότεινε τρία ονόματα για μια καφετέρια.",
});
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": "Πρότεινε τρία ονόματα για μια καφετέρια."}]}
]
}' Τι μπορείτε να στείλετε
- Πεδία ανώτατου επιπέδου:
contents,systemInstruction,generationConfig,safetySettings,toolsκαιtoolConfig. generationConfigδέχεταιtemperature,topP,topK,maxOutputTokens,thinkingConfig,responseMimeType(text/plainήapplication/json),responseSchemaήresponseJsonSchema(αντικείμενο JSON),stopSequences(πίνακας συμβολοσειρών),candidateCount: 1, ακέραιοseed, αριθμητικές τιμέςpresencePenaltyκαιfrequencyPenalty. Τα επιτρεπόμενα εύρη και οι δυνατότητες εξαρτώνται από το συγκεκριμένο μοντέλο· για απάντηση JSON επιλέξτε μία υποστηριζόμενη μορφή σχήματος καιapplication/json. Στα μοντέλα κειμένου τοresponseModalities— μόνο["TEXT"].safetySettings— πίνακας αντικειμένων μεcategory,thresholdκαι προαιρετικόmethod· επιλέξτε τις τιμές σύμφωνα με την τεκμηρίωση του συγκεκριμένου μοντέλου.- Στα μοντέλα Gemini που υποστηρίζουν την αντίστοιχη είσοδο, το
parts[].inlineDataπεριέχειmimeTypeκαι μη κενά δεδομένα base64· το PDF πρέπει να είναι πραγματικό αρχείο PDF.fileDataπεριέχει δημόσια διεύθυνσηhttpsστοfileUriκαι τον τύπο MIME του αρχείου. Για το YouTube μπορείτε να παραλείψετε τον τύπο MIME.http, ιδιωτικές διευθύνσεις,gs://και αντικείμενα Google Files API δεν υποστηρίζονται, ούτε η μεταφόρτωση μέσω Google Files API. Στο βίντεο μπορείτε να προσθέσετεvideoMetadata:startOffset/endOffsetως συμβολοσειρά σε δευτερόλεπτα (για παράδειγμα,1.5s) καιfpsμεγαλύτερο από 0 και έως 24. Το μέγεθος σώματος, το παράθυρο συμφραζομένων, η επιτρεπόμενη είσοδος και το όριο απάντησης ελέγχονται ανά μοντέλο και μορφή. - Οι δηλώσεις πελάτη
functionDeclarationsεκτελούνται από την εφαρμογή σας. Τα μοντέλα κειμένου δέχονται επίσης{"googleSearch": {}}και{"urlContext": {}}: μεμονωμένα ή μαζί στον πίνακαtools. Ούτε το Google Search ούτε το URL context μπορούν να συνδυαστούν μεfunctionDeclarationsστο ίδιο αίτημα. Για εικόνες εξόδου διατίθενται μόνο συναρτήσεις πελάτη. Άλλα ενσωματωμένα εργαλεία και explicit cache δεν υποστηρίζονται. Τα Search/URL context μπορεί να απαιτούν δέσμευση βάσει ολόκληρου του ορίου εισόδου· τα πραγματικάtoolUsePromptTokenCountυπολογίζονται ως token εισόδου. - Αν το μοντέλο δεν υποστηρίζει ένα πεδίο, συνημμένο ή συνδυασμό εργαλείων, το αίτημα απορρίπτεται πριν από τη δέσμευση — δεν χρεώνεται τίποτα. Θα λάβετε HTTP
400μεstatusINVALID_ARGUMENTκαι κλάσηinvalid_request(στοErrorInfo.reason—INVALID_REQUEST). Το μη έγκυρο JSON, τα σφάλματα παραμέτρων διαδρομής και άλλων ελέγχων επιστρέφουν επίσης400· διαβάστε το μήνυμα σφάλματος και το Request ID. Οι δυνατότητες εξαρτώνται από το μοντέλο: ελέγξτε τις μορφές και τις εισόδους του στον κατάλογο.
| Είσοδος | Υποστηριζόμενοι τύποι MIME |
|---|---|
| Ενσωματωμένες εικόνες | image/png, image/jpeg, image/webp |
| Έγγραφα | 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/wav, audio/mp3, audio/mpeg, audio/aiff, audio/aac, audio/ogg, audio/flac |
| Βίντεο | 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"},
)
# Μία αποστολή. Αν λήξει το χρονικό όριο, ελέγξτε το 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
# Δώστε ένα πραγματικό τοπικό αρχείο PDF, ήχου ή βίντεο και τον υποστηριζόμενο τύπο MIME του.
path, mime = pathlib.Path(sys.argv[1]), sys.argv[2]
payload = {"contents": [{"role": "user", "parts": [
{"text": "Περίγραψε σύντομα το περιεχόμενο του αρχείου."},
{"inlineData": {"mimeType": mime,
"data": base64.b64encode(path.read_bytes()).decode()}},
]}]}
print(generate("gemini-3.8-flash", payload))
# Εναλλακτικό συνημμένο: {"fileData": {"mimeType": mime, "fileUri": public_https_url}}
# Για πραγματική διεύθυνση URL του YouTube: {"fileData": {"fileUri": youtube_url}}Πλήρης κύκλος συνάρτησης
Στείλτε τη δήλωση, λάβετε το functionCall, εκτελέστε τη δική σας συνάρτηση, επιστρέψτε το functionResponse και ζητήστε την επόμενη απάντηση. Διατηρήστε όλο το content του μοντέλου, συμπεριλαμβανομένου του thoughtSignature· μην δημιουργήσετε μόνοι σας την υπογραφή.
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"},
)
# Μία αποστολή. Αν λήξει το χρονικό όριο, ελέγξτε το 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": "Πολλαπλασιασμός δύο αριθμών",
"parameters": {"type": "object", "properties": {
"a": {"type": "number"}, "b": {"type": "number"}},
"required": ["a", "b"]},
}]}]
contents = [{"role": "user", "parts": [{"text": "Πολλαπλασίασε το 7 με το 8 με τη βοήθεια της συνάρτησης"}]}]
for turn in range(4): # Περιορίστε τον κύκλο εκτέλεσης των εργαλείων· μην ξαναστέλνετε αίτημα του οποίου το αποτέλεσμα είναι ασαφές.
reply = generate("gemini-3.8-flash", {"contents": contents, "tools": tools})
content = reply["candidates"][0]["content"]
contents.append(content) # Διατηρήστε όλα (ALL) τα αρχικά τμήματα και το thoughtSignature αμετάβλητα.
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")Απάντηση σε ροή
for chunk in client.models.generate_content_stream(
model="gemini-3.8-flash",
contents="Περίγραψε το ηλιοβασίλεμα πάνω από τη θάλασσα",
):
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": "Περίγραψε το ηλιοβασίλεμα πάνω από τη θάλασσα"}]}]}' Διαθέσιμα μοντέλα
Στη μορφή Gemini διατίθενται 27 αναγνωριστικά: 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 διατίθενται και στη μορφή Anthropic Messages — χρήσιμο για πελάτες που υποστηρίζουν μόνο αυτή: Anthropic SDK.