Zum Hauptinhalt springen
TokenLab unterstützt das native Google Gemini API-Format für Gemini-Modelle. Dies ermöglicht eine direkte Kompatibilität mit Google AI SDKs.

Pfadparameter

model
string
erforderlich
Modellname (z. B. gemini-2.5-pro, gemini-3.5-flash).Für Produktionsintegrationen bevorzugen Sie URL-basierte fileData / file_data-Medienbestandteile mit einer öffentlichen https-URL. TokenLab verwendet den nativen Gemini-Pfad, wenn er verfügbar ist, und wechselt zu einem kompatiblen öffentlichen Pfad, wenn natives Handling für diese multimodale Anfrage nicht verfügbar ist.

Abfrageparameter

key
string
API-Key (Alternative zur Header-Authentifizierung).

Authentifizierung

Gemini-Endpunkte unterstützen mehrere Authentifizierungsmethoden:
  • ?key=YOUR_API_KEY Abfrageparameter
  • x-goog-api-key: YOUR_API_KEY Header
  • Authorization: Bearer YOUR_API_KEY Header

Request-Body

contents
array
erforderlich
Inhalte der Konversation.Jedes Inhaltsobjekt enthält:
  • role (string): user oder model
  • parts (array): Inhalts-Parts. TokenLab unterstützt aktuell:
    • Text-Parts: { "text": "..." }
    • Inline-Medien-Parts: inlineData / inline_data
    • URL-basierte Datei-Parts: fileData / file_data
Für Medien-Parts akzeptiert TokenLab derzeit Bild-, Audio- und Video-MIME-Typen und leitet sie über den Gemini-kompatiblen Supported Operations weiter.Rollenwerte user und model werden ohne Beachtung der Groß-/Kleinschreibung normalisiert. inlineData / inline_data mit application/octet-stream wird nur akzeptiert, wenn TokenLab unterstützte Bild- oder Videobytes erkennen kann; andernfalls schlägt die Anfrage vor dem Routing fehl. Bei nativen Image-Output-Anfragen ist nur die Google-search/maps-Toolfamilie erlaubt, und nicht unterstützte Tool-Kombinationen schlagen vor Upstream-Retries fehl.
systemInstruction
object
Systemanweisung für das Modell.
generationConfig
object
Generierungskonfiguration:
  • temperature (number): Sampling-Temperatur
  • topP (number): Nucleus-Sampling-Wahrscheinlichkeit
  • topK (integer): Top-K-Sampling
  • maxOutputTokens (integer): Maximale Anzahl an Output-Tokens
  • stopSequences (array): Stoppsequenzen
  • candidateCount (integer): Kandidatenanzahl für nicht-streamende Generierung. Streaming-Anfragen müssen das Feld weglassen oder auf 1 setzen.
  • responseModalities (array): Angeforderte Output-Modalitäten für kompatible native Routen.
  • responseMimeType (string): Output-MIME-Typ, z. B. text/plain oder application/json.
  • responseSchema (object): JSON schema für strukturierte Ausgabe, wenn responseMimeType JSON anfordert.
  • thinkingConfig / thinking_config (object): Thinking-Budget-Optionen für kompatible Modelle.
safetySettings
array
Einstellungen für Sicherheitsfilter.

Antwort

candidates
array
Generierte Inhaltskandidaten.
usageMetadata
object
Informationen zur Token-Nutzung.
curl -X POST "https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:generateContent?key=sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [{"text": "Hello, Gemini!"}]
      }
    ],
    "generationConfig": {
      "temperature": 0.7,
      "maxOutputTokens": 1024
    }
  }'
import google.generativeai as genai

genai.configure(
    api_key="sk-your-api-key",
    transport="rest",
    client_options={"api_endpoint": "api.tokenlab.sh"}
)

model = genai.GenerativeModel("gemini-2.5-pro")
response = model.generate_content("Hello, Gemini!")

print(response.text)
import { GoogleGenerativeAI } from "@google/generative-ai";

const genAI = new GoogleGenerativeAI("sk-your-api-key", {
  baseUrl: "https://api.tokenlab.sh"
});

const model = genAI.getGenerativeModel({ model: "gemini-2.5-pro" });
const result = await model.generateContent("Hello, Gemini!");

console.log(result.response.text());
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    payload := map[string]interface{}{
        "contents": []map[string]interface{}{
            {
                "parts": []map[string]string{
                    {"text": "Hello, Gemini!"},
                },
            },
        },
        "generationConfig": map[string]interface{}{
            "temperature":    0.7,
            "maxOutputTokens": 1024,
        },
    }

    jsonData, _ := json.Marshal(payload)
    req, _ := http.NewRequest("POST",
        "https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:generateContent?key=sk-your-api-key",
        bytes.NewBuffer(jsonData))
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
<?php
$payload = [
    'contents' => [
        [
            'parts' => [
                ['text' => 'Hello, Gemini!']
            ]
        ]
    ],
    'generationConfig' => [
        'temperature' => 0.7,
        'maxOutputTokens' => 1024
    ]
];

$ch = curl_init('https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:generateContent?key=sk-your-api-key');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode($payload)
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
echo $data['candidates'][0]['content']['parts'][0]['text'];

Beispiele für multimodale Eingaben

Bei multimodalen Gemini-Anfragen platzierst du Medien in contents[].parts[] und nutzt entweder Inline-Bytes oder URL-basierte Dateiverweise. Der öffentliche Gemini-Contract unterstützt derzeit folgende Medienkategorien:
  • Bild
  • audio
  • video
Für Inline-Medien verwende inlineData oder inline_data und übergib Base64-kodierte Dateibytes. Für URL-Medien verwende fileData oder file_data und übergib eine öffentlich erreichbare https-URL.

Beispiel für Bildeingabe

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Bitte beschreibe dieses Bild." },
        {
          "inlineData": {
            "mimeType": "image/jpeg",
            "data": "/9j/4AAQSkZJRgABAQ..."
          }
        }
      ]
    }
  ]
}

Beispiel für Audioeingabe

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Bitte transkribiere und fasse dieses Audio zusammen." },
        {
          "file_data": {
            "mime_type": "audio/mpeg",
            "file_uri": "https://example.com/sample.mp3"
          }
        }
      ]
    }
  ]
}

Beispiel für Videoeingabe

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Bitte beschreibe dieses Video kurz." },
        {
          "fileData": {
            "mimeType": "video/mp4",
            "fileUri": "https://example.com/sample.mp4"
          }
        }
      ]
    }
  ]
}
{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {"text": "Hello! How can I assist you today?"}
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        {"category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE"}
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 5,
    "candidatesTokenCount": 10,
    "totalTokenCount": 15
  }
}

Video-Eingabebeispiel

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Please describe this video." },
        {
          "fileData": {
            "mimeType": "video/mp4",
            "fileUri": "https://example.com/demo.mp4"
          }
        }
      ]
    }
  ]
}

Audio-Eingabebeispiel

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Please describe this audio." },
        {
          "fileData": {
            "mimeType": "audio/mpeg",
            "fileUri": "https://example.com/demo.mp3"
          }
        }
      ]
    }
  ]
}