Gemini nativo
Gerar Conteúdo via Stream
Realiza o stream da geração de conteúdo usando o formato da API Google Gemini
Versão SSE de Gemini generateContent. Os eventos podem conter apenas metadados ou conteúdo intermediário sem finishReason. O fluxo termina em EOF sem acrescentar um marcador [DONE].
Parâmetros de Caminho
Nome do modelo (ex: gemini-2.5-pro, gemini-3.5-flash).
Parâmetros de Consulta
Chave de API (alternativa à autenticação via header).
Corpo da Requisição
Igual a Gerar Conteúdo.
O suporte a generationConfig.candidateCount, ferramentas, tipos de mídia e outros campos opcionais depende do modelo escolhido.
Resposta
Retorna um stream de objetos JSON, cada um contendo uma resposta parcial.
Requisição
curl -N -X POST "https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:streamGenerateContent?key=sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"parts": [{"text": "Tell me a story"}]
}
]
}'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("Tell me a story", stream=True)
for chunk in response:
for candidate in chunk.candidates:
for part in candidate.content.parts:
if part.text:
print(part.text, end="")const response = await fetch(
'https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:streamGenerateContent?key=sk-your-api-key',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
contents: [{ parts: [{ text: 'Tell me a story' }] }]
})
}
);
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
console.log(decoder.decode(value, { stream: true }));
}package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"contents": []map[string]interface{}{
{"parts": []map[string]string{{"text": "Tell me a story"}}},
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST",
"https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:streamGenerateContent?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()
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}<?php
$payload = [
'contents' => [
['parts' => [['text' => 'Tell me a story']]]
]
];
$ch = curl_init('https://api.tokenlab.sh/v1beta/models/gemini-2.5-pro:streamGenerateContent?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),
CURLOPT_WRITEFUNCTION => function($ch, $data) {
echo $data;
return strlen($data);
}
]);
curl_exec($ch);
curl_close($ch);Exemplo de Entrada de Visão
As solicitações de visão em streaming usam a mesma estrutura contents[].parts[] que o endpoint sem streaming.
{
"contents": [
{
"role": "user",
"parts": [
{ "text": "Please describe this image." },
{
"inline_data": {
"mime_type": "image/jpeg",
"data": "/9j/4AAQSkZJRgABAQ..."
}
}
]
}
]
}Resposta
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{"text": "Once upon a time"}
]
}
}
]
}Autorização
BearerAuth Autenticação por Chave de API. Crie ou gerencie chaves de API em Dashboard > API > API Keys.
Local: header
Parâmetros de caminho
Nome do modelo (ex: gemini-2.5-pro)
Parâmetros de consulta
Chave de API (alternativa à autenticação via cabeçalho)
Cabeçalhos
Política de entrega por solicitação. Substitui os padrões da API key e do Workspace. Tenta automaticamente o TokenLab Verified primeiro e pode alternar uma vez para Official apenas antes da saída, aceitação da solicitação ou criação de recurso persistente.
Valores permitidos
- "auto"
- "verified"
- "official"
Corpo da requisição
application/json
Solicitação nativa Gemini GenerateContent. Nomes em lowerCamelCase do ProtoJSON e nomes originais em snake_case do proto são aceitos e preservados, incluindo solicitações mistas. Se ambas as grafias de um campo estiverem presentes, o TokenLab não as mescla nem escolhe uma precedência local. Campos desconhecidos são encaminhados com base no melhor esforço.
Resposta
text/event-stream
application/json
application/json
application/json
application/json
application/json