Passer au contenu principal
TokenLab prend en charge le format natif de l’API Google Gemini pour les modèles Gemini. Cela permet une compatibilité directe avec les SDK Google AI.

Paramètres de chemin

model
string
requis
Nom du modèle (par ex., gemini-2.5-pro, gemini-3.5-flash).Pour les intégrations en production, privilégiez les parties média fileData / file_data basées sur une URL avec une URL publique https. TokenLab utilise le chemin Gemini natif lorsqu’il est disponible et bascule vers un chemin public compatible lorsque le traitement natif n’est pas disponible pour cette requête multimodale.

Paramètres de requête

key
string
Clé API (alternative à l’authentification par en-tête).

Authentification

Les points de terminaison Gemini prennent en charge plusieurs méthodes d’authentification :
  • Paramètre de requête ?key=YOUR_API_KEY
  • En-tête x-goog-api-key: YOUR_API_KEY
  • En-tête Authorization: Bearer YOUR_API_KEY

Corps de la requête

contents
array
requis
Contenu de la conversation.Chaque objet de contenu contient :
  • role (string) : user ou model
  • parts (array) : parties du contenu. TokenLab prend actuellement en charge :
    • les parties texte : { "text": "..." }
    • les parties média inline : inlineData / inline_data
    • les parties fichier basées sur URL : fileData / file_data
Pour les parties média, TokenLab accepte actuellement les types MIME image, audio et vidéo, puis les transmet via le détails du modèle compatible Gemini.Les rôles user et model sont normalisés sans tenir compte de la casse. inlineData / inline_data avec application/octet-stream n’est accepté que si TokenLab peut identifier des octets image ou vidéo pris en charge ; sinon, la requête échoue avant le routage. Pour les requêtes natives avec sortie image, seule la famille d’outils Google search/maps est acceptée, et les combinaisons non prises en charge échouent avant les nouvelles tentatives upstream.
systemInstruction
object
Instruction système pour le modèle.
generationConfig
object
Configuration de génération :
  • temperature (number) : Température d’échantillonnage
  • topP (number) : Probabilité d’échantillonnage nucleus
  • topK (integer) : Échantillonnage Top-K
  • maxOutputTokens (integer) : Nombre maximum de tokens de sortie
  • stopSequences (array) : Séquences d’arrêt
  • candidateCount (integer) : Nombre de candidats pour la génération non streamée. Les requêtes en streaming doivent l’omettre ou le garder à 1.
  • responseModalities (array) : Modalités de sortie demandées pour les routes natives compatibles.
  • responseMimeType (string) : Type MIME de sortie, par exemple text/plain ou application/json.
  • responseSchema (object) : JSON schema pour la sortie structurée lorsque responseMimeType demande du JSON.
  • thinkingConfig / thinking_config (object) : Options de budget de réflexion pour les modèles compatibles.
safetySettings
array
Paramètres des filtres de sécurité.

Réponse

candidates
array
Candidats de contenu générés.
usageMetadata
object
Informations sur l’utilisation des tokens.
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'];

Exemples d’entrée multimodale

Pour les requêtes multimodales Gemini, placez les médias dans contents[].parts[] en utilisant soit des octets inline, soit des références de fichier basées sur une URL. Catégories de médias actuellement prises en charge dans le détails du modèle Gemini :
  • image
  • audio
  • vidéo
Pour les médias inline, utilisez inlineData ou inline_data et transmettez les octets du fichier encodés en Base64. Pour les médias via URL, utilisez fileData ou file_data et transmettez une URL publique en https.

Exemple d’entrée image

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Veuillez décrire cette image." },
        {
          "inlineData": {
            "mimeType": "image/jpeg",
            "data": "/9j/4AAQSkZJRgABAQ..."
          }
        }
      ]
    }
  ]
}

Exemple d’entrée audio

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Veuillez transcrire et résumer cet audio." },
        {
          "file_data": {
            "mime_type": "audio/mpeg",
            "file_uri": "https://example.com/sample.mp3"
          }
        }
      ]
    }
  ]
}

Exemple d’entrée vidéo

{
  "contents": [
    {
      "role": "user",
      "parts": [
        { "text": "Veuillez décrire brièvement cette vidéo." },
        {
          "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
  }
}

Exemple d’entrée vidéo

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

Exemple d’entrée audio

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