τεκμηρίωση
Σύνδεση υπηρεσιών

Google GenAI SDK

Markdown

Η εγγενής μορφή Gemini: Google GenAI SDK για Python και JavaScript και απευθείας αιτήματα REST.

Πλήρης οδηγός

Εγκατάσταση

pip 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)

Τι μπορείτε να στείλετε

  • Πεδία ανώτατου επιπέδου: 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 με status INVALID_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)

Διαθέσιμα μοντέλα

Στη μορφή 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.

Έχετε ερωτήσεις; Στείλτε μας το Request ID και μια περιγραφή — θα σας βοηθήσουμε να βρείτε την αιτία.Επικοινωνία με την υποστήριξη