Source: https://ailoot.ai/docs/el/connect/google-genai/
Canonical: https://ailoot.ai/docs/el/connect/google-genai/
Language: el

[Σύνδεση υπηρεσιών](https://ailoot.ai/docs/el/) 

# Google GenAI SDK

[Markdown](https://ailoot.ai/docs/el/connect/google-genai/index.md)

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

## [](https://ailoot.ai/docs/el/connect/google-genai/#install)Εγκατάσταση

```bash
pip install google-genai
```

```bash
npm install @google/genai
```

## [](https://ailoot.ai/docs/el/connect/google-genai/#client)Σύνδεση υπηρεσιών

Διεύθυνση — `https://api.ailoot.ai` χωρίς `/v1beta`: το SDK συνθέτει τη διαδρομή `/v1beta/models/<μοντέλο>:generateContent` μόνο του. Στην Python, η διεύθυνση ορίζεται μέσω `HttpOptions(base_url=…)`, στην JavaScript — μέσω `httpOptions.baseUrl`. Το SDK στέλνει το κλειδί στην κεφαλίδα `x-goog-api-key`.

```python
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)
```

```js
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);
```

```bash
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": "Πρότεινε τρία ονόματα για μια καφετέρια."}]}
    ]
  }' 
```

## [](https://ailoot.ai/docs/el/connect/google-genai/#body)Τι μπορείτε να στείλετε

- Πεδία ανώτατου επιπέδου: `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 |

```python
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}}
```

## [](https://ailoot.ai/docs/el/connect/google-genai/#function-loop)Πλήρης κύκλος συνάρτησης

Στείλτε τη δήλωση, λάβετε το functionCall, εκτελέστε τη δική σας συνάρτηση, επιστρέψτε το functionResponse και ζητήστε την επόμενη απάντηση. Διατηρήστε όλο το content του μοντέλου, συμπεριλαμβανομένου του thoughtSignature· μην δημιουργήσετε μόνοι σας την υπογραφή.

```python
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")
```

## [](https://ailoot.ai/docs/el/connect/google-genai/#stream)Απάντηση σε ροή

```python
for chunk in client.models.generate_content_stream(
    model="gemini-3.8-flash",
    contents="Περίγραψε το ηλιοβασίλεμα πάνω από τη θάλασσα",
):
    print(chunk.text, end="", flush=True)
```

```bash
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": "Περίγραψε το ηλιοβασίλεμα πάνω από τη θάλασσα"}]}]}' 
```

Το Ailoot παραδίδει τη χρεώσιμη απάντηση Gemini μετά τον υπολογισμό του κόστους: το κείμενο της ροής φτάνει ολόκληρο όταν ολοκληρώσει το μοντέλο, και όχι λέξη προς λέξη. Η ροή Gemini δεν περιέχει βοηθητικές γραμμές, οπότε για απαντήσεις που αργούν αφήστε επαρκές περιθώριο στο χρονικό όριο του πελάτη.

## [](https://ailoot.ai/docs/el/connect/google-genai/#models)Διαθέσιμα μοντέλα

Στη μορφή 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](https://ailoot.ai/docs/el/connect/anthropic-sdk/).

Έχετε ερωτήσεις; Στείλτε μας το Request ID και μια περιγραφή — θα σας βοηθήσουμε να βρείτε την αιτία.[Επικοινωνία με την υποστήριξη](mailto:support@ailoot.ai)

## Ailoot · Η εταιρεία και το χαρτοφυλάκιο έργων της





Η Ailoot στηρίζεται στη συσσωρευμένη λειτουργική εμπειρία, τη μεγάλη πελατειακή βάση, τη σταθερή εξυπηρέτηση και τον συνεχή έλεγχο KPI.





Η εταιρεία και το χαρτοφυλάκιο έργων της: εκατομμύρια πελάτες· μηνιαίες πωλήσεις δισεκατομμυρίων.





Η Ailoot αξιοποιεί αυτή τη λειτουργική εμπειρία για πρόσβαση μέσω API σε λειτουργίες AI στα προϊόντα, τους πράκτορες, τις εφαρμογές και τους αυτοματισμούς των πελατών.
