Generating content

La API de Gemini admite la generación de contenido con imágenes, audio, código, herramientas y mucho más. Para obtener detalles sobre cada una de estas funciones, sigue leyendo y consulta el código de muestra centrado en tareas o lee las guías integrales.

Método: models.generateContent

Genera una respuesta del modelo a partir de una entrada GenerateContentRequest. Consulta la guía de generación de texto para obtener información detallada sobre el uso. Las capacidades de entrada difieren entre los modelos, incluidos los modelos ajustados. Consulta la guía del modelo y la guía de ajuste para obtener más detalles.

Extremo

post https://generativelanguage.googleapis.com/v1beta/{model=models/*}:generateContent

Parámetros de ruta

model string

Obligatorio. Nombre del Model que se usará para generar la finalización.

Formato: models/{model}. Toma la forma models/{model}.

Cuerpo de la solicitud

El cuerpo de la solicitud contiene datos con la siguiente estructura:

Campos
contents[] object (Content)

Obligatorio. El contenido de la conversación actual con el modelo.

Para consultas de un solo turno, esta es una instancia única. Para las consultas de varios turnos, como chat, este es un campo repetido que contiene el historial de conversaciones y la solicitud más reciente.

tools[] object (Tool)

Opcional. Es una lista de Tools que el Model puede usar para generar la siguiente respuesta.

Una Tool es un fragmento de código que permite que el sistema interactúe con sistemas externos para realizar una acción, o un conjunto de acciones, fuera del conocimiento y del alcance del Model. Los Tool admitidos son Function y codeExecution. Consulta las guías de Llamada a función y Ejecución de código para obtener más información.

toolConfig object (ToolConfig)

Opcional. Es la configuración de la herramienta para cualquier Tool especificado en la solicitud. Consulta la guía de llamadas a funciones para ver un ejemplo de uso.

safetySettings[] object (SafetySetting)

Opcional. Es una lista de instancias SafetySetting únicas para bloquear contenido no seguro.

Esto se aplicará en GenerateContentRequest.contents y GenerateContentResponse.candidates. No debe haber más de un parámetro de configuración para cada tipo de SafetyCategory. La API bloqueará todo el contenido y las respuestas que no cumplan con los umbrales establecidos por estos parámetros de configuración. Esta lista anula la configuración predeterminada de cada SafetyCategory especificado en safetySettings. Si no hay un SafetySetting para un SafetyCategory determinado proporcionado en la lista, la API usará el parámetro de configuración de seguridad predeterminado para esa categoría. Se admiten las categorías de daño HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_CIVIC_INTEGRITY y HARM_CATEGORY_JAILBREAK. Consulta la guía para obtener información detallada sobre los parámetros de configuración de seguridad disponibles. También consulta la Guía de seguridad para obtener información sobre cómo incorporar consideraciones de seguridad en tus aplicaciones de IA.

systemInstruction object (Content)

Opcional. El desarrollador establece instrucciones del sistema. Actualmente, solo texto.

generationConfig object (GenerationConfig)

Opcional. Son las opciones de configuración para la generación y los resultados del modelo.

cachedContent string

Opcional. Nombre del contenido almacenado en caché que se usará como contexto para entregar la predicción. Formato: cachedContents/{cachedContent}

serviceTier enum (ServiceTier)

Opcional. Es el nivel de servicio de la solicitud.

store boolean

Opcional. Configura el comportamiento de registro para una solicitud determinada. Si se establece, tiene prioridad sobre la configuración de registro a nivel del proyecto.

Ejemplo de solicitud

Texto

Python

from google import genai

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.7-flash", contents="Write a story about a magic backpack."
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const response = await ai.models.generateContent({
  model: "gemini-3.7-flash",
  contents: "Write a story about a magic backpack.",
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
contents := []*genai.Content{
	genai.NewContentFromText("Write a story about a magic backpack.", genai.RoleUser),
}
response, err := client.Models.GenerateContent(ctx, "gemini-3.7-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Almeja

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[{"text": "Write a story about a magic backpack."}]
        }]
       }' 2> /dev/null

Java

Client client = new Client();

GenerateContentResponse response =
        client.models.generateContent(
                "gemini-3.7-flash",
                "Write a story about a magic backpack.",
                null);

System.out.println(response.text());

Imagen

Python

from google import genai
import PIL.Image

client = genai.Client()
organ = PIL.Image.open(media / "organ.jpg")
response = client.models.generate_content(
    model="gemini-3.7-flash", contents=["Tell me about this instrument", organ]
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const organ = await ai.files.upload({
  file: path.join(media, "organ.jpg"),
});

const response = await ai.models.generateContent({
  model: "gemini-3.7-flash",
  contents: [
    createUserContent([
      "Tell me about this instrument", 
      createPartFromUri(organ.uri, organ.mimeType)
    ]),
  ],
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "organ.jpg"), 
	&genai.UploadFileConfig{
		MIMEType : "image/jpeg",
	},
)
if err != nil {
	log.Fatal(err)
}
parts := []*genai.Part{
	genai.NewPartFromText("Tell me about this instrument"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}
contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.7-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Almeja

# Use a temporary file to hold the base64 encoded image data
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"

# Use a temporary file to hold the JSON payload
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT

cat > "$TEMP_JSON" << EOF
{
  "contents": [{
    "parts":[
      {"text": "Tell me about this instrument"},
      {
        "inline_data": {
          "mime_type":"image/jpeg",
          "data": "$(cat "$TEMP_B64")"
        }
      }
    ]
  }]
}
EOF

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d "@$TEMP_JSON" 2> /dev/null

Java

Client client = new Client();

String path = media_path + "organ.jpg";
byte[] imageData = Files.readAllBytes(Paths.get(path));

Content content =
        Content.fromParts(
                Part.fromText("Tell me about this instrument."),
                Part.fromBytes(imageData, "image/jpeg"));

GenerateContentResponse response = client.models.generateContent("gemini-3.7-flash", content, null);

System.out.println(response.text());

Audio

Python

from google import genai

client = genai.Client()
sample_audio = client.files.upload(file=media / "sample.mp3")
response = client.models.generate_content(
    model="gemini-3.7-flash",
    contents=["Give me a summary of this audio file.", sample_audio],
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const audio = await ai.files.upload({
  file: path.join(media, "sample.mp3"),
});

const response = await ai.models.generateContent({
  model: "gemini-3.7-flash",
  contents: [
    createUserContent([
      "Give me a summary of this audio file.",
      createPartFromUri(audio.uri, audio.mimeType),
    ]),
  ],
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "sample.mp3"), 
	&genai.UploadFileConfig{
		MIMEType : "audio/mpeg",
	},
)
if err != nil {
	log.Fatal(err)
}

parts := []*genai.Part{
	genai.NewPartFromText("Give me a summary of this audio file."),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.7-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Almeja

# Use File API to upload audio data to API request.
MIME_TYPE=$(file -b --mime-type "${AUDIO_PATH}")
NUM_BYTES=$(wc -c < "${AUDIO_PATH}")
DISPLAY_NAME=AUDIO

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${AUDIO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Please describe this file."},
          {"file_data":{"mime_type": "audio/mpeg", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

Video

Python

from google import genai
import time

client = genai.Client()
# Video clip (CC BY 3.0) from https://peach.blender.org/download/
myfile = client.files.upload(file=media / "Big_Buck_Bunny.mp4")
print(f"{myfile=}")

# Poll until the video file is completely processed (state becomes ACTIVE).
while not myfile.state or myfile.state.name != "ACTIVE":
    print("Processing video...")
    print("File state:", myfile.state)
    time.sleep(5)
    myfile = client.files.get(name=myfile.name)

response = client.models.generate_content(
    model="gemini-3.7-flash", contents=[myfile, "Describe this video clip"]
)
print(f"{response.text=}")

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

let video = await ai.files.upload({
  file: path.join(media, 'Big_Buck_Bunny.mp4'),
});

// Poll until the video file is completely processed (state becomes ACTIVE).
while (!video.state || video.state.toString() !== 'ACTIVE') {
  console.log('Processing video...');
  console.log('File state: ', video.state);
  await sleep(5000);
  video = await ai.files.get({name: video.name});
}

const response = await ai.models.generateContent({
  model: "gemini-3.7-flash",
  contents: [
    createUserContent([
      "Describe this video clip",
      createPartFromUri(video.uri, video.mimeType),
    ]),
  ],
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "Big_Buck_Bunny.mp4"), 
	&genai.UploadFileConfig{
		MIMEType : "video/mp4",
	},
)
if err != nil {
	log.Fatal(err)
}

// Poll until the video file is completely processed (state becomes ACTIVE).
for file.State == genai.FileStateUnspecified || file.State != genai.FileStateActive {
	fmt.Println("Processing video...")
	fmt.Println("File state:", file.State)
	time.Sleep(5 * time.Second)

	file, err = client.Files.Get(ctx, file.Name, nil)
	if err != nil {
		log.Fatal(err)
	}
}

parts := []*genai.Part{
	genai.NewPartFromText("Describe this video clip"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.7-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Almeja

# Use File API to upload audio data to API request.
MIME_TYPE=$(file -b --mime-type "${VIDEO_PATH}")
NUM_BYTES=$(wc -c < "${VIDEO_PATH}")
DISPLAY_NAME=VIDEO

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D "${tmp_header_file}" \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${VIDEO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

state=$(jq ".file.state" file_info.json)
echo state=$state

name=$(jq ".file.name" file_info.json)
echo name=$name

while [[ "($state)" = *"PROCESSING"* ]];
do
  echo "Processing video..."
  sleep 5
  # Get the file of interest to check state
  curl https://generativelanguage.googleapis.com/v1beta/files/$name > file_info.json
  state=$(jq ".file.state" file_info.json)
done

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Transcribe the audio from this video, giving timestamps for salient events in the video. Also provide visual descriptions."},
          {"file_data":{"mime_type": "video/mp4", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

PDF

Python

from google import genai

client = genai.Client()
sample_pdf = client.files.upload(file=media / "test.pdf")
response = client.models.generate_content(
    model="gemini-3.7-flash",
    contents=["Give me a summary of this document:", sample_pdf],
)
print(f"{response.text=}")

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "test.pdf"), 
	&genai.UploadFileConfig{
		MIMEType : "application/pdf",
	},
)
if err != nil {
	log.Fatal(err)
}

parts := []*genai.Part{
	genai.NewPartFromText("Give me a summary of this document:"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.7-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Almeja

MIME_TYPE=$(file -b --mime-type "${PDF_PATH}")
NUM_BYTES=$(wc -c < "${PDF_PATH}")
DISPLAY_NAME=TEXT


echo $MIME_TYPE
tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${PDF_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Can you add a few more lines to this poem?"},
          {"file_data":{"mime_type": "application/pdf", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

Chat

Python

from google import genai
from google.genai import types

client = genai.Client()
# Pass initial history using the "history" argument
chat = client.chats.create(
    model="gemini-3.7-flash",
    history=[
        types.Content(role="user", parts=[types.Part(text="Hello")]),
        types.Content(
            role="model",
            parts=[
                types.Part(
                    text="Great to meet you. What would you like to know?"
                )
            ],
        ),
    ],
)
response = chat.send_message(message="I have 2 dogs in my house.")
print(response.text)
response = chat.send_message(message="How many paws are in my house?")
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const chat = ai.chats.create({
  model: "gemini-3.7-flash",
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});

const response1 = await chat.sendMessage({
  message: "I have 2 dogs in my house.",
});
console.log("Chat response 1:", response1.text);

const response2 = await chat.sendMessage({
  message: "How many paws are in my house?",
});
console.log("Chat response 2:", response2.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

// Pass initial history using the History field.
history := []*genai.Content{
	genai.NewContentFromText("Hello", genai.RoleUser),
	genai.NewContentFromText("Great to meet you. What would you like to know?", genai.RoleModel),
}

chat, err := client.Chats.Create(ctx, "gemini-3.7-flash", nil, history)
if err != nil {
	log.Fatal(err)
}

firstResp, err := chat.SendMessage(ctx, genai.Part{Text: "I have 2 dogs in my house."})
if err != nil {
	log.Fatal(err)
}
fmt.Println(firstResp.Text())

secondResp, err := chat.SendMessage(ctx, genai.Part{Text: "How many paws are in my house?"})
if err != nil {
	log.Fatal(err)
}
fmt.Println(secondResp.Text())

Almeja

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Hello"}]},
        {"role": "model",
         "parts":[{
           "text": "Great to meet you. What would you like to know?"}]},
        {"role":"user",
         "parts":[{
           "text": "I have two dogs in my house. How many paws are in my house?"}]},
      ]
    }' 2> /dev/null | grep "text"

Java

Client client = new Client();

Content userContent = Content.fromParts(Part.fromText("Hello"));
Content modelContent =
        Content.builder()
                .role("model")
                .parts(
                        Collections.singletonList(
                                Part.fromText("Great to meet you. What would you like to know?")
                        )
                ).build();

Chat chat = client.chats.create(
        "gemini-3.7-flash",
        GenerateContentConfig.builder()
                .systemInstruction(userContent)
                .systemInstruction(modelContent)
                .build()
);

GenerateContentResponse response1 = chat.sendMessage("I have 2 dogs in my house.");
System.out.println(response1.text());

GenerateContentResponse response2 = chat.sendMessage("How many paws are in my house?");
System.out.println(response2.text());

Caché

Python

from google import genai
from google.genai import types

client = genai.Client()
document = client.files.upload(file=media / "a11.txt")
model_name = "gemini-3.7-flash"

cache = client.caches.create(
    model=model_name,
    config=types.CreateCachedContentConfig(
        contents=[document],
        system_instruction="You are an expert analyzing transcripts.",
    ),
)
print(cache)

response = client.models.generate_content(
    model=model_name,
    contents="Please summarize this transcript",
    config=types.GenerateContentConfig(cached_content=cache.name),
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const filePath = path.join(media, "a11.txt");
const document = await ai.files.upload({
  file: filePath,
  config: { mimeType: "text/plain" },
});
console.log("Uploaded file name:", document.name);
const modelName = "gemini-3.7-flash";

const contents = [
  createUserContent(createPartFromUri(document.uri, document.mimeType)),
];

const cache = await ai.caches.create({
  model: modelName,
  config: {
    contents: contents,
    systemInstruction: "You are an expert analyzing transcripts.",
  },
});
console.log("Cache created:", cache);

const response = await ai.models.generateContent({
  model: modelName,
  contents: "Please summarize this transcript",
  config: { cachedContent: cache.name },
});
console.log("Response text:", response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"), 
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

modelName := "gemini-3.7-flash"
document, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "a11.txt"), 
	&genai.UploadFileConfig{
		MIMEType : "text/plain",
	},
)
if err != nil {
	log.Fatal(err)
}
parts := []*genai.Part{
	genai.NewPartFromURI(document.URI, document.MIMEType),
}
contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}
cache, err := client.Caches.Create(ctx, modelName, &genai.CreateCachedContentConfig{
	Contents: contents,
	SystemInstruction: genai.NewContentFromText(
		"You are an expert analyzing transcripts.", genai.RoleUser,
	),
})
if err != nil {
	log.Fatal(err)
}
fmt.Println("Cache created:")
fmt.Println(cache)

// Use the cache for generating content.
response, err := client.Models.GenerateContent(
	ctx,
	modelName,
	genai.Text("Please summarize this transcript"),
	&genai.GenerateContentConfig{
		CachedContent: cache.Name,
	},
)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Modelo ajustado

Python

# With Gemini 2 we're launching a new SDK. See the following doc for details.
# https://ai.google.dev/gemini-api/docs/migrate

Modo JSON

Python

from google import genai
from google.genai import types
from typing_extensions import TypedDict

class Recipe(TypedDict):
    recipe_name: str
    ingredients: list[str]

client = genai.Client()
result = client.models.generate_content(
    model="gemini-3.7-flash",
    contents="List a few popular cookie recipes.",
    config=types.GenerateContentConfig(
        response_mime_type="application/json", response_schema=list[Recipe]
    ),
)
print(result)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const response = await ai.models.generateContent({
  model: "gemini-3.7-flash",
  contents: "List a few popular cookie recipes.",
  config: {
    responseMimeType: "application/json",
    responseSchema: {
      type: "array",
      items: {
        type: "object",
        properties: {
          recipeName: { type: "string" },
          ingredients: { type: "array", items: { type: "string" } },
        },
        required: ["recipeName", "ingredients"],
      },
    },
  },
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"), 
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

schema := &genai.Schema{
	Type: genai.TypeArray,
	Items: &genai.Schema{
		Type: genai.TypeObject,
		Properties: map[string]*genai.Schema{
			"recipe_name": {Type: genai.TypeString},
			"ingredients": {
				Type:  genai.TypeArray,
				Items: &genai.Schema{Type: genai.TypeString},
			},
		},
		Required: []string{"recipe_name"},
	},
}

config := &genai.GenerateContentConfig{
	ResponseMIMEType: "application/json",
	ResponseSchema:   schema,
}

response, err := client.Models.GenerateContent(
	ctx,
	"gemini-3.7-flash",
	genai.Text("List a few popular cookie recipes."),
	config,
)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Almeja

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "contents": [{
      "parts":[
        {"text": "List 5 popular cookie recipes"}
        ]
    }],
    "generationConfig": {
        "response_mime_type": "application/json",
        "response_schema": {
          "type": "ARRAY",
          "items": {
            "type": "OBJECT",
            "properties": {
              "recipe_name": {"type":"STRING"},
            }
          }
        }
    }
}' 2> /dev/null | head

Java

Client client = new Client();

Schema recipeSchema = Schema.builder()
        .type(Array.class.getSimpleName())
        .items(Schema.builder()
                .type(Object.class.getSimpleName())
                .properties(
                        Map.of("recipe_name", Schema.builder()
                                        .type(String.class.getSimpleName())
                                        .build(),
                                "ingredients", Schema.builder()
                                        .type(Array.class.getSimpleName())
                                        .items(Schema.builder()
                                                .type(String.class.getSimpleName())
                                                .build())
                                        .build())
                )
                .required(List.of("recipe_name", "ingredients"))
                .build())
        .build();

GenerateContentConfig config =
        GenerateContentConfig.builder()
                .responseMimeType("application/json")
                .responseSchema(recipeSchema)
                .build();

GenerateContentResponse response =
        client.models.generateContent(
                "gemini-3.7-flash",
                "List a few popular cookie recipes.",
                config);

System.out.println(response.text());

Ejecución de código

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.7-flash",
    contents=(
        "Write and execute code that calculates the sum of the first 50 prime numbers. "
        "Ensure that only the executable code and its resulting output are generated."
    ),
)
# Each part may contain text, executable code, or an execution result.
for part in response.candidates[0].content.parts:
    print(part, "\n")

print("-" * 80)
# The .text accessor concatenates the parts into a markdown-formatted text.
print("\n", response.text)

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

response, err := client.Models.GenerateContent(
	ctx,
	"gemini-3.7-flash",
	genai.Text(
		`Write and execute code that calculates the sum of the first 50 prime numbers.
		 Ensure that only the executable code and its resulting output are generated.`,
	),
	&genai.GenerateContentConfig{},
)
if err != nil {
	log.Fatal(err)
}

// Print the response.
printResponse(response)

fmt.Println("--------------------------------------------------------------------------------")
fmt.Println(response.Text())

Java

Client client = new Client();

String prompt = """
        Write and execute code that calculates the sum of the first 50 prime numbers.
        Ensure that only the executable code and its resulting output are generated.
        """;

GenerateContentResponse response =
        client.models.generateContent(
                "gemini-3.7-flash",
                prompt,
                null);

for (Part part : response.candidates().get().getFirst().content().get().parts().get()) {
    System.out.println(part + "\n");
}

System.out.println("-".repeat(80));
System.out.println(response.text());

Llamadas a funciones

Python

from google import genai
from google.genai import types

client = genai.Client()

def add(a: float, b: float) -> float:
    """returns a + b."""
    return a + b

def subtract(a: float, b: float) -> float:
    """returns a - b."""
    return a - b

def multiply(a: float, b: float) -> float:
    """returns a * b."""
    return a * b

def divide(a: float, b: float) -> float:
    """returns a / b."""
    return a / b

# Create a chat session; function calling (via tools) is enabled in the config.
chat = client.chats.create(
    model="gemini-3.7-flash",
    config=types.GenerateContentConfig(tools=[add, subtract, multiply, divide]),
)
response = chat.send_message(
    message="I have 57 cats, each owns 44 mittens, how many mittens is that in total?"
)
print(response.text)

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
modelName := "gemini-3.7-flash"

// Create the function declarations for arithmetic operations.
addDeclaration := createArithmeticToolDeclaration("addNumbers", "Return the result of adding two numbers.")
subtractDeclaration := createArithmeticToolDeclaration("subtractNumbers", "Return the result of subtracting the second number from the first.")
multiplyDeclaration := createArithmeticToolDeclaration("multiplyNumbers", "Return the product of two numbers.")
divideDeclaration := createArithmeticToolDeclaration("divideNumbers", "Return the quotient of dividing the first number by the second.")

// Group the function declarations as a tool.
tools := []*genai.Tool{
	{
		FunctionDeclarations: []*genai.FunctionDeclaration{
			addDeclaration,
			subtractDeclaration,
			multiplyDeclaration,
			divideDeclaration,
		},
	},
}

// Create the content prompt.
contents := []*genai.Content{
	genai.NewContentFromText(
		"I have 57 cats, each owns 44 mittens, how many mittens is that in total?", genai.RoleUser,
	),
}

// Set up the generate content configuration with function calling enabled.
config := &genai.GenerateContentConfig{
	Tools: tools,
	ToolConfig: &genai.ToolConfig{
		FunctionCallingConfig: &genai.FunctionCallingConfig{
			// The mode equivalent to FunctionCallingConfigMode.ANY in JS.
			Mode: genai.FunctionCallingConfigModeAny,
		},
	},
}

genContentResp, err := client.Models.GenerateContent(ctx, modelName, contents, config)
if err != nil {
	log.Fatal(err)
}

// Assume the response includes a list of function calls.
if len(genContentResp.FunctionCalls()) == 0 {
	log.Println("No function call returned from the AI.")
	return nil
}
functionCall := genContentResp.FunctionCalls()[0]
log.Printf("Function call: %+v\n", functionCall)

// Marshal the Args map into JSON bytes.
argsMap, err := json.Marshal(functionCall.Args)
if err != nil {
	log.Fatal(err)
}

// Unmarshal the JSON bytes into the ArithmeticArgs struct.
var args ArithmeticArgs
if err := json.Unmarshal(argsMap, &args); err != nil {
	log.Fatal(err)
}

// Map the function name to the actual arithmetic function.
var result float64
switch functionCall.Name {
	case "addNumbers":
		result = add(args.FirstParam, args.SecondParam)
	case "subtractNumbers":
		result = subtract(args.FirstParam, args.SecondParam)
	case "multiplyNumbers":
		result = multiply(args.FirstParam, args.SecondParam)
	case "divideNumbers":
		result = divide(args.FirstParam, args.SecondParam)
	default:
		return fmt.Errorf("unimplemented function: %s", functionCall.Name)
}
log.Printf("Function result: %v\n", result)

// Prepare the final result message as content.
resultContents := []*genai.Content{
	genai.NewContentFromText("The final result is " + fmt.Sprintf("%v", result), genai.RoleUser),
}

// Use GenerateContent to send the final result.
finalResponse, err := client.Models.GenerateContent(ctx, modelName, resultContents, &genai.GenerateContentConfig{})
if err != nil {
	log.Fatal(err)
}

printResponse(finalResponse)

Node.js

  // Make sure to include the following import:
  // import {GoogleGenAI} from '@google/genai';
  const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

  /**
   * The add function returns the sum of two numbers.
   * @param {number} a
   * @param {number} b
   * @returns {number}
   */
  function add(a, b) {
    return a + b;
  }

  /**
   * The subtract function returns the difference (a - b).
   * @param {number} a
   * @param {number} b
   * @returns {number}
   */
  function subtract(a, b) {
    return a - b;
  }

  /**
   * The multiply function returns the product of two numbers.
   * @param {number} a
   * @param {number} b
   * @returns {number}
   */
  function multiply(a, b) {
    return a * b;
  }

  /**
   * The divide function returns the quotient of a divided by b.
   * @param {number} a
   * @param {number} b
   * @returns {number}
   */
  function divide(a, b) {
    return a / b;
  }

  const addDeclaration = {
    name: "addNumbers",
    parameters: {
      type: "object",
      description: "Return the result of adding two numbers.",
      properties: {
        firstParam: {
          type: "number",
          description:
            "The first parameter which can be an integer or a floating point number.",
        },
        secondParam: {
          type: "number",
          description:
            "The second parameter which can be an integer or a floating point number.",
        },
      },
      required: ["firstParam", "secondParam"],
    },
  };

  const subtractDeclaration = {
    name: "subtractNumbers",
    parameters: {
      type: "object",
      description:
        "Return the result of subtracting the second number from the first.",
      properties: {
        firstParam: {
          type: "number",
          description: "The first parameter.",
        },
        secondParam: {
          type: "number",
          description: "The second parameter.",
        },
      },
      required: ["firstParam", "secondParam"],
    },
  };

  const multiplyDeclaration = {
    name: "multiplyNumbers",
    parameters: {
      type: "object",
      description: "Return the product of two numbers.",
      properties: {
        firstParam: {
          type: "number",
          description: "The first parameter.",
        },
        secondParam: {
          type: "number",
          description: "The second parameter.",
        },
      },
      required: ["firstParam", "secondParam"],
    },
  };

  const divideDeclaration = {
    name: "divideNumbers",
    parameters: {
      type: "object",
      description:
        "Return the quotient of dividing the first number by the second.",
      properties: {
        firstParam: {
          type: "number",
          description: "The first parameter.",
        },
        secondParam: {
          type: "number",
          description: "The second parameter.",
        },
      },
      required: ["firstParam", "secondParam"],
    },
  };

  // Step 1: Call generateContent with function calling enabled.
  const generateContentResponse = await ai.models.generateContent({
    model: "gemini-3.7-flash",
    contents:
      "I have 57 cats, each owns 44 mittens, how many mittens is that in total?",
    config: {
      toolConfig: {
        functionCallingConfig: {
          mode: FunctionCallingConfigMode.ANY,
        },
      },
      tools: [
        {
          functionDeclarations: [
            addDeclaration,
            subtractDeclaration,
            multiplyDeclaration,
            divideDeclaration,
          ],
        },
      ],
    },
  });

  // Step 2: Extract the function call.(
  // Assuming the response contains a 'functionCalls' array.
  const functionCall =
    generateContentResponse.functionCalls &&
    generateContentResponse.functionCalls[0];
  console.log(functionCall);

  // Parse the arguments.
  const args = functionCall.args;
  // Expected args format: { firstParam: number, secondParam: number }

  // Step 3: Invoke the actual function based on the function name.
  const functionMapping = {
    addNumbers: add,
    subtractNumbers: subtract,
    multiplyNumbers: multiply,
    divideNumbers: divide,
  };
  const func = functionMapping[functionCall.name];
  if (!func) {
    console.error("Unimplemented error:", functionCall.name);
    return generateContentResponse;
  }
  const resultValue = func(args.firstParam, args.secondParam);
  console.log("Function result:", resultValue);

  // Step 4: Use the chat API to send the result as the final answer.
  const chat = ai.chats.create({ model: "gemini-3.7-flash" });
  const chatResponse = await chat.sendMessage({
    message: "The final result is " + resultValue,
  });
  console.log(chatResponse.text);
  return chatResponse;
}

Almeja


cat > tools.json << EOF
{
  "function_declarations": [
    {
      "name": "enable_lights",
      "description": "Turn on the lighting system."
    },
    {
      "name": "set_light_color",
      "description": "Set the light color. Lights must be enabled for this to work.",
      "parameters": {
        "type": "object",
        "properties": {
          "rgb_hex": {
            "type": "string",
            "description": "The light color as a 6-digit hex string, e.g. ff0000 for red."
          }
        },
        "required": [
          "rgb_hex"
        ]
      }
    },
    {
      "name": "stop_lights",
      "description": "Turn off the lighting system."
    }
  ]
} 
EOF

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d @<(echo '
  {
    "system_instruction": {
      "parts": {
        "text": "You are a helpful lighting system bot. You can turn lights on and off, and you can set the color. Do not perform any other tasks."
      }
    },
    "tools": ['$(cat tools.json)'],

    "tool_config": {
      "function_calling_config": {"mode": "auto"}
    },

    "contents": {
      "role": "user",
      "parts": {
        "text": "Turn on the lights please."
      }
    }
  }
') 2>/dev/null |sed -n '/"content"/,/"finishReason"/p'

Java

Client client = new Client();

FunctionDeclaration addFunction =
        FunctionDeclaration.builder()
                .name("addNumbers")
                .parameters(
                        Schema.builder()
                                .type("object")
                                .properties(Map.of(
                                        "firstParam", Schema.builder().type("number").description("First number").build(),
                                        "secondParam", Schema.builder().type("number").description("Second number").build()))
                                .required(Arrays.asList("firstParam", "secondParam"))
                                .build())
                .build();

FunctionDeclaration subtractFunction =
        FunctionDeclaration.builder()
                .name("subtractNumbers")
                .parameters(
                        Schema.builder()
                                .type("object")
                                .properties(Map.of(
                                        "firstParam", Schema.builder().type("number").description("First number").build(),
                                        "secondParam", Schema.builder().type("number").description("Second number").build()))
                                .required(Arrays.asList("firstParam", "secondParam"))
                                .build())
                .build();

FunctionDeclaration multiplyFunction =
        FunctionDeclaration.builder()
                .name("multiplyNumbers")
                .parameters(
                        Schema.builder()
                                .type("object")
                                .properties(Map.of(
                                        "firstParam", Schema.builder().type("number").description("First number").build(),
                                        "secondParam", Schema.builder().type("number").description("Second number").build()))
                                .required(Arrays.asList("firstParam", "secondParam"))
                                .build())
                .build();

FunctionDeclaration divideFunction =
        FunctionDeclaration.builder()
                .name("divideNumbers")
                .parameters(
                        Schema.builder()
                                .type("object")
                                .properties(Map.of(
                                        "firstParam", Schema.builder().type("number").description("First number").build(),
                                        "secondParam", Schema.builder().type("number").description("Second number").build()))
                                .required(Arrays.asList("firstParam", "secondParam"))
                                .build())
                .build();

GenerateContentConfig config = GenerateContentConfig.builder()
        .toolConfig(ToolConfig.builder().functionCallingConfig(
                FunctionCallingConfig.builder().mode("ANY").build()
        ).build())
        .tools(
                Collections.singletonList(
                        Tool.builder().functionDeclarations(
                                Arrays.asList(
                                        addFunction,
                                        subtractFunction,
                                        divideFunction,
                                        multiplyFunction
                                )
                        ).build()

                )
        )
        .build();

GenerateContentResponse response =
        client.models.generateContent(
                "gemini-3.7-flash",
                "I have 57 cats, each owns 44 mittens, how many mittens is that in total?",
                config);


if (response.functionCalls() == null || response.functionCalls().isEmpty()) {
    System.err.println("No function call received");
    return null;
}

var functionCall = response.functionCalls().getFirst();
String functionName = functionCall.name().get();
var arguments = functionCall.args();

Map<String, BiFunction<Double, Double, Double>> functionMapping = new HashMap<>();
functionMapping.put("addNumbers", (a, b) -> a + b);
functionMapping.put("subtractNumbers", (a, b) -> a - b);
functionMapping.put("multiplyNumbers", (a, b) -> a * b);
functionMapping.put("divideNumbers", (a, b) -> b != 0 ? a / b : Double.NaN);

BiFunction<Double, Double, Double> function = functionMapping.get(functionName);

Number firstParam = (Number) arguments.get().get("firstParam");
Number secondParam = (Number) arguments.get().get("secondParam");
Double result = function.apply(firstParam.doubleValue(), secondParam.doubleValue());

System.out.println(result);

Configuración de generación

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.7-flash",
    contents="Tell me a story about a magic backpack.",
    config=types.GenerateContentConfig(
        candidate_count=1,
        stop_sequences=["x"],
        max_output_tokens=20,
        temperature=1.0,
    ),
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const response = await ai.models.generateContent({
  model: "gemini-3.7-flash",
  contents: "Tell me a story about a magic backpack.",
  config: {
    candidateCount: 1,
    stopSequences: ["x"],
    maxOutputTokens: 20,
    temperature: 1.0,
  },
});

console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

// Create local variables for parameters.
candidateCount := int32(1)
maxOutputTokens := int32(20)
temperature := float32(1.0)

response, err := client.Models.GenerateContent(
	ctx,
	"gemini-3.7-flash",
	genai.Text("Tell me a story about a magic backpack."),
	&genai.GenerateContentConfig{
		CandidateCount:  candidateCount,
		StopSequences:   []string{"x"},
		MaxOutputTokens: maxOutputTokens,
		Temperature:     &temperature,
	},
)
if err != nil {
	log.Fatal(err)
}

printResponse(response)

Almeja

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
        "contents": [{
            "parts":[
                {"text": "Explain how AI works"}
            ]
        }],
        "generationConfig": {
            "stopSequences": [
                "Title"
            ],
            "temperature": 1.0,
            "maxOutputTokens": 800,
            "topP": 0.8,
            "topK": 10
        }
    }'  2> /dev/null | grep "text"

Java

Client client = new Client();

GenerateContentConfig config =
        GenerateContentConfig.builder()
                .candidateCount(1)
                .stopSequences(List.of("x"))
                .maxOutputTokens(20)
                .temperature(1.0F)
                .build();

GenerateContentResponse response =
        client.models.generateContent(
                "gemini-3.7-flash",
                "Tell me a story about a magic backpack.",
                config);

System.out.println(response.text());

Configuración de seguridad

Python

from google import genai
from google.genai import types

client = genai.Client()
unsafe_prompt = (
    "I support Martians Soccer Club and I think Jupiterians Football Club sucks! "
    "Write a ironic phrase about them including expletives."
)
response = client.models.generate_content(
    model="gemini-3.7-flash",
    contents=unsafe_prompt,
    config=types.GenerateContentConfig(
        safety_settings=[
            types.SafetySetting(
                category="HARM_CATEGORY_HATE_SPEECH",
                threshold="BLOCK_MEDIUM_AND_ABOVE",
            ),
            types.SafetySetting(
                category="HARM_CATEGORY_HARASSMENT", threshold="BLOCK_ONLY_HIGH"
            ),
        ]
    ),
)
try:
    print(response.text)
except Exception:
    print("No information generated by the model.")

print(response.candidates[0].safety_ratings)

Node.js

  // Make sure to include the following import:
  // import {GoogleGenAI} from '@google/genai';
  const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
  const unsafePrompt =
    "I support Martians Soccer Club and I think Jupiterians Football Club sucks! Write a ironic phrase about them including expletives.";

  const response = await ai.models.generateContent({
    model: "gemini-3.7-flash",
    contents: unsafePrompt,
    config: {
      safetySettings: [
        {
          category: "HARM_CATEGORY_HATE_SPEECH",
          threshold: "BLOCK_MEDIUM_AND_ABOVE",
        },
        {
          category: "HARM_CATEGORY_HARASSMENT",
          threshold: "BLOCK_ONLY_HIGH",
        },
      ],
    },
  });

  try {
    console.log("Generated text:", response.text);
  } catch (error) {
    console.log("No information generated by the model.");
  }
  console.log("Safety ratings:", response.candidates[0].safetyRatings);
  return response;
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

unsafePrompt := "I support Martians Soccer Club and I think Jupiterians Football Club sucks! " +
	"Write a ironic phrase about them including expletives."

config := &genai.GenerateContentConfig{
	SafetySettings: []*genai.SafetySetting{
		{
			Category:  "HARM_CATEGORY_HATE_SPEECH",
			Threshold: "BLOCK_MEDIUM_AND_ABOVE",
		},
		{
			Category:  "HARM_CATEGORY_HARASSMENT",
			Threshold: "BLOCK_ONLY_HIGH",
		},
	},
}
contents := []*genai.Content{
	genai.NewContentFromText(unsafePrompt, genai.RoleUser),
}
response, err := client.Models.GenerateContent(ctx, "gemini-3.7-flash", contents, config)
if err != nil {
	log.Fatal(err)
}

// Print the generated text.
text := response.Text()
fmt.Println("Generated text:", text)

// Print the and safety ratings from the first candidate.
if len(response.Candidates) > 0 {
	fmt.Println("Finish reason:", response.Candidates[0].FinishReason)
	safetyRatings, err := json.MarshalIndent(response.Candidates[0].SafetyRatings, "", "  ")
	if err != nil {
		return err
	}
	fmt.Println("Safety ratings:", string(safetyRatings))
} else {
	fmt.Println("No candidate returned.")
}

Almeja

echo '{
    "safetySettings": [
        {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_ONLY_HIGH"},
        {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}
    ],
    "contents": [{
        "parts":[{
            "text": "'I support Martians Soccer Club and I think Jupiterians Football Club sucks! Write a ironic phrase about them.'"}]}]}' > request.json

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d @request.json 2> /dev/null

Java

Client client = new Client();

String unsafePrompt = """
         I support Martians Soccer Club and I think Jupiterians Football Club sucks!
         Write a ironic phrase about them including expletives.
        """;

GenerateContentConfig config =
        GenerateContentConfig.builder()
                .safetySettings(Arrays.asList(
                        SafetySetting.builder()
                                .category("HARM_CATEGORY_HATE_SPEECH")
                                .threshold("BLOCK_MEDIUM_AND_ABOVE")
                                .build(),
                        SafetySetting.builder()
                                .category("HARM_CATEGORY_HARASSMENT")
                                .threshold("BLOCK_ONLY_HIGH")
                                .build()
                )).build();

GenerateContentResponse response =
        client.models.generateContent(
                "gemini-3.7-flash",
                unsafePrompt,
                config);

try {
    System.out.println(response.text());
} catch (Exception e) {
    System.out.println("No information generated by the model");
}

System.out.println(response.candidates().get().getFirst().safetyRatings());

Instrucción del sistema

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.7-flash",
    contents="Good morning! How are you?",
    config=types.GenerateContentConfig(
        system_instruction="You are a cat. Your name is Neko."
    ),
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const response = await ai.models.generateContent({
  model: "gemini-3.7-flash",
  contents: "Good morning! How are you?",
  config: {
    systemInstruction: "You are a cat. Your name is Neko.",
  },
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

// Construct the user message contents.
contents := []*genai.Content{
	genai.NewContentFromText("Good morning! How are you?", genai.RoleUser),
}

// Set the system instruction as a *genai.Content.
config := &genai.GenerateContentConfig{
	SystemInstruction: genai.NewContentFromText("You are a cat. Your name is Neko.", genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.7-flash", contents, config)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Almeja

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "system_instruction": {
    "parts":
      { "text": "You are a cat. Your name is Neko."}},
    "contents": {
      "parts": {
        "text": "Hello there"}}}'

Java

Client client = new Client();

Part textPart = Part.builder().text("You are a cat. Your name is Neko.").build();

Content content = Content.builder().role("system").parts(ImmutableList.of(textPart)).build();

GenerateContentConfig config = GenerateContentConfig.builder()
        .systemInstruction(content)
        .build();

GenerateContentResponse response =
        client.models.generateContent(
                "gemini-3.7-flash",
                "Good morning! How are you?",
                config);

System.out.println(response.text());

Cuerpo de la respuesta

Si se ejecuta de forma correcta, el cuerpo de la respuesta contiene una instancia de GenerateContentResponse.

Método: models.streamGenerateContent

Genera una respuesta transmitida del modelo a partir de una entrada GenerateContentRequest.

Extremo

post https://generativelanguage.googleapis.com/v1beta/{model=models/*}:streamGenerateContent

Parámetros de ruta

model string

Obligatorio. Nombre del Model que se usará para generar la finalización.

Formato: models/{model}. Toma la forma models/{model}.

Cuerpo de la solicitud

El cuerpo de la solicitud contiene datos con la siguiente estructura:

Campos
contents[] object (Content)

Obligatorio. El contenido de la conversación actual con el modelo.

Para consultas de un solo turno, esta es una instancia única. Para las consultas de varios turnos, como chat, este es un campo repetido que contiene el historial de conversaciones y la solicitud más reciente.

tools[] object (Tool)

Opcional. Es una lista de Tools que el Model puede usar para generar la siguiente respuesta.

Una Tool es un fragmento de código que permite que el sistema interactúe con sistemas externos para realizar una acción, o un conjunto de acciones, fuera del conocimiento y del alcance del Model. Los Tool admitidos son Function y codeExecution. Consulta las guías de Llamada a función y Ejecución de código para obtener más información.

toolConfig object (ToolConfig)

Opcional. Es la configuración de la herramienta para cualquier Tool especificado en la solicitud. Consulta la guía de llamadas a funciones para ver un ejemplo de uso.

safetySettings[] object (SafetySetting)

Opcional. Es una lista de instancias SafetySetting únicas para bloquear contenido no seguro.

Esto se aplicará en GenerateContentRequest.contents y GenerateContentResponse.candidates. No debe haber más de un parámetro de configuración para cada tipo de SafetyCategory. La API bloqueará todo el contenido y las respuestas que no cumplan con los umbrales establecidos por estos parámetros de configuración. Esta lista anula la configuración predeterminada de cada SafetyCategory especificado en safetySettings. Si no hay un SafetySetting para un SafetyCategory determinado proporcionado en la lista, la API usará el parámetro de configuración de seguridad predeterminado para esa categoría. Se admiten las categorías de daño HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_CIVIC_INTEGRITY y HARM_CATEGORY_JAILBREAK. Consulta la guía para obtener información detallada sobre los parámetros de configuración de seguridad disponibles. También consulta la Guía de seguridad para obtener información sobre cómo incorporar consideraciones de seguridad en tus aplicaciones de IA.

systemInstruction object (Content)

Opcional. El desarrollador establece instrucciones del sistema. Actualmente, solo texto.

generationConfig object (GenerationConfig)

Opcional. Son las opciones de configuración para la generación y los resultados del modelo.

cachedContent string

Opcional. Nombre del contenido almacenado en caché que se usará como contexto para entregar la predicción. Formato: cachedContents/{cachedContent}

serviceTier enum (ServiceTier)

Opcional. Es el nivel de servicio de la solicitud.

store boolean

Opcional. Configura el comportamiento de registro para una solicitud determinada. Si se establece, tiene prioridad sobre la configuración de registro a nivel del proyecto.

Ejemplo de solicitud

Texto

Python

from google import genai

client = genai.Client()
response = client.models.generate_content_stream(
    model="gemini-3.7-flash", contents="Write a story about a magic backpack."
)
for chunk in response:
    print(chunk.text)
    print("_" * 80)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const response = await ai.models.generateContentStream({
  model: "gemini-3.7-flash",
  contents: "Write a story about a magic backpack.",
});
let text = "";
for await (const chunk of response) {
  console.log(chunk.text);
  text += chunk.text;
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
contents := []*genai.Content{
	genai.NewContentFromText("Write a story about a magic backpack.", genai.RoleUser),
}
for response, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.7-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(response.Candidates[0].Content.Parts[0].Text)
}

Almeja

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=${GEMINI_API_KEY}" \
        -H 'Content-Type: application/json' \
        --no-buffer \
        -d '{ "contents":[{"parts":[{"text": "Write a story about a magic backpack."}]}]}'

Java

Client client = new Client();

ResponseStream<GenerateContentResponse> responseStream =
        client.models.generateContentStream(
                "gemini-3.7-flash",
                "Write a story about a magic backpack.",
                null);

StringBuilder response = new StringBuilder();
for (GenerateContentResponse res : responseStream) {
    System.out.print(res.text());
    response.append(res.text());
}

responseStream.close();

Imagen

Python

from google import genai
import PIL.Image

client = genai.Client()
organ = PIL.Image.open(media / "organ.jpg")
response = client.models.generate_content_stream(
    model="gemini-3.7-flash", contents=["Tell me about this instrument", organ]
)
for chunk in response:
    print(chunk.text)
    print("_" * 80)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

const organ = await ai.files.upload({
  file: path.join(media, "organ.jpg"),
});

const response = await ai.models.generateContentStream({
  model: "gemini-3.7-flash",
  contents: [
    createUserContent([
      "Tell me about this instrument", 
      createPartFromUri(organ.uri, organ.mimeType)
    ]),
  ],
});
let text = "";
for await (const chunk of response) {
  console.log(chunk.text);
  text += chunk.text;
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
file, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "organ.jpg"), 
	&genai.UploadFileConfig{
		MIMEType : "image/jpeg",
	},
)
if err != nil {
	log.Fatal(err)
}
parts := []*genai.Part{
	genai.NewPartFromText("Tell me about this instrument"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}
contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}
for response, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.7-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(response.Candidates[0].Content.Parts[0].Text)
}

Almeja

cat > "$TEMP_JSON" << EOF
{
  "contents": [{
    "parts":[
      {"text": "Tell me about this instrument"},
      {
        "inline_data": {
          "mime_type":"image/jpeg",
          "data": "$(cat "$TEMP_B64")"
        }
      }
    ]
  }]
}
EOF

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d "@$TEMP_JSON" 2> /dev/null

Java

Client client = new Client();

String path = media_path + "organ.jpg";
byte[] imageData = Files.readAllBytes(Paths.get(path));

Content content =
        Content.fromParts(
                Part.fromText("Tell me about this instrument."),
                Part.fromBytes(imageData, "image/jpeg"));


ResponseStream<GenerateContentResponse> responseStream =
        client.models.generateContentStream(
                "gemini-3.7-flash",
                content,
                null);

StringBuilder response = new StringBuilder();
for (GenerateContentResponse res : responseStream) {
    System.out.print(res.text());
    response.append(res.text());
}

responseStream.close();

Audio

Python

from google import genai

client = genai.Client()
sample_audio = client.files.upload(file=media / "sample.mp3")
response = client.models.generate_content_stream(
    model="gemini-3.7-flash",
    contents=["Give me a summary of this audio file.", sample_audio],
)
for chunk in response:
    print(chunk.text)
    print("_" * 80)

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "sample.mp3"), 
	&genai.UploadFileConfig{
		MIMEType : "audio/mpeg",
	},
)
if err != nil {
	log.Fatal(err)
}

parts := []*genai.Part{
	genai.NewPartFromText("Give me a summary of this audio file."),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

for result, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.7-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Almeja

# Use File API to upload audio data to API request.
MIME_TYPE=$(file -b --mime-type "${AUDIO_PATH}")
NUM_BYTES=$(wc -c < "${AUDIO_PATH}")
DISPLAY_NAME=AUDIO

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${AUDIO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Please describe this file."},
          {"file_data":{"mime_type": "audio/mpeg", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

Video

Python

from google import genai
import time

client = genai.Client()
# Video clip (CC BY 3.0) from https://peach.blender.org/download/
myfile = client.files.upload(file=media / "Big_Buck_Bunny.mp4")
print(f"{myfile=}")

# Poll until the video file is completely processed (state becomes ACTIVE).
while not myfile.state or myfile.state.name != "ACTIVE":
    print("Processing video...")
    print("File state:", myfile.state)
    time.sleep(5)
    myfile = client.files.get(name=myfile.name)

response = client.models.generate_content_stream(
    model="gemini-3.7-flash", contents=[myfile, "Describe this video clip"]
)
for chunk in response:
    print(chunk.text)
    print("_" * 80)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

let video = await ai.files.upload({
  file: path.join(media, 'Big_Buck_Bunny.mp4'),
});

// Poll until the video file is completely processed (state becomes ACTIVE).
while (!video.state || video.state.toString() !== 'ACTIVE') {
  console.log('Processing video...');
  console.log('File state: ', video.state);
  await sleep(5000);
  video = await ai.files.get({name: video.name});
}

const response = await ai.models.generateContentStream({
  model: "gemini-3.7-flash",
  contents: [
    createUserContent([
      "Describe this video clip",
      createPartFromUri(video.uri, video.mimeType),
    ]),
  ],
});
let text = "";
for await (const chunk of response) {
  console.log(chunk.text);
  text += chunk.text;
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "Big_Buck_Bunny.mp4"), 
	&genai.UploadFileConfig{
		MIMEType : "video/mp4",
	},
)
if err != nil {
	log.Fatal(err)
}

// Poll until the video file is completely processed (state becomes ACTIVE).
for file.State == genai.FileStateUnspecified || file.State != genai.FileStateActive {
	fmt.Println("Processing video...")
	fmt.Println("File state:", file.State)
	time.Sleep(5 * time.Second)

	file, err = client.Files.Get(ctx, file.Name, nil)
	if err != nil {
		log.Fatal(err)
	}
}

parts := []*genai.Part{
	genai.NewPartFromText("Describe this video clip"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

for result, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.7-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Almeja

# Use File API to upload audio data to API request.
MIME_TYPE=$(file -b --mime-type "${VIDEO_PATH}")
NUM_BYTES=$(wc -c < "${VIDEO_PATH}")
DISPLAY_NAME=VIDEO_PATH

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${VIDEO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

state=$(jq ".file.state" file_info.json)
echo state=$state

while [[ "($state)" = *"PROCESSING"* ]];
do
  echo "Processing video..."
  sleep 5
  # Get the file of interest to check state
  curl https://generativelanguage.googleapis.com/v1beta/files/$name > file_info.json
  state=$(jq ".file.state" file_info.json)
done

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Please describe this file."},
          {"file_data":{"mime_type": "video/mp4", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

PDF

Python

from google import genai

client = genai.Client()
sample_pdf = client.files.upload(file=media / "test.pdf")
response = client.models.generate_content_stream(
    model="gemini-3.7-flash",
    contents=["Give me a summary of this document:", sample_pdf],
)

for chunk in response:
    print(chunk.text)
    print("_" * 80)

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx, 
	filepath.Join(getMedia(), "test.pdf"), 
	&genai.UploadFileConfig{
		MIMEType : "application/pdf",
	},
)
if err != nil {
	log.Fatal(err)
}

parts := []*genai.Part{
	genai.NewPartFromText("Give me a summary of this document:"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

for result, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.7-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Almeja

MIME_TYPE=$(file -b --mime-type "${PDF_PATH}")
NUM_BYTES=$(wc -c < "${PDF_PATH}")
DISPLAY_NAME=TEXT


echo $MIME_TYPE
tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${PDF_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Can you add a few more lines to this poem?"},
          {"file_data":{"mime_type": "application/pdf", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

Chat

Python

from google import genai
from google.genai import types

client = genai.Client()
chat = client.chats.create(
    model="gemini-3.7-flash",
    history=[
        types.Content(role="user", parts=[types.Part(text="Hello")]),
        types.Content(
            role="model",
            parts=[
                types.Part(
                    text="Great to meet you. What would you like to know?"
                )
            ],
        ),
    ],
)
response = chat.send_message_stream(message="I have 2 dogs in my house.")
for chunk in response:
    print(chunk.text)
    print("_" * 80)
response = chat.send_message_stream(message="How many paws are in my house?")
for chunk in response:
    print(chunk.text)
    print("_" * 80)

print(chat.get_history())

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const chat = ai.chats.create({
  model: "gemini-3.7-flash",
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});

console.log("Streaming response for first message:");
const stream1 = await chat.sendMessageStream({
  message: "I have 2 dogs in my house.",
});
for await (const chunk of stream1) {
  console.log(chunk.text);
  console.log("_".repeat(80));
}

console.log("Streaming response for second message:");
const stream2 = await chat.sendMessageStream({
  message: "How many paws are in my house?",
});
for await (const chunk of stream2) {
  console.log(chunk.text);
  console.log("_".repeat(80));
}

console.log(chat.getHistory());

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

history := []*genai.Content{
	genai.NewContentFromText("Hello", genai.RoleUser),
	genai.NewContentFromText("Great to meet you. What would you like to know?", genai.RoleModel),
}
chat, err := client.Chats.Create(ctx, "gemini-3.7-flash", nil, history)
if err != nil {
	log.Fatal(err)
}

for chunk, err := range chat.SendMessageStream(ctx, genai.Part{Text: "I have 2 dogs in my house."}) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(chunk.Text())
	fmt.Println(strings.Repeat("_", 64))
}

for chunk, err := range chat.SendMessageStream(ctx, genai.Part{Text: "How many paws are in my house?"}) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(chunk.Text())
	fmt.Println(strings.Repeat("_", 64))
}

fmt.Println(chat.History(false))

Almeja

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Hello"}]},
        {"role": "model",
         "parts":[{
           "text": "Great to meet you. What would you like to know?"}]},
        {"role":"user",
         "parts":[{
           "text": "I have two dogs in my house. How many paws are in my house?"}]},
      ]
    }' 2> /dev/null | grep "text"

Cuerpo de la respuesta

Si se ejecuta correctamente, el cuerpo de la respuesta contiene un flujo de instancias de GenerateContentResponse.

GenerateContentResponse

Es la respuesta del modelo que admite varias respuestas candidatas.

Las clasificaciones de seguridad y el filtrado de contenido se informan para la instrucción en GenerateContentResponse.prompt_feedback y para cada candidato en finishReason y en safetyRatings. La API: - Muestra todos los candidatos solicitados o ninguno de ellos. - No muestra ningún candidato solo si hubo algún problema con la instrucción (consulta promptFeedback). - Informa comentarios sobre cada candidato en finishReason y safetyRatings.

Campos
candidates[] object (Candidate)

Son las respuestas candidatas del modelo.

promptFeedback object (PromptFeedback)

Devuelve los comentarios de la instrucción relacionados con los filtros de contenido.

usageMetadata object (UsageMetadata)

Solo salida. Son los metadatos sobre el uso de tokens de las solicitudes de generación.

modelVersion string

Solo salida. Es la versión del modelo que se usó para generar la respuesta.

responseId string

Solo salida. responseId se usa para identificar cada respuesta.

modelStatus object (ModelStatus)

Solo salida. Es el estado actual del modelo.

Representación JSON
{
  "candidates": [
    {
      object (Candidate)
    }
  ],
  "promptFeedback": {
    object (PromptFeedback)
  },
  "usageMetadata": {
    object (UsageMetadata)
  },
  "modelVersion": string,
  "responseId": string,
  "modelStatus": {
    object (ModelStatus)
  }
}

PromptFeedback

Es un conjunto de los metadatos de comentarios que especificó la instrucción en GenerateContentRequest.content.

Campos
blockReason enum (BlockReason)

Opcional. Si se configura, se bloqueó la instrucción y no se devolvieron candidatos. Reformula la instrucción.

safetyRatings[] object (SafetyRating)

Son las calificaciones de seguridad de la instrucción. Hay, como máximo, una calificación por categoría.

Representación JSON
{
  "blockReason": enum (BlockReason),
  "safetyRatings": [
    {
      object (SafetyRating)
    }
  ]
}

BlockReason

Especifica el motivo por el que se bloqueó la instrucción.

Enums
BLOCK_REASON_UNSPECIFIED Valor predeterminado Este valor no se usa.
SAFETY Se bloqueó la instrucción por motivos de seguridad. Inspecciona safetyRatings para comprender qué categoría de seguridad lo bloqueó.
OTHER Se bloqueó la instrucción por motivos desconocidos.
BLOCKLIST Se bloqueó la instrucción debido a los términos incluidos en la lista de términos bloqueados.
PROHIBITED_CONTENT Se bloqueó la instrucción debido a contenido prohibido.
IMAGE_SAFETY Se bloquearon los candidatos debido a contenido no seguro para la generación de imágenes.

UsageMetadata

Son los metadatos sobre el uso de tokens de la solicitud de generación.

Campos
promptTokenCount integer

Cantidad de tokens en la instrucción. Cuando se establece cachedContent, este sigue siendo el tamaño total efectivo de la instrucción, lo que significa que incluye la cantidad de tokens en el contenido almacenado en caché.

cachedContentTokenCount integer

Cantidad de tokens en la parte almacenada en caché de la instrucción (el contenido almacenado en caché)

candidatesTokenCount integer

Es la cantidad total de tokens en todos los candidatos de respuesta generados.

toolUsePromptTokenCount integer

Solo salida. Cantidad de tokens presentes en las instrucciones de uso de herramientas.

thoughtsTokenCount integer

Solo salida. Es la cantidad de tokens de pensamientos para los modelos de pensamiento.

totalTokenCount integer

Es el recuento total de tokens para la solicitud de generación (instrucción + pensamientos + candidatos de respuesta).

promptTokensDetails[] object (ModalityTokenCount)

Solo salida. Es la lista de modalidades que se procesaron en la entrada de la solicitud.

cacheTokensDetails[] object (ModalityTokenCount)

Solo salida. Es la lista de modalidades del contenido almacenado en caché en la entrada de la solicitud.

candidatesTokensDetails[] object (ModalityTokenCount)

Solo salida. Es la lista de modalidades que se devolvieron en la respuesta.

toolUsePromptTokensDetails[] object (ModalityTokenCount)

Solo salida. Lista de las modalidades que se procesaron para las entradas de la solicitud de uso de herramientas.

serviceTier enum (ServiceTier)

Solo salida. Es el nivel de servicio de la solicitud.

Representación JSON
{
  "promptTokenCount": integer,
  "cachedContentTokenCount": integer,
  "candidatesTokenCount": integer,
  "toolUsePromptTokenCount": integer,
  "thoughtsTokenCount": integer,
  "totalTokenCount": integer,
  "promptTokensDetails": [
    {
      object (ModalityTokenCount)
    }
  ],
  "cacheTokensDetails": [
    {
      object (ModalityTokenCount)
    }
  ],
  "candidatesTokensDetails": [
    {
      object (ModalityTokenCount)
    }
  ],
  "toolUsePromptTokensDetails": [
    {
      object (ModalityTokenCount)
    }
  ],
  "serviceTier": enum (ServiceTier)
}

ModelStatus

Es el estado del modelo subyacente. Se usa para indicar la etapa del modelo subyacente y la hora de retiro, si corresponde.

Campos
modelStage enum (ModelStage)

Es la etapa del modelo subyacente.

retirementTime string (Timestamp format)

Es la fecha y hora en la que se retirará el modelo.

Usa el formato RFC 3339, en el que el resultado generado siempre usará la normalización Z y los dígitos fraccionarios 0, 3, 6 o 9. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" o "2014-10-02T15:01:23+05:30".

message string

Es un mensaje que explica el estado del modelo.

Representación JSON
{
  "modelStage": enum (ModelStage),
  "retirementTime": string,
  "message": string
}

ModelStage

Define la etapa del modelo subyacente.

Enums
MODEL_STAGE_UNSPECIFIED Etapa del modelo sin especificar.
UNSTABLE_EXPERIMENTAL

El modelo subyacente está sujeto a muchos ajustes.

EXPERIMENTAL Los modelos en esta etapa son solo para fines experimentales.
PREVIEW Los modelos en esta etapa son más avanzados que los modelos experimentales.
STABLE Los modelos en esta etapa se consideran estables y listos para su uso en producción.
LEGACY Si el modelo se encuentra en esta etapa, significa que está en camino a la baja en un futuro cercano. Solo los clientes existentes pueden usar este modelo.
DEPRECATED

Los modelos en esta etapa dejaron de estar disponibles. No se pueden usar estos modelos.

RETIRED Los modelos en esta etapa se retiran. No se pueden usar estos modelos.

Candidato

Es un candidato de respuesta generado a partir del modelo.

Campos
content object (Content)

Solo salida. Es el contenido generado que devuelve el modelo.

finishReason enum (FinishReason)

Opcional. Solo salida. El motivo por el que el modelo dejó de generar tokens.

Si está vacío, el modelo no dejó de generar tokens.

safetyRatings[] object (SafetyRating)

Es una lista de calificaciones sobre la seguridad de un candidato de respuesta.

Hay, como máximo, una clasificación por categoría.

citationMetadata object (CitationMetadata)

Solo salida. Es la información de la cita del candidato generado por el modelo.

Es posible que este campo se complete con información de recitación para cualquier texto incluido en content. Son pasajes que se "recitan" a partir de material protegido por derechos de autor en los datos de entrenamiento del LLM fundamental.

tokenCount integer

Solo salida. Es el recuento de tokens para este candidato.

groundingAttributions[] object (GroundingAttribution)

Solo salida. Es la información de atribución de las fuentes que contribuyeron a una respuesta fundamentada.

Este campo se propaga para las llamadas a GenerateAnswer.

groundingMetadata object (GroundingMetadata)

Solo salida. Son los metadatos de fundamentación del candidato.

Este campo se propaga para las llamadas a GenerateContent.

avgLogprobs number

Solo salida. Es la puntuación promedio de probabilidad logarítmica del candidato.

logprobsResult object (LogprobsResult)

Solo salida. Puntuaciones de verosimilitud del registro para los tokens de respuesta y los tokens principales

urlContextMetadata object (UrlContextMetadata)

Solo salida. Son los metadatos relacionados con la herramienta de recuperación del contexto de URL.

index integer

Solo salida. Índice del candidato en la lista de candidatos de respuesta.

finishMessage string

Opcional. Solo salida. Detalla el motivo por el que el modelo dejó de generar tokens. Este campo solo se propaga cuando se establece finishReason.

Representación JSON
{
  "content": {
    object (Content)
  },
  "finishReason": enum (FinishReason),
  "safetyRatings": [
    {
      object (SafetyRating)
    }
  ],
  "citationMetadata": {
    object (CitationMetadata)
  },
  "tokenCount": integer,
  "groundingAttributions": [
    {
      object (GroundingAttribution)
    }
  ],
  "groundingMetadata": {
    object (GroundingMetadata)
  },
  "avgLogprobs": number,
  "logprobsResult": {
    object (LogprobsResult)
  },
  "urlContextMetadata": {
    object (UrlContextMetadata)
  },
  "index": integer,
  "finishMessage": string
}

FinishReason

Define el motivo por el que el modelo dejó de generar tokens.

Enums
FINISH_REASON_UNSPECIFIED Valor predeterminado Este valor no se usa.
STOP Punto de detención natural del modelo o secuencia de detención proporcionada.
MAX_TOKENS Se alcanzó la cantidad máxima de tokens especificada en la solicitud.
SAFETY El contenido del candidato de respuesta se marcó por motivos de seguridad.
RECITATION El contenido de la respuesta candidata se marcó por motivos de recitación.
LANGUAGE Se marcó el contenido de la respuesta candidata por usar un idioma no admitido.
OTHER Motivo desconocido.
BLOCKLIST Se detuvo la generación de tokens porque el contenido incluye términos prohibidos.
PROHIBITED_CONTENT Se detuvo la generación de tokens porque es posible que contenga contenido prohibido.
SPII La generación de tokens se detuvo porque es posible que el contenido contenga información de identificación personal sensible (IIPS).
MALFORMED_FUNCTION_CALL La llamada a la función que generó el modelo no es válida.
IMAGE_SAFETY Se detuvo la generación de tokens porque las imágenes generadas contienen incumplimientos de seguridad.
IMAGE_PROHIBITED_CONTENT Se detuvo la generación de imágenes porque las imágenes generadas tienen otro contenido prohibido.
IMAGE_OTHER Se detuvo la generación de imágenes debido a otro problema diverso.
NO_IMAGE Se esperaba que el modelo generara una imagen, pero no se generó ninguna.
IMAGE_RECITATION Se detuvo la generación de imágenes debido a la recitación.
UNEXPECTED_TOOL_CALL El modelo generó una llamada a una herramienta, pero no se habilitó ninguna herramienta en la solicitud.
TOO_MANY_TOOL_CALLS El modelo llamó a demasiadas herramientas de forma consecutiva, por lo que el sistema salió de la ejecución.
MISSING_THOUGHT_SIGNATURE Falta al menos una firma de pensamiento en la solicitud.
MALFORMED_RESPONSE Se completó debido a una respuesta con formato incorrecto.
ESCALATION La solicitud se filtró según una regla de derivación.

GroundingAttribution

Es la atribución de una fuente que contribuyó a una respuesta.

Campos
sourceId object (AttributionSourceId)

Solo salida. Es el identificador de la fuente que contribuye a esta atribución.

content object (Content)

Es el contenido de la fuente de fundamentación que compone esta atribución.

Representación JSON
{
  "sourceId": {
    object (AttributionSourceId)
  },
  "content": {
    object (Content)
  }
}

AttributionSourceId

Es el identificador de la fuente que contribuye a esta atribución.

Campos
source Union type
source puede ser una de las siguientes opciones:
groundingPassage object (GroundingPassageId)

Es el identificador de un pasaje intercalado.

semanticRetrieverChunk object (SemanticRetrieverChunk)

Es el identificador de un Chunk recuperado a través de Semantic Retriever.

Representación JSON
{

  // source
  "groundingPassage": {
    object (GroundingPassageId)
  },
  "semanticRetrieverChunk": {
    object (SemanticRetrieverChunk)
  }
  // Union type
}

GroundingPassageId

Es el identificador de una parte dentro de un GroundingPassage.

Campos
passageId string

Solo salida. ID del pasaje que coincide con el GroundingPassage.id del GenerateAnswerRequest.

partIndex integer

Solo salida. Índice de la parte dentro del GroundingPassage.content de GenerateAnswerRequest.

Representación JSON
{
  "passageId": string,
  "partIndex": integer
}

SemanticRetrieverChunk

Es el identificador de un Chunk recuperado a través de Semantic Retriever y especificado en GenerateAnswerRequest con SemanticRetrieverConfig.

Campos
source string

Solo salida. Nombre de la fuente que coincide con el SemanticRetrieverConfig.source de la solicitud. Ejemplo: corpora/123 o corpora/123/documents/abc

chunk string

Solo salida. Nombre del Chunk que contiene el texto atribuido. Ejemplo: corpora/123/documents/abc/chunks/xyz

Representación JSON
{
  "source": string,
  "chunk": string
}

GroundingMetadata

Son los metadatos que se muestran al cliente cuando se habilita la fundamentación.

Campos
groundingChunks[] object (GroundingChunk)

Lista de referencias de respaldo recuperadas de la fuente de fundamentación especificada. Cuando se transmite, solo contiene los fragmentos de fundamentación que no se incluyeron en los metadatos de fundamentación de las respuestas anteriores.

groundingSupports[] object (GroundingSupport)

Lista de compatibilidad con la fundamentación.

webSearchQueries[] string

Son las búsquedas web para la búsqueda web de seguimiento.

imageSearchQueries[] string

Son las consultas de búsqueda con imágenes que se usan para la fundamentación.

searchEntryPoint object (SearchEntryPoint)

Opcional. Entrada de la Búsqueda de Google para las búsquedas web de seguimiento.

retrievalMetadata object (RetrievalMetadata)

Son los metadatos relacionados con la recuperación en el flujo de fundamentación.

googleMapsWidgetContextToken string

Opcional. Es el nombre del recurso del token de contexto del widget de Google Maps que se puede usar con el widget de PlacesContextElement para renderizar datos contextuales. Solo se propaga en el caso de que se habilite la fundamentación con Google Maps.

Representación JSON
{
  "groundingChunks": [
    {
      object (GroundingChunk)
    }
  ],
  "groundingSupports": [
    {
      object (GroundingSupport)
    }
  ],
  "webSearchQueries": [
    string
  ],
  "imageSearchQueries": [
    string
  ],
  "searchEntryPoint": {
    object (SearchEntryPoint)
  },
  "retrievalMetadata": {
    object (RetrievalMetadata)
  },
  "googleMapsWidgetContextToken": string
}

SearchEntryPoint

Es el punto de entrada de la Búsqueda de Google.

Campos
renderedContent string

Opcional. Es un fragmento de contenido web que se puede incorporar en una página web o en un WebView de una app.

sdkBlob string (bytes format)

Opcional. Es un JSON codificado en Base64 que representa un array de tuplas <término de búsqueda, URL de búsqueda>.

String codificada en base64.

Representación JSON
{
  "renderedContent": string,
  "sdkBlob": string
}

GroundingChunk

Un GroundingChunk representa un segmento de evidencia de respaldo que fundamenta la respuesta del modelo. Puede ser un fragmento de la Web, un contexto recuperado de un archivo o información de Google Maps.

Campos
chunk_type Union type
Tipo de fragmento. chunk_type puede ser una de las siguientes opciones:
web object (Web)

Es un fragmento fundamentado de la Web.

image object (Image)

Opcional. Fragmento fundamentado de la búsqueda con imágenes.

retrievedContext object (RetrievedContext)

Opcional. Es un fragmento fundamentado del contexto recuperado por la herramienta de búsqueda de archivos.

maps object (Maps)

Opcional. Es el fragmento de fundamentación de Google Maps.

Representación JSON
{

  // chunk_type
  "web": {
    object (Web)
  },
  "image": {
    object (Image)
  },
  "retrievedContext": {
    object (RetrievedContext)
  },
  "maps": {
    object (Maps)
  }
  // Union type
}

Web

Fragmento de la Web.

Campos
uri string

Solo salida. Es la referencia de URI del fragmento.

title string

Solo salida. Es el título del fragmento.

Representación JSON
{
  "uri": string,
  "title": string
}

Imagen

Es un fragmento de la búsqueda con imágenes.

Campos
sourceUri string

Es el URI de la página web para la atribución.

imageUri string

Es la URL del recurso de imagen.

title string

Es el título de la página web de la que proviene la imagen.

domain string

Es el dominio raíz de la página web de la que proviene la imagen, p.ej., "example.com".

Representación JSON
{
  "sourceUri": string,
  "imageUri": string,
  "title": string,
  "domain": string
}

RetrievedContext

Fragmento del contexto recuperado por la herramienta de búsqueda de archivos.

Campos
customMetadata[] object (CustomMetadata)

Opcional. Son los metadatos proporcionados por el usuario sobre el contexto recuperado.

uri string

Opcional. Es la referencia URI del documento de recuperación semántica.

title string

Opcional. Es el título del documento.

text string

Opcional. Es el texto del fragmento.

fileSearchStore string

Opcional. Nombre del FileSearchStore que contiene el documento. Ejemplo: fileSearchStores/123

pageNumber integer

Opcional. Número de página del contexto recuperado, si corresponde.

mediaId string

Opcional. Es el nombre del recurso del blob de medios para los resultados de la búsqueda de archivos multimodal. Formato: fileSearchStores/{file_search_store_id}/media/{blobId}

Representación JSON
{
  "customMetadata": [
    {
      object (CustomMetadata)
    }
  ],
  "uri": string,
  "title": string,
  "text": string,
  "fileSearchStore": string,
  "pageNumber": integer,
  "mediaId": string
}

CustomMetadata

Son los metadatos proporcionados por el usuario sobre el GroundingFact.

Campos
key string

Es la clave de los metadatos.

value Union type
Es el valor de los metadatos. Puede ser una cadena, una lista de cadenas o un número. value puede ser una de las siguientes opciones:
stringValue string

Opcional. Es el valor de cadena de los metadatos.

stringListValue object (StringList)

Opcional. Es una lista de valores de cadena para los metadatos.

numericValue number

Opcional. Es el valor numérico de los metadatos. El rango esperado para este valor depende del key específico que se use.

Representación JSON
{
  "key": string,

  // value
  "stringValue": string,
  "stringListValue": {
    object (StringList)
  },
  "numericValue": number
  // Union type
}

StringList

Es una lista de valores de cadena.

Campos
values[] string

Son los valores de cadena de la lista.

Representación JSON
{
  "values": [
    string
  ]
}

Maps

Es un fragmento de fundamentación de Google Maps. Un fragmento de Maps corresponde a un solo lugar.

Campos
uri string

Es la referencia URI del lugar.

title string

Es el título del lugar.

text string

Es la descripción de texto de la respuesta del lugar.

placeId string

Es el ID del lugar, en formato places/{placeId}. Un usuario puede usar este ID para buscar ese lugar.

placeAnswerSources object (PlaceAnswerSources)

Son las fuentes que proporcionan respuestas sobre las características de un lugar determinado en Google Maps.

Representación JSON
{
  "uri": string,
  "title": string,
  "text": string,
  "placeId": string,
  "placeAnswerSources": {
    object (PlaceAnswerSources)
  }
}

PlaceAnswerSources

Es una colección de fuentes que proporcionan respuestas sobre las características de un lugar determinado en Google Maps. Cada mensaje de PlaceAnswerSources corresponde a un lugar específico en Google Maps. La herramienta de Google Maps usó estas fuentes para responder preguntas sobre las características del lugar (p. ej., "¿Bar Foo tiene Wi-Fi?" o "¿Foo Bar es accesible para sillas de ruedas?"). Por el momento, solo admitimos fragmentos de opiniones como fuentes.

Campos
reviewSnippets[] object (ReviewSnippet)

Son fragmentos de opiniones que se usan para generar respuestas sobre las características de un lugar determinado en Google Maps.

Representación JSON
{
  "reviewSnippets": [
    {
      object (ReviewSnippet)
    }
  ]
}

ReviewSnippet

Encapsula un fragmento de una opinión del usuario que responde una pregunta sobre las características de un lugar específico en Google Maps.

Campos
reviewId string

Es el ID del fragmento de opinión.

googleMapsUri string

Es un vínculo que corresponde a la opinión del usuario en Google Maps.

title string

Es el título de la opinión.

Representación JSON
{
  "reviewId": string,
  "googleMapsUri": string,
  "title": string
}

GroundingSupport

Compatibilidad con la fundamentación.

Campos
groundingChunkIndices[] integer

Opcional. Es una lista de índices (en "grounding_chunk" en response.candidate.grounding_metadata) que especifican las citas asociadas con la afirmación. Por ejemplo, [1,3,4] significa que grounding_chunk[1], grounding_chunk[3] y grounding_chunk[4] son el contenido recuperado que se atribuye a la afirmación. Si la respuesta se transmite, los groundingChunkIndices hacen referencia a los índices de todas las respuestas. Es responsabilidad del cliente acumular los fragmentos de fundamentación de todas las respuestas (manteniendo el mismo orden).

confidenceScores[] number

Opcional. Es la puntuación de confianza de las referencias de asistencia. El rango varía de 0 a 1. El 1 indica la mayor confianza. Esta lista debe tener el mismo tamaño que groundingChunkIndices.

renderedParts[] integer

Solo salida. Son los índices en el campo parts del contenido del candidato. Estos índices especifican qué partes renderizadas están asociadas con esta fuente de asistencia.

segment object (Segment)

Es el segmento del contenido al que pertenece esta asistencia.

Representación JSON
{
  "groundingChunkIndices": [
    integer
  ],
  "confidenceScores": [
    number
  ],
  "renderedParts": [
    integer
  ],
  "segment": {
    object (Segment)
  }
}

Segmentar

Es un segmento del contenido.

Campos
partIndex integer

Índice de un objeto Part dentro de su objeto Content principal.

startIndex integer

Índice de inicio en la parte determinada, medido en bytes. Es el desplazamiento desde el inicio de la parte, incluido, a partir de cero.

endIndex integer

Índice final en la parte determinada, medido en bytes. Es el desplazamiento desde el inicio de la parte, exclusivo, a partir de cero.

text string

Es el texto correspondiente al segmento de la respuesta.

Representación JSON
{
  "partIndex": integer,
  "startIndex": integer,
  "endIndex": integer,
  "text": string
}

RetrievalMetadata

Son los metadatos relacionados con la recuperación en el flujo de fundamentación.

Campos
googleSearchDynamicRetrievalScore number

Opcional. Es una puntuación que indica la probabilidad de que la información de la Búsqueda de Google pueda ayudar a responder la instrucción. La puntuación se encuentra en el rango [0, 1], donde 0 es la probabilidad más baja y 1 es la probabilidad más alta. Esta puntuación solo se completa cuando se habilitan la fundamentación de la Búsqueda de Google y la recuperación dinámica. Se comparará con el umbral para determinar si se debe activar la Búsqueda de Google.

Representación JSON
{
  "googleSearchDynamicRetrievalScore": number
}

LogprobsResult

Resultado de Logprobs

Campos
topCandidates[] object (TopCandidates)

La longitud es igual a la cantidad total de pasos de decodificación.

chosenCandidates[] object (Candidate)

La longitud es igual a la cantidad total de pasos de decodificación. Los candidatos elegidos pueden estar o no en topCandidates.

logProbabilitySum number

Es la suma de las probabilidades de registro de todos los tokens.

Representación JSON
{
  "topCandidates": [
    {
      object (TopCandidates)
    }
  ],
  "chosenCandidates": [
    {
      object (Candidate)
    }
  ],
  "logProbabilitySum": number
}

TopCandidates

Son los candidatos con las probabilidades de registro más altas en cada paso de decodificación.

Campos
candidates[] object (Candidate)

Se ordenan por probabilidad logarítmica en orden descendente.

Representación JSON
{
  "candidates": [
    {
      object (Candidate)
    }
  ]
}

Candidato

Es el candidato para el token y la puntuación de logprobs.

Campos
token string

Es el valor de cadena del token del candidato.

tokenId integer

Es el valor del ID del token del candidato.

logProbability number

Es la probabilidad de registro del candidato.

Representación JSON
{
  "token": string,
  "tokenId": integer,
  "logProbability": number
}

UrlContextMetadata

Son los metadatos relacionados con la herramienta de recuperación del contexto de URL.

Campos
urlMetadata[] object (UrlMetadata)

Es la lista del contexto de URL.

Representación JSON
{
  "urlMetadata": [
    {
      object (UrlMetadata)
    }
  ]
}

UrlMetadata

Es el contexto de la recuperación de una sola URL.

Campos
retrievedUrl string

Es la URL recuperada por la herramienta.

urlRetrievalStatus enum (UrlRetrievalStatus)

Es el estado de la recuperación de la URL.

Representación JSON
{
  "retrievedUrl": string,
  "urlRetrievalStatus": enum (UrlRetrievalStatus)
}

UrlRetrievalStatus

Es el estado de la recuperación de la URL.

Enums
URL_RETRIEVAL_STATUS_UNSPECIFIED Valor predeterminado Este valor no se usa.
URL_RETRIEVAL_STATUS_SUCCESS Se recuperó la URL correctamente.
URL_RETRIEVAL_STATUS_ERROR No se pudo recuperar la URL debido a un error.
URL_RETRIEVAL_STATUS_PAYWALL No se pudo recuperar la URL porque el contenido está detrás de un muro de pago.
URL_RETRIEVAL_STATUS_UNSAFE No se pudo recuperar la URL porque el contenido no es seguro.

CitationMetadata

Es una colección de atribuciones de fuentes para un fragmento de contenido.

Campos
citationSources[] object (CitationSource)

Son las citas de las fuentes de una respuesta específica.

Representación JSON
{
  "citationSources": [
    {
      object (CitationSource)
    }
  ]
}

CitationSource

Es una cita de una fuente para una parte de una respuesta específica.

Campos
startIndex integer

Opcional. Es el inicio del segmento de la respuesta que se atribuye a esta fuente.

El índice indica el inicio del segmento, medido en bytes.

endIndex integer

Opcional. Es el final del segmento atribuido, exclusivo.

uri string

Opcional. Es el URI que se atribuye como fuente de una parte del texto.

license string

Opcional. Es la licencia del proyecto de GitHub que se atribuye como fuente del segmento.

La información de la licencia es obligatoria para las citas de código.

Representación JSON
{
  "startIndex": integer,
  "endIndex": integer,
  "uri": string,
  "license": string
}

HarmCategory

Es la categoría de una clasificación.

Estas categorías abarcan varios tipos de daños que los desarrolladores pueden querer ajustar.

Enums
HARM_CATEGORY_UNSPECIFIED La categoría no se especifica.
HARM_CATEGORY_DEROGATORY PaLM: Comentarios negativos o dañinos que se orientan a la identidad o los atributos protegidos.
HARM_CATEGORY_TOXICITY PaLM: Contenido obsceno, grosero o irrespetuoso
HARM_CATEGORY_VIOLENCE PaLM: Describe situaciones que representen violencia contra una persona o un grupo, o descripciones generales de imágenes sangrientas.
HARM_CATEGORY_SEXUAL PaLM: Contiene referencias a actos sexuales o a otro contenido obsceno.
HARM_CATEGORY_MEDICAL PaLM: Promociona consejos médicos no verificados.
HARM_CATEGORY_DANGEROUS PaLM: Contenido peligroso que promueve, facilita o fomenta actividades perjudiciales
HARM_CATEGORY_HARASSMENT Gemini: Contenido de hostigamiento.
HARM_CATEGORY_HATE_SPEECH Gemini: Incitación al odio o a la violencia y contenido
HARM_CATEGORY_SEXUALLY_EXPLICIT Gemini: Contenido sexual explícito
HARM_CATEGORY_DANGEROUS_CONTENT Gemini: Contenido peligroso.
HARM_CATEGORY_CIVIC_INTEGRITY

Gemini: Contenido que se puede usar para perjudicar la integridad cívica. OBSOLETO: En su lugar, usa enableEnhancedCivicAnswers.

HARM_CATEGORY_JAILBREAK Gemini: Instrucciones que intentan eludir o subvertir las instrucciones de seguridad del modelo (intentos de jailbreaking)

ModalityTokenCount

Representa la información del recuento de tokens para una sola modalidad.

Campos
modality enum (Modality)

Es la modalidad asociada a este recuento de tokens.

tokenCount integer

Cantidad de tokens.

Representación JSON
{
  "modality": enum (Modality),
  "tokenCount": integer
}

Modalidad

Modalidad de parte de contenido

Enums
MODALITY_UNSPECIFIED Modalidad sin especificar.
TEXT Texto sin formato
IMAGE Imagen.
VIDEO Video.
AUDIO Audio.
DOCUMENT Documento, p.ej., PDF.

SafetyRating

Es la calificación de seguridad de un contenido.

La clasificación de seguridad contiene la categoría de daño y el nivel de probabilidad de daño en esa categoría para un fragmento de contenido. El contenido se clasifica para la seguridad en varias categorías de daño, y aquí se incluye la probabilidad de la clasificación del daño.

Campos
category enum (HarmCategory)

Obligatorio. Es la categoría de esta calificación.

probability enum (HarmProbability)

Obligatorio. Es la probabilidad de daño de este contenido.

blocked boolean

¿Se bloqueó este contenido debido a esta clasificación?

Representación JSON
{
  "category": enum (HarmCategory),
  "probability": enum (HarmProbability),
  "blocked": boolean
}

HarmProbability

Es la probabilidad de que un elemento de contenido sea dañino.

El sistema de clasificación indica la probabilidad de que el contenido no sea seguro. Esto no indica la gravedad del daño que puede causar un contenido.

Enums
HARM_PROBABILITY_UNSPECIFIED No se especifica la probabilidad.
NEGLIGIBLE El contenido tiene una probabilidad insignificante de no ser seguro.
LOW El contenido tiene una probabilidad baja de no ser seguro.
MEDIUM El contenido tiene una probabilidad media de no ser seguro.
HIGH El contenido tiene una alta probabilidad de no ser seguro.

SafetySetting

Es el parámetro de configuración de seguridad que afecta el comportamiento de bloqueo de seguridad.

Si se pasa un parámetro de configuración de seguridad para una categoría, cambia la probabilidad permitida de que se bloquee el contenido.

Campos
category enum (HarmCategory)

Obligatorio. Es la categoría de este parámetro de configuración.

threshold enum (HarmBlockThreshold)

Obligatorio. Controla el umbral de probabilidad en el que se bloquea el daño.

Representación JSON
{
  "category": enum (HarmCategory),
  "threshold": enum (HarmBlockThreshold)
}

HarmBlockThreshold

Bloquear en un nivel de probabilidad de daño especificado y más allá

Enums
HARM_BLOCK_THRESHOLD_UNSPECIFIED No se especificó el umbral.
BLOCK_LOW_AND_ABOVE Se permitirá el contenido con NEGLIGIBLE.
BLOCK_MEDIUM_AND_ABOVE Se permitirá el contenido con niveles de negligencia NEGLIGIBLE y BAJO.
BLOCK_ONLY_HIGH Se permitirá el contenido con niveles de impacto NEGLIGIBLE, LOW y MEDIUM.
BLOCK_NONE Se permitirá todo el contenido.
OFF Desactiva el filtro de seguridad.

ServiceTier

Es el nivel de servicio de la solicitud.

Enums
unspecified Es el nivel de servicio predeterminado, que es estándar.
standard Es el nivel de servicio estándar.
flex Es el nivel de servicio de Flex.
priority Es el nivel de servicio prioritario.

Contenido

Es el tipo de datos estructurados base que incluye contenido de varias partes de un mensaje.

Un Content incluye un campo role que designa al productor del Content y un campo parts que contiene datos de varias partes que incluyen el contenido del turno del mensaje.

Campos
parts[] object (Part)

Parts ordenados que constituyen un solo mensaje. Las partes pueden tener diferentes tipos de MIME.

role string

Opcional. Es el productor del contenido. Debe ser "user" o "model".

Es útil establecerlo para conversaciones de varios turnos. De lo contrario, se puede dejar en blanco o sin configurar.

Representación JSON
{
  "parts": [
    {
      object (Part)
    }
  ],
  "role": string
}

Pieza

Es un tipo de datos que contiene contenido multimedia que forma parte de un mensaje Content de varias partes.

Un Part consta de datos que tienen un tipo de datos asociado. Un Part solo puede contener uno de los tipos aceptados en Part.data.

Un Part debe tener un tipo de MIME de IANA fijo que identifique el tipo y el subtipo de los medios si el campo inlineData se completa con bytes sin procesar.

Campos
thought boolean

Opcional. Indica si el modelo generó la parte.

thoughtSignature string (bytes format)

Opcional. Es una firma opaca para el pensamiento, de modo que se pueda reutilizar en solicitudes posteriores.

String codificada en base64.

partMetadata object (Struct format)

Son los metadatos personalizados asociados con la parte. Es posible que los agentes que usan genai.Part como representación de contenido deban hacer un seguimiento de la información adicional. Por ejemplo, puede ser el nombre de un archivo o una fuente de la que proviene la Parte, o una forma de multiplexar varios flujos de Partes.

mediaResolution object (MediaResolution)

Opcional. Resolución de medios para los medios de entrada.

mediaProcessing enum (MediaProcessing)

Opcional. Es la forma en que el modelo procesa el contenido multimedia de esta parte para comprenderlo. Solo es significativo para las partes de video (inlineData o fileData con MIME de video). Las partes que no son de video ignoran este campo.

data Union type
data puede ser una de las siguientes opciones:
text string

Texto intercalado.

inlineData object (Blob)

Son los bytes de contenido multimedia intercalados.

functionCall object (FunctionCall)

Un FunctionCall predicho que muestra el modelo que contiene una cadena que representa el FunctionDeclaration.name con los argumentos y sus valores.

functionResponse object (FunctionResponse)

La salida del resultado de una FunctionCall que contiene una cadena que representa el FunctionDeclaration.name y un objeto JSON estructurado que contiene cualquier resultado de la función se usa como contexto para el modelo.

fileData object (FileData)

Datos basados en URI.

executableCode object (ExecutableCode)

Es el código que genera el modelo y que se debe ejecutar.

codeExecutionResult object (CodeExecutionResult)

Es el resultado de la ejecución de ExecutableCode.

toolCall object (ToolCall)

Llamada a la herramienta del servidor. Este campo se propaga cuando el modelo predice una invocación de herramienta que se debe ejecutar en el servidor. Se espera que el cliente reenvíe este mensaje a la API.

toolResponse object (ToolResponse)

Es el resultado de una ejecución de ToolCall del servidor. El cliente completa este campo con los resultados de la ejecución del ToolCall correspondiente.

metadata Union type
Controla el procesamiento previo adicional de los datos. metadata puede ser una de las siguientes opciones:
videoMetadata object (VideoMetadata)

Opcional. Metadatos del video. Los metadatos solo se deben especificar mientras los datos de video se presentan en inlineData o fileData.

Representación JSON
{
  "thought": boolean,
  "thoughtSignature": string,
  "partMetadata": {
    object
  },
  "mediaResolution": {
    object (MediaResolution)
  },
  "mediaProcessing": enum (MediaProcessing),

  // data
  "text": string,
  "inlineData": {
    object (Blob)
  },
  "functionCall": {
    object (FunctionCall)
  },
  "functionResponse": {
    object (FunctionResponse)
  },
  "fileData": {
    object (FileData)
  },
  "executableCode": {
    object (ExecutableCode)
  },
  "codeExecutionResult": {
    object (CodeExecutionResult)
  },
  "toolCall": {
    object (ToolCall)
  },
  "toolResponse": {
    object (ToolResponse)
  }
  // Union type

  // metadata
  "videoMetadata": {
    object (VideoMetadata)
  }
  // Union type
}

BLOB

Son los bytes sin procesar del contenido multimedia.

El texto no se debe enviar como bytes sin procesar, sino que se debe usar el campo "text".

Campos
mimeType string

Es el tipo de MIME estándar de IANA de los datos de origen. Ejemplos de tipos admitidos: - Imágenes: image/png, image/jpeg, image/jpg, image/webp, image/heic, image/heif, image/gif, image/avif - Audio: audio/*, video/audio/s16le, video/audio/wav - Video: video/* - Texto: text/plain, text/html, text/css, text/javascript, text/x-typescript, text/csv, text/markdown, text/x-python, text/xml, text/rtf, video/text/timestamp - Aplicaciones: application/x-javascript, application/x-typescript, application/x-python-code, application/json, application/x-ipynb+json, application/rtf, application/pdf Para obtener más contexto, consulta Formatos de archivo admitidos. //

data string (bytes format)

Son los bytes sin procesar para los formatos de medios.

String codificada en base64.

Representación JSON
{
  "mimeType": string,
  "data": string
}

FunctionCall

Un FunctionCall predicho que muestra el modelo que contiene una cadena que representa el FunctionDeclaration.name con los argumentos y sus valores.

Campos
id string

Opcional. Es el identificador único de la llamada a la función. Si se completa, es el cliente que ejecutará functionCall y devolverá la respuesta con el id coincidente.

name string

Obligatorio. El nombre de la función a la que se llamará. Debe tener caracteres de la A a la Z (mayúsculas o minúsculas), o números del 0 al 9, o contener guiones bajos y guiones, con una longitud máxima de 128.

args object (Struct format)

Opcional. Los parámetros y valores de la función en formato de objeto JSON

Representación JSON
{
  "id": string,
  "name": string,
  "args": {
    object
  }
}

FunctionResponse

La salida del resultado de una FunctionCall que contiene una cadena que representa el FunctionDeclaration.name y un objeto JSON estructurado que contiene cualquier resultado de la función se usa como contexto para el modelo. Esto debería contener el resultado de unFunctionCall basado en la predicción del modelo.

Campos
id string

Opcional. Es el identificador de la llamada a la función para la que se genera esta respuesta. El cliente lo completa para que coincida con la llamada a función correspondiente id.

name string

Obligatorio. El nombre de la función a la que se llamará. Debe tener caracteres de la A a la Z (mayúsculas o minúsculas), o números del 0 al 9, o contener guiones bajos y guiones, con una longitud máxima de 128.

response object (Struct format)

Obligatorio. La respuesta de la función en formato de objeto JSON. Las entidades que llaman pueden usar las claves que deseen y que se ajusten a la sintaxis de la función para devolver el resultado de la función, p.ej., "output", "result", etcétera. En particular, si no se pudo ejecutar la llamada a la función, la respuesta puede tener una clave "error" para devolver detalles del error al modelo.

Se pueden incluir elementos multimedia con un subobjeto que contenga una sola clave "$ref" cuyo valor sea el inlineData.display_name de un FunctionResponsePart que contenga los elementos multimedia. Consulta https://ai.google.dev/gemini-api/docs/function-calling#multimodal.

parts[] object (FunctionResponsePart)

Opcional. Es un objeto Parts ordenado que constituye una respuesta de la función. Las partes pueden tener diferentes tipos de MIME de IANA.

willContinue boolean

Opcional. Indica que la llamada a función continúa y que se devolverán más respuestas, lo que convierte la llamada a función en un generador. Solo se aplica a las llamadas a funciones NON_BLOCKING y se ignora en otros casos. Si se establece como falso, no se tendrán en cuenta las respuestas futuras. Se permite devolver un response vacío con willContinue=False para indicar que finalizó la llamada a la función. Es posible que esto aún active la generación del modelo. Para evitar que se active la generación y finalizar la llamada a la función, también establece scheduling en SILENT.

scheduling enum (Scheduling)

Opcional. Especifica cómo se debe programar la respuesta en la conversación. Solo se aplica a las llamadas a funciones NON_BLOCKING y se ignora en otros casos. El valor predeterminado es WHEN_IDLE.

Representación JSON
{
  "id": string,
  "name": string,
  "response": {
    object
  },
  "parts": [
    {
      object (FunctionResponsePart)
    }
  ],
  "willContinue": boolean,
  "scheduling": enum (Scheduling)
}

FunctionResponsePart

Es un tipo de datos que contiene contenido multimedia que forma parte de un mensaje FunctionResponse.

Un FunctionResponsePart consta de datos que tienen un tipo de datos asociado. Un FunctionResponsePart solo puede contener uno de los tipos aceptados en FunctionResponsePart.data.

Un FunctionResponsePart debe tener un tipo de MIME de IANA fijo que identifique el tipo y el subtipo de los medios si el campo inlineData se completa con bytes sin procesar.

Campos
data Union type
Son los datos de la parte de respuesta de la función. data puede ser una de las siguientes opciones:
inlineData object (FunctionResponseBlob)

Son los bytes de contenido multimedia intercalados.

Representación JSON
{

  // data
  "inlineData": {
    object (FunctionResponseBlob)
  }
  // Union type
}

FunctionResponseBlob

Son los bytes de medios sin procesar para la respuesta de la función.

El texto no se debe enviar como bytes sin procesar. Usa el campo "FunctionResponse.response".

Campos
mimeType string

Es el tipo de MIME estándar de IANA de los datos de origen. Ejemplos: - image/png - image/jpeg Si se proporciona un tipo de MIME no admitido, se mostrará un error. Para obtener una lista completa de los tipos admitidos, consulta Formatos de archivo admitidos.

data string (bytes format)

Son los bytes sin procesar para los formatos de medios.

String codificada en base64.

Representación JSON
{
  "mimeType": string,
  "data": string
}

Programación

Especifica cómo se debe programar la respuesta en la conversación.

Enums
SCHEDULING_UNSPECIFIED Este valor no se usa.
SILENT Solo agrega el resultado al contexto de la conversación, no interrumpas ni actives la generación.
WHEN_IDLE Agrega el resultado al contexto de la conversación y solicita que se genere un resultado sin interrumpir la generación en curso.
INTERRUPT Agrega el resultado al contexto de la conversación, interrumpe la generación en curso y solicita que se genere un resultado.

FileData

Datos basados en URI.

Campos
mimeType string

Opcional. Es el tipo de MIME estándar de IANA de los datos de origen.

fileUri string

Obligatorio. Es el URI.

Representación JSON
{
  "mimeType": string,
  "fileUri": string
}

ExecutableCode

Es el código que genera el modelo y que se debe ejecutar, y el resultado que se devuelve al modelo.

Solo se genera cuando se usa la herramienta CodeExecution, en la que el código se ejecutará automáticamente y también se generará un CodeExecutionResult correspondiente.

Campos
id string

Opcional. Es el identificador único de la parte de ExecutableCode. El servidor devuelve el CodeExecutionResult con el id coincidente.

language enum (Language)

Obligatorio. Lenguaje de programación de code.

code string

Obligatorio. Es el código que se ejecutará.

Representación JSON
{
  "id": string,
  "language": enum (Language),
  "code": string
}

Idioma

Lenguajes de programación admitidos para el código generado.

Enums
LANGUAGE_UNSPECIFIED Idioma no especificado. No se debe usar este valor.
PYTHON Python >= 3.10, con numpy y simpy disponibles. Python es el lenguaje predeterminado.

CodeExecutionResult

Es el resultado de la ejecución de ExecutableCode.

Se genera solo cuando se usa la herramienta CodeExecution.

Campos
id string

Opcional. Es el identificador de la parte ExecutableCode para la que se proporciona este resultado. Solo se propaga si el ExecutableCode correspondiente tiene un ID.

outcome enum (Outcome)

Obligatorio. Es el resultado de la ejecución del código.

output string

Opcional. Contiene stdout cuando la ejecución del código es exitosa; de lo contrario, contiene stderr o alguna otra descripción.

Representación JSON
{
  "id": string,
  "outcome": enum (Outcome),
  "output": string
}

Resultado

Es la enumeración de los posibles resultados de la ejecución del código.

Enums
OUTCOME_UNSPECIFIED Indica que no se especificó el estado. No se debe usar este valor.
OUTCOME_OK La ejecución del código se completó correctamente. output contiene stdout, si hay alguno.
OUTCOME_FAILED Error en la ejecución de código. output contiene stderr y stdout, si los hay.
OUTCOME_DEADLINE_EXCEEDED La ejecución del código se realizó durante demasiado tiempo y se canceló. Puede haber o no un output parcial.

ToolCall

Es un ToolCall predicho del servidor que devuelve el modelo. Este mensaje contiene información sobre una herramienta que el modelo desea invocar. NO se espera que el cliente ejecute este ToolCall. En cambio, el cliente debe pasar este ToolCall a la API en un turno posterior dentro de un mensaje Content, junto con el ToolResponse correspondiente.

Campos
id string

Opcional. Es el identificador único de la llamada a la herramienta. El servidor devuelve la respuesta de la herramienta con el id coincidente.

toolName string

Opcional. Es el nombre de la herramienta a la que se llamó.

toolType enum (ToolType)

Obligatorio. Es el tipo de herramienta que se llamó.

args object (Struct format)

Opcional. Son los argumentos de la llamada a la herramienta. Ejemplo: {"arg1" : "value1", "arg2" : "value2" , ...}

Representación JSON
{
  "id": string,
  "toolName": string,
  "toolType": enum (ToolType),
  "args": {
    object
  }
}

ToolType

Es el tipo de herramienta en la llamada a la función.

Enums
TOOL_TYPE_UNSPECIFIED Es un tipo de herramienta sin especificar.
GOOGLE_SEARCH_WEB Herramienta de Búsqueda de Google, que se asigna a Tool.google_search.search_types.web_search.
GOOGLE_SEARCH_IMAGE Herramienta de búsqueda de imágenes, que se asigna a Tool.google_search.search_types.image_search.
URL_CONTEXT Es la herramienta de contexto de URL, que se asigna a Tool.url_context.
GOOGLE_MAPS Herramienta de Google Maps, que se asigna a Tool.google_maps.

ToolResponse

Es el resultado de una ejecución de ToolCall del servidor. Este mensaje contiene los resultados de una invocación de herramienta que inició un ToolCall del modelo. El cliente debe devolver este ToolResponse a la API en un turno posterior dentro de un mensaje Content, junto con el ToolCall correspondiente.

Campos
id string

Opcional. Es el identificador de la llamada a la herramienta para la que se genera esta respuesta.

toolType enum (ToolType)

Obligatorio. Es el tipo de herramienta a la que se llamó, que coincide con toolType en el ToolCall correspondiente.

response object (Struct format)

Opcional. Es la respuesta de la herramienta.

Representación JSON
{
  "id": string,
  "toolType": enum (ToolType),
  "response": {
    object
  }
}

VideoMetadata

Obsoleto: Usa GenerateContentRequest.processing_options en su lugar. Son los metadatos que describen el contenido del video de entrada.

Campos
startOffset string (Duration format)

Opcional. El desplazamiento inicial del video.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

endOffset string (Duration format)

Opcional. El desplazamiento final del video.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

fps number

Opcional. Es la velocidad de fotogramas del video que se envía al modelo. Si no se especifica, el valor predeterminado será 1.0. El rango de FPS es (0.0, 24.0].

Representación JSON
{
  "startOffset": string,
  "endOffset": string,
  "fps": number
}

MediaResolution

Resolución de medios para la asignación de tokens.

Campos
value Union type
Es el nivel de resolución del contenido multimedia. value puede ser una de las siguientes opciones:
level enum (Level)

Calidad de la tokenización que se usa para los medios determinados. para obtener asistencia con la API de Gemini .

Representación JSON
{

  // value
  "level": enum (Level)
  // Union type
}

Nivel

Es el nivel de resolución del contenido multimedia.

Enums
MEDIA_RESOLUTION_UNSPECIFIED No se estableció la resolución de contenido multimedia.
MEDIA_RESOLUTION_LOW La resolución de contenido multimedia está configurada en baja.
MEDIA_RESOLUTION_MEDIUM La resolución de medios está establecida en media.
MEDIA_RESOLUTION_HIGH La resolución de los medios está configurada en alta.
MEDIA_RESOLUTION_ULTRA_HIGH La resolución de los medios se estableció en ultra alta.

MediaProcessing

Cómo procesa el modelo los medios de entrada para comprenderlos.

Enums
MEDIA_PROCESSING_UNSPECIFIED Predeterminado. Usa un procesamiento específico del modelo (3.5 Pro+ -> AGENTIC, modelos anteriores -> STATIC).
STATIC Extracción de fotogramas a tarifa fija. Todos los marcos se colocan en contexto.
AGENTIC Navegación dinámica basada en modelos. Se recomienda para la mayoría de los casos de uso.

Entorno

Es un entorno de ejecución para un agente.

Campos
id string

Obligatorio. Solo salida. Es el ID del entorno.

sources[] object (Source)

Son las fuentes que se deben montar en el entorno.

created string

Solo salida. Fecha y hora en que se creó el entorno en formato ISO 8601 (AAAA-MM-DDThh:mm:ssZ).

updated string

Solo salida. Fecha y hora en la que se actualizó el entorno por última vez en formato ISO 8601 (AAAA-MM-DDThh:mm:ssZ).

lastAccessed string

Solo salida. Fecha y hora en que se accedió al entorno por última vez en formato ISO 8601 (AAAA-MM-DDThh:mm:ssZ).

status enum (Status)

Solo salida. Es el estado del contenedor del entorno.

fileCount string (int64 format)

Solo salida. Es la cantidad de archivos en el entorno (solo salida).

sizeBytes string (int64 format)

Solo salida. Es el tamaño total de los archivos del entorno en bytes (solo salida).

network Union type
Es la configuración de red del entorno. network puede ser una de las siguientes opciones:
networkAllowlist object (EnvironmentNetworkEgressAllowlist)

Permite solo dominios específicos.

networkMode enum (NetworkMode)

Modo de salida de red.

Representación JSON
{
  "id": string,
  "sources": [
    {
      object (Source)
    }
  ],
  "created": string,
  "updated": string,
  "lastAccessed": string,
  "status": enum (Status),
  "fileCount": string,
  "sizeBytes": string,

  // network
  "networkAllowlist": {
    object (EnvironmentNetworkEgressAllowlist)
  },
  "networkMode": enum (NetworkMode)
  // Union type
}

Estado

Es el estado del entorno.

Enums
STATUS_UNSPECIFIED
ACTIVE
EXPIRED

NetworkMode

Modo de salida de red para configuraciones que no están en la lista de entidades permitidas.

Enums
NETWORK_MODE_UNSPECIFIED Valor predeterminado. No se utiliza.
DISABLED Se bloquea toda la salida de red.

Esquema

El objeto Schema permite definir los tipos de datos de entrada y salida. Estos tipos pueden ser objetos, pero también primitivos y arrays. Representa un subconjunto selecto de un objeto de esquema de OpenAPI 3.0.

Campos
type enum (Type)

Obligatorio. Tipo de datos.

format string

Opcional. El formato de los datos. Se permite cualquier valor, pero la mayoría no activan ninguna funcionalidad especial.

title string

Opcional. Es el título del esquema.

description string

Opcional. Es una breve descripción del parámetro. Podría contener ejemplos de uso. La descripción del parámetro se puede formatear como Markdown.

nullable boolean

Opcional. Indica si el valor puede ser nulo.

enum[] string

Opcional. Valores posibles del elemento de Type.STRING con formato de enumeración. Por ejemplo, podemos definir una dirección de enumeración de la siguiente forma : {type:STRING, format:enum, enum:["EAST", NORTH", "SOUTH", "WEST"]}

maxItems string (int64 format)

Opcional. Es la cantidad máxima de elementos para Type.ARRAY.

minItems string (int64 format)

Opcional. Es la cantidad mínima de elementos para Type.ARRAY.

properties map (key: string, value: object (Schema))

Opcional. Son las propiedades de Type.OBJECT.

Un objeto que contiene una lista de pares "key": value. Ejemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

required[] string

Opcional. Son las propiedades obligatorias de Type.OBJECT.

minProperties string (int64 format)

Opcional. Es la cantidad mínima de propiedades para Type.OBJECT.

maxProperties string (int64 format)

Opcional. Es la cantidad máxima de propiedades para Type.OBJECT.

minLength string (int64 format)

Opcional. CAMPOS DEL ESQUEMA PARA EL TIPO STRING: Longitud mínima del Type.STRING

maxLength string (int64 format)

Opcional. Longitud máxima de Type.STRING

pattern string

Opcional. Es el patrón del Type.STRING para restringir una cadena a una expresión regular.

example value (Value format)

Opcional. Ejemplo del objeto. Solo se completará cuando el objeto sea la raíz.

anyOf[] object (Schema)

Opcional. El valor se debe validar en relación con cualquiera de los subesquemas (uno o más) de la lista.

propertyOrdering[] string

Opcional. Es el orden de las propiedades. No es un campo estándar en la especificación de OpenAPI. Se usa para determinar el orden de las propiedades en la respuesta.

default value (Value format)

Opcional. Es el valor predeterminado del campo. Según el esquema en JSON, este campo está destinado a los generadores de documentación y no afecta la validación. Por lo tanto, se incluye aquí y se ignora para que los desarrolladores que envían esquemas con un campo default no reciban errores de campo desconocido.

items object (Schema)

Opcional. Esquema de los elementos de Type.ARRAY.

minimum number

Opcional. CAMPOS DEL ESQUEMA PARA LOS TIPOS INTEGER Y NUMBER: Valor mínimo de Type.INTEGER y Type.NUMBER

maximum number

Opcional. Valor máximo de Type.INTEGER y Type.NUMBER

Representación JSON
{
  "type": enum (Type),
  "format": string,
  "title": string,
  "description": string,
  "nullable": boolean,
  "enum": [
    string
  ],
  "maxItems": string,
  "minItems": string,
  "properties": {
    string: {
      object (Schema)
    },
    ...
  },
  "required": [
    string
  ],
  "minProperties": string,
  "maxProperties": string,
  "minLength": string,
  "maxLength": string,
  "pattern": string,
  "example": value,
  "anyOf": [
    {
      object (Schema)
    }
  ],
  "propertyOrdering": [
    string
  ],
  "default": value,
  "items": {
    object (Schema)
  },
  "minimum": number,
  "maximum": number
}

Tipo

El tipo contiene la lista de tipos de datos de OpenAPI según se define en https://spec.openapis.org/oas/v3.0.3#data-types.

Enums
TYPE_UNSPECIFIED No se especificó, no se debe usar.
STRING Tipo de cadena.
NUMBER Es el tipo de número.
INTEGER Es de tipo entero.
BOOLEAN Tipo booleano.
ARRAY Es el tipo de array.
OBJECT Tipo de objeto.
NULL Es un tipo nulo.

Herramienta

Son los detalles de la herramienta que el modelo puede usar para generar una respuesta.

Una Tool es un fragmento de código que permite que el sistema interactúe con sistemas externos para realizar una acción, o un conjunto de acciones, fuera del conocimiento y del alcance del modelo.

ID siguiente: 17

Campos
functionDeclarations[] object (FunctionDeclaration)

Opcional. Es una lista de FunctionDeclarations disponibles para el modelo que se pueden usar para las llamadas a funciones.

El modelo o el sistema no ejecutan la función. En cambio, la función definida se puede devolver como un FunctionCall con argumentos para que se ejecute en el cliente. El modelo puede decidir llamar a un subconjunto de estas funciones completando FunctionCall en la respuesta. El siguiente turno de conversación puede contener un FunctionResponse con el Content.role contexto de generación "función" para el siguiente turno del modelo.

googleSearchRetrieval object (GoogleSearchRetrieval)

Opcional. Herramienta de recuperación que funciona con la Búsqueda de Google.

codeExecution object (CodeExecution)

Opcional. Permite que el modelo ejecute código como parte de la generación.

computerUse object (ComputerUse)

Opcional. Herramienta para ayudar al modelo a interactuar directamente con la computadora. Si está habilitada, completa automáticamente las declaraciones de funciones específicas para el uso de la computadora.

urlContext object (UrlContext)

Opcional. Es una herramienta que admite la recuperación del contexto de URL.

mcpServers[] object (McpServer)

Opcional. Servidores de MCP a los que se conectará.

googleMaps object (GoogleMaps)

Opcional. Es una herramienta que permite fundamentar la respuesta del modelo con contexto geoespacial relacionado con la búsqueda del usuario.

Representación JSON
{
  "functionDeclarations": [
    {
      object (FunctionDeclaration)
    }
  ],
  "googleSearchRetrieval": {
    object (GoogleSearchRetrieval)
  },
  "codeExecution": {
    object (CodeExecution)
  },
  "googleSearch": {
    object (GoogleSearch)
  },
  "computerUse": {
    object (ComputerUse)
  },
  "urlContext": {
    object (UrlContext)
  },
  "fileSearch": {
    object (FileSearch)
  },
  "mcpServers": [
    {
      object (McpServer)
    }
  ],
  "googleMaps": {
    object (GoogleMaps)
  }
}

FunctionDeclaration

Representación estructurada de una declaración de función según lo definido por la especificación de OpenAPI 3.03. En esta declaración, se incluyen el nombre y los parámetros de la función. Esta FunctionDeclaration es una representación de un bloque de código que el modelo puede usar como Tool y que el cliente puede ejecutar.

Campos
name string

Obligatorio. Es el nombre de la función. Debe tener caracteres de la A a la Z (mayúsculas o minúsculas), o números del 0 al 9, o contener guiones bajos, dos puntos, puntos y guiones, con una longitud máxima de 128.

description string

Obligatorio. Es una breve descripción de la función.

behavior enum (Behavior)

Opcional. Especifica el comportamiento de la función. Actualmente, solo se admite con el método BidiGenerateContent.

parameters object (Schema)

Opcional. Describe los parámetros de esta función. Refleja la clave de cadena del objeto Parameter de la API abierta 3.03: el nombre del parámetro. Los nombres de los parámetros distinguen mayúsculas de minúsculas. Valor del esquema: Es el esquema que define el tipo que se usa para el parámetro.

parametersJsonSchema value (Value format)

Opcional. Describe los parámetros de la función en formato de esquema JSON. El esquema debe describir un objeto en el que las propiedades son los parámetros de la función. Por ejemplo:

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" }
  },
  "additionalProperties": false,
  "required": ["name", "age"],
  "propertyOrdering": ["name", "age"]
}

Este campo es mutuamente exclusivo con parameters.

response object (Schema)

Opcional. Describe el resultado de esta función en formato de esquema JSON. Refleja el objeto de respuesta de la API abierta 3.03. El esquema define el tipo que se usa para el valor de respuesta de la función.

responseJsonSchema value (Value format)

Opcional. Describe el resultado de esta función en formato de esquema JSON. El valor especificado por el esquema es el valor de respuesta de la función.

Este campo es mutuamente exclusivo con response.

Representación JSON
{
  "name": string,
  "description": string,
  "behavior": enum (Behavior),
  "parameters": {
    object (Schema)
  },
  "parametersJsonSchema": value,
  "response": {
    object (Schema)
  },
  "responseJsonSchema": value
}

Comportamiento

Define el comportamiento de la función. La configuración predeterminada es BLOCKING.

Enums
UNSPECIFIED Este valor no se usa.
BLOCKING Si se configura, el sistema esperará a recibir la respuesta de la función antes de continuar la conversación.
NON_BLOCKING Si se configura, el sistema no esperará a recibir la respuesta de la función. En cambio, intentará controlar las respuestas de funciones a medida que estén disponibles y, al mismo tiempo, mantendrá la conversación entre el usuario y el modelo.

GoogleSearchRetrieval

Herramienta para recuperar datos web públicos para la fundamentación, potenciada por Google.

Campos
dynamicRetrievalConfig object (DynamicRetrievalConfig)

Especifica la configuración de recuperación dinámica para la fuente determinada.

Representación JSON
{
  "dynamicRetrievalConfig": {
    object (DynamicRetrievalConfig)
  }
}

DynamicRetrievalConfig

Describe las opciones para personalizar la recuperación dinámica.

Campos
mode enum (Mode)

Es el modo del predictor que se usará en la recuperación dinámica.

dynamicThreshold number

Es el umbral que se usará en la recuperación dinámica. Si no se establece, se usa un valor predeterminado del sistema.

Representación JSON
{
  "mode": enum (Mode),
  "dynamicThreshold": number
}

Modo

Es el modo del predictor que se usará en la recuperación dinámica.

Enums
MODE_UNSPECIFIED Siempre activa la recuperación.
MODE_DYNAMIC Ejecuta la recuperación solo cuando el sistema decida que es necesaria.

CodeExecution

Este tipo no tiene campos.

Herramienta que ejecuta el código generado por el modelo y devuelve automáticamente el resultado al modelo.

Consulta también ExecutableCode y CodeExecutionResult, que solo se generan cuando se usa esta herramienta.

GoogleSearch

Es el tipo de herramienta de GoogleSearch. Es una herramienta para admitir la Búsqueda de Google en el modelo. Con la tecnología de Google

Campos
timeRangeFilter object (Interval)

Opcional. Filtrar los resultados de la búsqueda para un período específico Si los clientes establecen una hora de inicio, también deben establecer una hora de finalización (y viceversa).

searchTypes object (SearchTypes)

Opcional. Es el conjunto de tipos de búsqueda que se habilitarán. Si no se configura, la búsqueda web se habilita de forma predeterminada.

Representación JSON
{
  "timeRangeFilter": {
    object (Interval)
  },
  "searchTypes": {
    object (SearchTypes)
  }
}

Intervalo

Representa un intervalo de tiempo, codificado como una marca de tiempo de inicio (inclusiva) y una marca de tiempo de finalización (exclusiva).

El inicio debe ser menor o igual que el final. Cuando el inicio es igual al final, el intervalo está vacío (no coincide con ninguna hora). Cuando no se especifican el inicio ni el final, el intervalo coincide con cualquier hora.

Campos
startTime string (Timestamp format)

Opcional. Es el inicio inclusivo del intervalo.

Si se especifica, la marca de tiempo que coincida con este intervalo deberá ser igual o posterior al inicio.

Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" o "2014-10-02T15:01:23+05:30".

endTime string (Timestamp format)

Opcional. Es el final exclusivo del intervalo.

Si se especifica, la marca de tiempo que coincida con este intervalo deberá ser anterior al final.

Usa el formato RFC 3339, en el que el resultado generado siempre estará normalizada a Z y usa 0, 3, 6 o 9 dígitos fraccionarios. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" o "2014-10-02T15:01:23+05:30".

Representación JSON
{
  "startTime": string,
  "endTime": string
}

SearchTypes

Son los diferentes tipos de búsqueda que se pueden habilitar en la herramienta GoogleSearch.

Campos
Representación JSON
{
  "webSearch": {
    object (WebSearch)
  },
  "imageSearch": {
    object (ImageSearch)
  }
}

WebSearch

Este tipo no tiene campos.

Búsqueda web estándar para la fundamentación y las configuraciones relacionadas

ImageSearch

Este tipo no tiene campos.

Búsqueda con imágenes para la fundamentación y configuraciones relacionadas.

ComputerUse

Es el tipo de herramienta de uso de la computadora.

Campos
environment enum (Environment)

Obligatorio. Es el entorno en el que se opera.

excludedPredefinedFunctions[] string

Opcional. De forma predeterminada, las funciones predefinidas se incluyen en la llamada al modelo final. Algunos de ellos se pueden excluir explícitamente para que no se incluyan automáticamente. Esto puede tener dos propósitos: 1. Usar un espacio de acción diferente o más restringido 2. Mejoramos las definiciones o instrucciones de las funciones predefinidas.

enablePromptInjectionDetection boolean

Opcional. Indica si se debe habilitar la verificación de detección de inyección de instrucciones en la solicitud de uso de la computadora.

disabledSafetyPolicies[] enum (SafetyPolicy)

Opcional. Se inhabilitaron las políticas de seguridad para el uso de la computadora.

Representación JSON
{
  "environment": enum (Environment),
  "excludedPredefinedFunctions": [
    string
  ],
  "enablePromptInjectionDetection": boolean,
  "disabledSafetyPolicies": [
    enum (SafetyPolicy)
  ]
}

Entorno

Representa el entorno en el que se opera, como un navegador web.

Enums
ENVIRONMENT_UNSPECIFIED El valor predeterminado es el navegador.
ENVIRONMENT_BROWSER Funciona en un navegador web.
ENVIRONMENT_MOBILE Funciona en un entorno móvil.
ENVIRONMENT_DESKTOP Funciona en un entorno de escritorio.

SafetyPolicy

Políticas de seguridad predefinidas para el uso de la computadora

Enums
SAFETY_POLICY_UNSPECIFIED Política de seguridad sin especificar.
FINANCIAL_TRANSACTIONS Política de seguridad para transacciones financieras.
SENSITIVE_DATA_MODIFICATION Política de seguridad para la modificación de datos sensibles.
COMMUNICATION_TOOL Política de seguridad para herramientas de comunicación (p. ej., Gmail, Chat y Meet)
ACCOUNT_CREATION Política de seguridad para la creación de cuentas.
DATA_MODIFICATION Es la política de seguridad para la modificación de datos.
LEGAL_TERMS_AND_AGREEMENTS Política de seguridad para acuerdos y condiciones legales

UrlContext

Este tipo no tiene campos.

Es una herramienta que admite la recuperación del contexto de URL.

FileSearch

Es la herramienta FileSearch que recupera conocimiento de los corpus de recuperación semántica. Los archivos se importan a los corpus de la Recuperación semántica con la API de ImportFile.

Campos
fileSearchStoreNames[] string

Obligatorio. Nombres de los almacenes de búsqueda de archivos desde los que se recuperará la información. Ejemplo: fileSearchStores/my-file-search-store-123

metadataFilter string

Opcional. Es un filtro de metadatos que se aplica a los documentos y fragmentos recuperados de forma semántica.

topK integer

Opcional. Es la cantidad de fragmentos de recuperación semántica que se recuperarán.

Representación JSON
{
  "fileSearchStoreNames": [
    string
  ],
  "metadataFilter": string,
  "topK": integer
}

McpServer

Un MCPServer es un servidor al que puede llamar el modelo para realizar acciones. Es un servidor que implementa el protocolo de MCP. ID siguiente: 6

Campos
name string

Es el nombre del MCPServer.

transport Union type
Es el transporte que se usará para conectarse a MCPServer. transport puede ser una de las siguientes opciones:
streamableHttpTransport object (StreamableHttpTransport)

Es un transporte que puede transmitir solicitudes y respuestas HTTP.

Representación JSON
{
  "name": string,

  // transport
  "streamableHttpTransport": {
    object (StreamableHttpTransport)
  }
  // Union type
}

StreamableHttpTransport

Es un transporte que puede transmitir solicitudes y respuestas HTTP. ID siguiente: 6

Campos
url string

Es la URL completa del extremo de MCPServer. Ejemplo: "https://api.example.com/mcp"

headers map (key: string, value: string)

Opcional: Campos para encabezados de autenticación, tiempos de espera, etcétera, si es necesario.

Un objeto que contiene una lista de pares "key": value. Ejemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

timeout string (Duration format)

Es el tiempo de espera de HTTP para las operaciones normales.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

sseReadTimeout string (Duration format)

Es el tiempo de espera para las operaciones de lectura de SSE.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

terminateOnClose boolean

Indica si se debe cerrar la sesión del cliente cuando se cierra el transporte.

Representación JSON
{
  "url": string,
  "headers": {
    string: string,
    ...
  },
  "timeout": string,
  "sseReadTimeout": string,
  "terminateOnClose": boolean
}

GoogleMaps

Es la herramienta de Google Maps que proporciona contexto geoespacial para la búsqueda del usuario.

Campos
enableWidget boolean

Opcional. Indica si se debe devolver un token de contexto del widget en GroundingMetadata de la respuesta. Los desarrolladores pueden usar el token de contexto del widget para renderizar un widget de Google Maps con contexto geoespacial relacionado con los lugares a los que el modelo hace referencia en la respuesta.

Representación JSON
{
  "enableWidget": boolean
}

Recurso de REST: auth_tokens

Recurso: AuthToken

Es una solicitud para crear un token de autenticación efímero.

Campos
name string

Solo salida. Es el identificador. Es el token en sí.

expireTime string (Timestamp format)

Opcional. Solo entrada. Inmutable. Es un período opcional después del cual, cuando se usa el token resultante, se rechazarán los mensajes en las sesiones de BidiGenerateContent. (Gemini puede cerrar la sesión de forma preventiva después de este tiempo).

Si no se configura, el valor predeterminado es 30 minutos en el futuro. Si se configura, este valor debe ser inferior a 20 horas en el futuro.

Usa el formato RFC 3339, en el que el resultado generado siempre usará la normalización Z y los dígitos fraccionarios 0, 3, 6 o 9. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" o "2014-10-02T15:01:23+05:30".

newSessionExpireTime string (Timestamp format)

Opcional. Solo entrada. Inmutable. Es la fecha y hora después de las cuales se rechazarán las nuevas sesiones de la API de Live que usen el token resultante de esta solicitud.

Si no se configura, el valor predeterminado es 60 segundos en el futuro. Si se configura, este valor debe ser inferior a 20 horas en el futuro.

Usa el formato RFC 3339, en el que el resultado generado siempre usará la normalización Z y los dígitos fraccionarios 0, 3, 6 o 9. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" o "2014-10-02T15:01:23+05:30".

fieldMask string (FieldMask format)

Opcional. Solo entrada. Inmutable. Si fieldMask está vacío y bidiGenerateContentSetup no está presente, el mensaje BidiGenerateContentSetup efectivo se toma de la conexión de la API de Live.

Si fieldMask está vacío y bidiGenerateContentSetup está presente, el mensaje BidiGenerateContentSetup efectivo se toma por completo de bidiGenerateContentSetup en esta solicitud. Se ignora el mensaje de configuración de la conexión a la API de Live.

Si fieldMask no está vacío, los campos correspondientes de bidiGenerateContentSetup reemplazarán los campos del mensaje de configuración en la conexión de la API de Live.

Esta es una lista separada por comas de los nombres de campos totalmente calificados. Ejemplo: "user.displayName,photo".

config Union type
Es la configuración específica del método para el token resultante. config puede ser una de las siguientes opciones:
bidiGenerateContentSetup object (BidiGenerateContentSetup)

Opcional. Solo entrada. Inmutable. Es la configuración específica de BidiGenerateContent.

uses integer

Opcional. Solo entrada. Inmutable. Es la cantidad de veces que se puede usar el token. Si este valor es cero, no se aplica ningún límite. Reanudar una sesión de la API de Live no se considera un uso. Si no se especifica, el valor predeterminado es 1.

Representación JSON
{
  "name": string,
  "expireTime": string,
  "newSessionExpireTime": string,
  "fieldMask": string,

  // config
  "bidiGenerateContentSetup": {
    object (BidiGenerateContentSetup)
  }
  // Union type
  "uses": integer
}

BidiGenerateContentSetup

Es el mensaje que se enviará en el primer BidiGenerateContentClientMessage (y solo en el primero). Contiene la configuración que se aplicará durante la RPC de transmisión.

Los clientes deben esperar un mensaje de BidiGenerateContentSetupComplete antes de enviar mensajes adicionales.

Campos
model string

Obligatorio. Es el nombre del recurso del modelo. Este valor sirve como ID para que lo use el modelo.

Formato: models/{model}

generationConfig object (GenerationConfig)

Opcional. Es la configuración de generación.

Los siguientes campos no son compatibles:

  • responseLogprobs
  • responseMimeType
  • logprobs
  • responseSchema
  • responseJsonSchema
  • stop_sequence
  • skipResponseCache
  • routing_config
  • audio_timestamp
systemInstruction object (Content)

Opcional. Las instrucciones del sistema que proporcionó el usuario para el modelo.

Nota: Solo se debe usar texto en las partes y el contenido en cada parte debe encontrarse en un párrafo separado.

tools[] object (Tool)

Opcional. Es una lista de Tools que el modelo puede usar para generar la siguiente respuesta.

Una Tool es un fragmento de código que permite que el sistema interactúe con sistemas externos para realizar una acción, o un conjunto de acciones, fuera del conocimiento y del alcance del modelo.

realtimeInputConfig object (RealtimeInputConfig)

Opcional. Configura el procesamiento de la entrada en tiempo real.

sessionResumption object (SessionResumptionConfig)

Opcional. Configura el mecanismo de reanudación de sesión.

Si se incluye, el servidor enviará mensajes SessionResumptionUpdate.

contextWindowCompression object (ContextWindowCompressionConfig)

Opcional. Configura un mecanismo de compresión de la ventana de contexto.

Si se incluye, el servidor reducirá automáticamente el tamaño del contexto cuando supere la longitud configurada.

inputAudioTranscription object (AudioTranscriptionConfig)

Opcional. Si se configura, habilita la transcripción de la entrada de voz. La transcripción se alinea con el idioma del audio de entrada, si está configurado.

outputAudioTranscription object (AudioTranscriptionConfig)

Opcional. Si se configura, habilita la transcripción de la salida de audio del modelo. Si se configura, la transcripción se alinea con el código de idioma especificado para el audio de salida.

historyConfig object (HistoryConfig)

Opcional. Configura el intercambio de historial entre el cliente y el servidor.

Representación JSON
{
  "model": string,
  "generationConfig": {
    object (GenerationConfig)
  },
  "systemInstruction": {
    object (Content)
  },
  "tools": [
    {
      object (Tool)
    }
  ],
  "realtimeInputConfig": {
    object (RealtimeInputConfig)
  },
  "sessionResumption": {
    object (SessionResumptionConfig)
  },
  "contextWindowCompression": {
    object (ContextWindowCompressionConfig)
  },
  "inputAudioTranscription": {
    object (AudioTranscriptionConfig)
  },
  "outputAudioTranscription": {
    object (AudioTranscriptionConfig)
  },
  "historyConfig": {
    object (HistoryConfig)
  }
}

GenerationConfig

Son las opciones de configuración para la generación y los resultados del modelo. No todos los parámetros se pueden configurar para todos los modelos.

Campos
stopSequences[] string

Opcional. Es el conjunto de secuencias de caracteres (hasta 5) que detendrán la generación de resultados. Si se especifica, la API se detendrá en la primera aparición de un stop_sequence. La secuencia de detención no se incluirá como parte de la respuesta.

responseMimeType string

Opcional. Tipo de MIME del texto candidato generado. Los tipos de MIME admitidos son los siguientes: text/plain: (predeterminado) Es la salida de texto. application/json: La respuesta JSON en los candidatos de respuesta. text/x.enum: ENUM como respuesta de cadena en los candidatos de respuesta. Consulta los documentos para obtener una lista de todos los tipos de MIME de texto admitidos.

responseSchema
(deprecated)
object (Schema)

Opcional. Es el esquema de salida del texto candidato generado. Los esquemas deben ser un subconjunto del esquema de OpenAPI y pueden ser objetos, primitivos o arrays.

Si se establece, también se debe establecer un responseMimeType compatible. Tipos de MIME compatibles: application/json: Esquema para la respuesta JSON. Consulta la guía de generación de texto en JSON para obtener más detalles.

_responseJsonSchema
(deprecated)
value (Value format)

Opcional. Esquema de salida de la respuesta generada. Esta es una alternativa a responseSchema que acepta esquemas JSON.

Si se configura, se debe omitir responseSchema, pero responseMimeType es obligatorio.

Si bien se puede enviar el esquema JSON completo, no se admiten todas las funciones. Específicamente, solo se admiten las siguientes propiedades:

  • $id
  • $defs
  • $ref
  • $anchor
  • type
  • format
  • title
  • description
  • enum (para cadenas y números)
  • items
  • prefixItems
  • minItems
  • maxItems
  • minimum
  • maximum
  • anyOf
  • oneOf (se interpreta igual que anyOf)
  • properties
  • additionalProperties
  • required

También se puede establecer la propiedad no estándar propertyOrdering.

Las referencias cíclicas se despliegan hasta un cierto grado y, como tales, solo se pueden usar dentro de propiedades no obligatorias. (Las propiedades que admiten valores nulos no son suficientes). Si $ref se establece en un subesquema, no se pueden establecer otras propiedades, excepto las que comienzan con $.

responseJsonSchema value (Value format)

Opcional. Es un detalle interno. Usa responseJsonSchema en lugar de este campo.

responseModalities[] enum (Modality)

Opcional. Son las modalidades solicitadas de la respuesta. Representa el conjunto de modalidades que el modelo puede devolver y que se deben esperar en la respuesta. Esta es una coincidencia exacta con las modalidades de la respuesta.

Un modelo puede tener varias combinaciones de modalidades admitidas. Si las modalidades solicitadas no coinciden con ninguna de las combinaciones admitidas, se devolverá un error.

Una lista vacía equivale a solicitar solo texto.

candidateCount integer

Opcional. Es la cantidad de respuestas generadas que se devolverán. Si no se configura, el valor predeterminado será 1. Ten en cuenta que esto no funciona para los modelos de generaciones anteriores (familia de Gemini 1.0).

maxOutputTokens integer

Opcional. Es la cantidad máxima de tokens que se pueden incluir en un candidato de respuesta.

Nota: El valor predeterminado varía según el modelo. Consulta el atributo Model.output_token_limit del objeto Model que se muestra desde la función getModel.

temperature number

Opcional. Controla la aleatoriedad del resultado.

Nota: El valor predeterminado varía según el modelo. Consulta el atributo Model.temperature del objeto Model que se muestra desde la función getModel.

Los valores pueden variar de [0.0, 2.0].

topP number

Opcional. Es la probabilidad acumulativa máxima de los tokens que se deben tener en cuenta durante el muestreo.

El modelo utiliza un muestreo combinado de Top-K y Top-P (núcleo).

Los tokens se ordenan según las probabilidades asignadas para que solo se tengan en cuenta los tokens más probables. El muestreo Top-K limita directamente la cantidad máxima de tokens que se deben considerar, mientras que el muestreo de núcleo limita la cantidad de tokens según la probabilidad acumulativa.

Nota: El valor predeterminado varía según Model y se especifica con el atributo Model.top_p que devuelve la función getModel. Un atributo topK vacío indica que el modelo no aplica el muestreo top-k y no permite establecer topK en las solicitudes.

topK integer

Opcional. Es la cantidad máxima de tokens que se deben tener en cuenta al muestrear.

Los modelos de Gemini usan el muestreo Top-p (de núcleo) o una combinación de muestreo Top-k y de núcleo. El muestreo de Top-k considera el conjunto de los tokens más probables de topK. Los modelos que se ejecutan con el muestreo de núcleo no permiten el parámetro de configuración topK.

Nota: El valor predeterminado varía según Model y se especifica con el atributo Model.top_p que devuelve la función getModel. Un atributo topK vacío indica que el modelo no aplica el muestreo top-k y no permite establecer topK en las solicitudes.

seed integer

Opcional. Es la semilla que se usa en la decodificación. Si no se establece, la solicitud usa una semilla generada de forma aleatoria.

presencePenalty number

Opcional. Es la penalización de presencia que se aplica a las probabilidades de registro del siguiente token si ya se vio en la respuesta.

Esta penalización es binaria (activada o desactivada) y no depende de la cantidad de veces que se usa el token (después de la primera). Usa frequencyPenalty para una penalización que aumenta con cada uso.

Una penalización positiva desalentará el uso de tokens que ya se usaron en la respuesta, lo que aumentará el vocabulario.

Una penalización negativa fomentará el uso de tokens que ya se usaron en la respuesta, lo que reducirá el vocabulario.

frequencyPenalty number

Opcional. Es la penalización de frecuencia aplicada a las probabilidades logarítmicas del siguiente token, multiplicada por la cantidad de veces que se vio cada token en la respuesta hasta el momento.

Una penalización positiva desalentará el uso de tokens que ya se usaron, de forma proporcional a la cantidad de veces que se usó el token: Cuanto más se use un token, más difícil será para el modelo volver a usarlo, lo que aumentará el vocabulario de las respuestas.

Precaución: Una penalización negativa alentará al modelo a reutilizar tokens de forma proporcional a la cantidad de veces que se usó el token. Los valores negativos pequeños reducirán el vocabulario de una respuesta. Los valores negativos más grandes harán que el modelo comience a repetir un token común hasta que alcance el límite de maxOutputTokens.

responseLogprobs boolean

Opcional. Si es verdadero, exporta los resultados de logprobs en la respuesta.

logprobs integer

Opcional. Solo es válido si responseLogprobs=True. Esto establece la cantidad de logprobs principales, incluido el candidato elegido, que se devolverán en cada paso de decodificación en Candidate.logprobs_result. El número debe estar en el rango de [0, 20].

enableEnhancedCivicAnswers boolean

Opcional. Habilita las respuestas cívicas mejoradas. Es posible que no esté disponible para todos los modelos.

speechConfig object (SpeechConfig)

Opcional. Es la configuración de generación de voz.

thinkingConfig object (ThinkingConfig)

Opcional. Es la configuración de las funciones de pensamiento. Se devolverá un error si este campo se configura para modelos que no admiten el pensamiento.

imageConfig object (ImageConfig)

Opcional. Es la configuración para la generación de imágenes. Se mostrará un error si este campo se configura para modelos que no admiten estas opciones de configuración.

mediaResolution enum (MediaResolution)

Opcional. Si se especifica, se usará la resolución de medios especificada.

enableAffectiveDialog boolean

Opcional. Si está habilitada, el modelo detectará emociones y adaptará sus respuestas en consecuencia.

responseFormat object (ResponseFormatConfig)

Opcional. Es la configuración del formato de salida de la respuesta. Permite especificar la configuración de salida por modalidad (texto, audio, imagen) en una estructura plana.

translationConfig object (TranslationConfig)

Opcional. Es la configuración de la traducción.

audioTranscriptionConfig object (AudioTranscriptionConfig)

Opcional. Es la configuración para la transcripción de audio (reconocimiento de voz).

Representación JSON
{
  "stopSequences": [
    string
  ],
  "responseMimeType": string,
  "responseSchema": {
    object (Schema)
  },
  "_responseJsonSchema": value,
  "responseJsonSchema": value,
  "responseModalities": [
    enum (Modality)
  ],
  "candidateCount": integer,
  "maxOutputTokens": integer,
  "temperature": number,
  "topP": number,
  "topK": integer,
  "seed": integer,
  "presencePenalty": number,
  "frequencyPenalty": number,
  "responseLogprobs": boolean,
  "logprobs": integer,
  "enableEnhancedCivicAnswers": boolean,
  "speechConfig": {
    object (SpeechConfig)
  },
  "thinkingConfig": {
    object (ThinkingConfig)
  },
  "imageConfig": {
    object (ImageConfig)
  },
  "mediaResolution": enum (MediaResolution),
  "enableAffectiveDialog": boolean,
  "responseFormat": {
    object (ResponseFormatConfig)
  },
  "translationConfig": {
    object (TranslationConfig)
  },
  "audioTranscriptionConfig": {
    object (AudioTranscriptionConfig)
  }
}

Modalidad

Son las modalidades admitidas de la respuesta.

Enums
MODALITY_UNSPECIFIED Valor predeterminado
TEXT Indica que el modelo debe devolver texto.
IMAGE Indica que el modelo debe devolver imágenes.
AUDIO Indica que el modelo debe devolver audio.

SpeechConfig

Es la configuración para la generación y transcripción de voz.

Campos
voiceConfig object (VoiceConfig)

Es la configuración en caso de salida de una sola voz.

multiSpeakerVoiceConfig object (MultiSpeakerVoiceConfig)

Opcional. Es la configuración para la configuración de varios altavoces. Se excluye mutuamente con el campo voiceConfig.

languageCode string

Opcional. Es el código de idioma BCP-47 del IETF que el usuario configuró para que use la app. Se usa para el reconocimiento y la síntesis de voz.

Los valores válidos son: de-DE, en-AU, en-GB, en-IN, en-US, es-US, fr-FR, hi-IN, pt-BR, ar-XA, es-ES, fr-CA, id-ID, it-IT, ja-JP, tr-TR, vi-VN, bn-IN, gu-IN, kn-IN, ml-IN, mr-IN, ta-IN, te-IN, nl-NL, ko-KR, cmn-CN, pl-PL, ru-RU y th-TH.

Representación JSON
{
  "voiceConfig": {
    object (VoiceConfig)
  },
  "multiSpeakerVoiceConfig": {
    object (MultiSpeakerVoiceConfig)
  },
  "languageCode": string
}

VoiceConfig

Es la configuración de la voz que se usará.

Campos
voice_config Union type
Es la configuración que usará la bocina. voice_config puede ser una de las siguientes opciones:
prebuiltVoiceConfig object (PrebuiltVoiceConfig)

Es la configuración de la voz prediseñada que se usará.

Representación JSON
{

  // voice_config
  "prebuiltVoiceConfig": {
    object (PrebuiltVoiceConfig)
  }
  // Union type
}

PrebuiltVoiceConfig

Es la configuración del altavoz prediseñado que se usará.

Campos
voiceName string

Es el nombre de la voz predeterminada que se usará.

Representación JSON
{
  "voiceName": string
}

MultiSpeakerVoiceConfig

Es la configuración para la configuración de varios altavoces.

Campos
speakerVoiceConfigs[] object (SpeakerVoiceConfig)

Obligatorio. Son todas las voces de bocina habilitadas.

Representación JSON
{
  "speakerVoiceConfigs": [
    {
      object (SpeakerVoiceConfig)
    }
  ]
}

SpeakerVoiceConfig

Es la configuración de una sola bocina en una configuración de varias bocinas.

Campos
speaker string

Obligatorio. Es el nombre del orador que se usará. Debe ser igual que en la instrucción.

voiceConfig object (VoiceConfig)

Obligatorio. Es la configuración de la voz que se usará.

Representación JSON
{
  "speaker": string,
  "voiceConfig": {
    object (VoiceConfig)
  }
}

ThinkingConfig

Es la configuración de las funciones de pensamiento.

Campos
includeThoughts boolean

Indica si se deben incluir pensamientos en la respuesta. Si es verdadero, los pensamientos solo se devuelven cuando están disponibles.

thinkingBudget integer

Es la cantidad de tokens de pensamiento que debe generar el modelo.

thinkingLevel enum (ThinkingLevel)

Opcional. Controla la profundidad máxima del proceso de razonamiento interno del modelo antes de que produzca una respuesta. El valor predeterminado depende del modelo. Consulta la guía de niveles de pensamiento para obtener más detalles. Se recomienda para modelos de Gemini 3 o versiones posteriores. Si se usa con modelos anteriores, se produce un error.

Representación JSON
{
  "includeThoughts": boolean,
  "thinkingBudget": integer,
  "thinkingLevel": enum (ThinkingLevel)
}

ThinkingLevel

Permite que el usuario especifique cuánto pensar usando un enum en lugar de un presupuesto entero.

Enums
THINKING_LEVEL_UNSPECIFIED Valor predeterminado
MINIMAL Poco o nada de pensamiento.
LOW Nivel de pensamiento bajo.
MEDIUM Nivel de razonamiento medio.
HIGH Nivel de razonamiento alto.

ImageConfig

Es la configuración de las funciones de generación de imágenes.

Campos
aspectRatio string

Opcional. Es la relación de aspecto de la imagen que se generará. Relaciones de aspecto admitidas: 1:1, 1:4, 4:1, 1:8, 8:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 o 21:9.

Si no se especifica, el modelo elegirá una relación de aspecto predeterminada en función de las imágenes de referencia proporcionadas.

imageSize string

Opcional. Especifica el tamaño de las imágenes generadas. Los valores admitidos son 512, 1K, 2K y 4K. Si no se especifica, el modelo usará el valor predeterminado 1K.

Representación JSON
{
  "aspectRatio": string,
  "imageSize": string
}

MediaResolution

Resolución de medios para los medios de entrada.

Enums
MEDIA_RESOLUTION_UNSPECIFIED No se estableció la resolución de contenido multimedia.
MEDIA_RESOLUTION_LOW La resolución de los medios se estableció en baja (64 tokens).
MEDIA_RESOLUTION_MEDIUM La resolución de medios se establece en media (256 tokens).
MEDIA_RESOLUTION_HIGH La resolución de los medios está configurada en alta (reencuadre con zoom con 256 tokens).

ResponseFormatConfig

Es la configuración del formato de salida de la respuesta. Es un objeto plano en el que cada campo secundario opcional configura una modalidad de salida específica.

Campos
text object (TextResponseFormat)

Opcional. Es la configuración del formato de salida de texto.

audio object (AudioResponseFormat)

Opcional. Es la configuración del formato de salida de audio.

image object (ImageResponseFormat)

Opcional. Es la configuración del formato de salida de la imagen.

Representación JSON
{
  "text": {
    object (TextResponseFormat)
  },
  "audio": {
    object (AudioResponseFormat)
  },
  "image": {
    object (ImageResponseFormat)
  }
}

TextResponseFormat

Es la configuración del formato de salida de texto.

Campos
mimeType enum (MimeType)

Opcional. Es el tipo de MIME del texto de salida.

schema value (Value format)

Opcional. Es el esquema JSON al que debe ajustarse el resultado. Solo se aplica cuando mimeType es APPLICATION_JSON.

Representación JSON
{
  "mimeType": enum (MimeType),
  "schema": value
}

MimeType

Son los tipos de MIME admitidos para la salida de texto.

Enums
MIME_TYPE_UNSPECIFIED Valor predeterminado Este valor no se usa.
APPLICATION_JSON Es el formato de salida JSON.
TEXT_PLAIN Formato de salida de texto sin formato.

AudioResponseFormat

Es la configuración del formato de salida de audio.

Campos
mimeType enum (MimeType)

Opcional. Es el tipo de MIME de la salida de audio.

delivery enum (Delivery)

Opcional. Es el modo de entrega de la salida de audio.

sampleRate integer

Opcional. Es la tasa de muestreo en Hz.

bitRate integer

Opcional. Es la tasa de bits en bits por segundo (bps). Solo se aplica a los formatos comprimidos (MP3 y Opus).

Representación JSON
{
  "mimeType": enum (MimeType),
  "delivery": enum (Delivery),
  "sampleRate": integer,
  "bitRate": integer
}

MimeType

Son los tipos de MIME admitidos para la salida de audio.

Enums
MIME_TYPE_UNSPECIFIED Valor predeterminado Este valor no se usa.
AUDIO_MP3 Formato de audio MP3
AUDIO_OGG_OPUS Formato de audio OGG Opus.
AUDIO_L16 Formato de audio PCM sin procesar (L16).
AUDIO_WAV Formato de audio WAV.
AUDIO_ALAW Es un formato de audio A-law.
AUDIO_MULAW Formato de audio Mu-law.

Entrega

Es el modo de entrega de la salida de audio.

Enums
DELIVERY_UNSPECIFIED Valor predeterminado Este valor no se usa.
INLINE Los datos de audio se devuelven de forma intercalada en la respuesta.
URI Los datos de audio se devuelven como un URI.

ImageResponseFormat

Es la configuración del formato de salida de la imagen.

Campos
mimeType enum (MimeType)

Opcional. Es el tipo de MIME de la imagen de salida.

delivery enum (Delivery)

Opcional. Es el modo de entrega de la imagen de salida.

aspectRatio enum (AspectRatio)

Opcional. Es la relación de aspecto de la imagen de salida.

imageSize enum (ImageSize)

Opcional. Es el tamaño de la imagen de salida.

Representación JSON
{
  "mimeType": enum (MimeType),
  "delivery": enum (Delivery),
  "aspectRatio": enum (AspectRatio),
  "imageSize": enum (ImageSize)
}

MimeType

Tipos de MIME admitidos para la salida de imágenes.

Enums
MIME_TYPE_UNSPECIFIED Valor predeterminado Este valor no se usa.
IMAGE_JPEG Formato de imagen JPEG.

Entrega

Es el modo de entrega para la salida de imágenes.

Enums
DELIVERY_UNSPECIFIED Valor predeterminado Este valor no se usa.
INLINE Los datos de la imagen se devuelven intercalados en la respuesta.
URI Los datos de la imagen se devuelven como un URI.

AspectRatio

Son las relaciones de aspecto compatibles para la salida de imágenes.

Enums
ASPECT_RATIO_UNSPECIFIED Valor predeterminado Este valor no se usa.
ASPECT_RATIO_ONE_BY_ONE Relación de aspecto de 1:1.
ASPECT_RATIO_TWO_BY_THREE Relación de aspecto de 2:3
ASPECT_RATIO_THREE_BY_TWO Relación de aspecto de 3:2
ASPECT_RATIO_THREE_BY_FOUR Relación de aspecto de 3:4
ASPECT_RATIO_FOUR_BY_THREE Relación de aspecto de 4:3
ASPECT_RATIO_FOUR_BY_FIVE Relación de aspecto de 4:5
ASPECT_RATIO_FIVE_BY_FOUR Relación de aspecto de 5:4
ASPECT_RATIO_NINE_BY_SIXTEEN Relación de aspecto de 9:16
ASPECT_RATIO_SIXTEEN_BY_NINE Relación de aspecto de 16:9
ASPECT_RATIO_TWENTY_ONE_BY_NINE Relación de aspecto de 21:9
ASPECT_RATIO_ONE_BY_EIGHT Relación de aspecto de 1:8.
ASPECT_RATIO_EIGHT_BY_ONE Relación de aspecto de 8:1.
ASPECT_RATIO_ONE_BY_FOUR Relación de aspecto de 1:4.
ASPECT_RATIO_FOUR_BY_ONE Relación de aspecto de 4:1.

ImageSize

Son los tamaños de imagen admitidos para la salida de imágenes.

Enums
IMAGE_SIZE_UNSPECIFIED Valor predeterminado Este valor no se usa.
IMAGE_SIZE_FIVE_TWELVE Tamaño de la imagen de 512 px
IMAGE_SIZE_ONE_K Tamaño de la imagen de 1K
IMAGE_SIZE_TWO_K Tamaño de la imagen 2K.
IMAGE_SIZE_FOUR_K Tamaño de la imagen en 4K

TranslationConfig

Es la configuración de las funciones de traducción.

Campos
targetLanguageCode string

Obligatorio. Es el idioma de destino de la traducción. Los valores admitidos son códigos de idioma BCP-47 (p.ej., "en", "es", "fr").

echoTargetLanguage boolean

Opcional. Si es verdadero, el modelo generará audio cuando se hable el idioma objetivo, es decir, repetirá la entrada. Si es falso, no produciremos audio para el idioma de destino.

Representación JSON
{
  "targetLanguageCode": string,
  "echoTargetLanguage": boolean
}

AudioTranscriptionConfig

Es la configuración de la transcripción de audio.

Campos
languageCodes[] string

Opcional. Son códigos de idioma BCP-47 que proporcionan sugerencias sobre los idiomas presentes en el audio. Si se omite o está vacío, se usa la detección automática de idioma de forma predeterminada.

adaptationPhrases[]
(deprecated)
string

Opcional. Es una lista de frases que se usan para la adaptación del discurso, lo que sesga el modelo de RAA para mejorar el reconocimiento de estos términos específicos.

customVocabulary[] string

Opcional. Es una lista de frases del vocabulario personalizado para sesgar el modelo de reconocimiento de voz hacia el reconocimiento de términos específicos (nombres de productos, nombres propios, jerga).

wordTimestamp boolean

Opcional. Configura la generación de marcas de tiempo a nivel de la palabra.

diarization boolean

Opcional. Configura la identificación de interlocutores.

language_config Union type
Obsoleto: Usa language_codes de nivel superior en su lugar. language_config puede ser solo uno de los parámetros siguientes:
languageAuto
(deprecated)
object (LanguageAuto)

Opcional. El modelo detectará el idioma automáticamente.

languageHints
(deprecated)
object (LanguageHints)

Opcional. Especifica uno o más idiomas en el audio.

Representación JSON
{
  "languageCodes": [
    string
  ],
  "adaptationPhrases": [
    string
  ],
  "customVocabulary": [
    string
  ],
  "wordTimestamp": boolean,
  "diarization": boolean,

  // language_config
  "languageAuto": {
    object (LanguageAuto)
  },
  "languageHints": {
    object (LanguageHints)
  }
  // Union type
}

LanguageAuto

Este tipo no tiene campos.

Indica que el idioma del audio se debe detectar automáticamente.

LanguageHints

Proporciona sugerencias al modelo sobre los posibles idiomas presentes en el audio.

Campos
languageCodes[]
(deprecated)
string

Obligatorio. Son códigos de idioma BCP-47.

Representación JSON
{
  "languageCodes": [
    string
  ]
}

RealtimeInputConfig

Configura el comportamiento de entrada en tiempo real en BidiGenerateContent.

Campos
automaticActivityDetection object (AutomaticActivityDetection)

Opcional. Si no se configura, la detección automática de actividad se habilita de forma predeterminada. Si la detección de voz automática está inhabilitada, el cliente debe enviar indicadores de actividad.

activityHandling enum (ActivityHandling)

Opcional. Define qué efecto tiene la actividad.

turnCoverage enum (TurnCoverage)

Opcional. Define qué entrada se incluye en el turno del usuario.

Representación JSON
{
  "automaticActivityDetection": {
    object (AutomaticActivityDetection)
  },
  "activityHandling": enum (ActivityHandling),
  "turnCoverage": enum (TurnCoverage)
}

AutomaticActivityDetection

Configura la detección automática de actividad.

Campos
disabled boolean

Opcional. Si está habilitado (configuración predeterminada), la voz detectada y la entrada de texto se consideran actividad. Si está inhabilitado, el cliente debe enviar indicadores de actividad.

startOfSpeechSensitivity enum (StartSensitivity)

Opcional. Determina la probabilidad de que se detecte el habla.

prefixPaddingMs integer

Opcional. Es la duración requerida del habla detectada antes de que se confirme el inicio del habla. Cuanto más bajo sea este valor, más sensible será la detección del inicio del habla y se podrá reconocer el habla más breve. Sin embargo, esto también aumenta la probabilidad de falsos positivos.

endOfSpeechSensitivity enum (EndSensitivity)

Opcional. Determina la probabilidad de que haya finalizado el discurso detectado.

silenceDurationMs integer

Opcional. Es la duración requerida del audio sin voz detectado (p.ej., silencio) antes de que se confirme el final del discurso. Cuanto mayor sea este valor, más largos podrán ser los espacios de silencio sin interrumpir la actividad del usuario, pero esto aumentará la latencia del modelo.

Representación JSON
{
  "disabled": boolean,
  "startOfSpeechSensitivity": enum (StartSensitivity),
  "prefixPaddingMs": integer,
  "endOfSpeechSensitivity": enum (EndSensitivity),
  "silenceDurationMs": integer
}

StartSensitivity

Determina cómo se detecta el inicio del habla.

Enums
START_SENSITIVITY_UNSPECIFIED El valor predeterminado es START_SENSITIVITY_HIGH.
START_SENSITIVITY_HIGH La detección automática detectará el inicio del habla con mayor frecuencia.
START_SENSITIVITY_LOW La detección automática detectará el inicio del habla con menor frecuencia.

EndSensitivity

Determina cómo se detecta el final del discurso.

Enums
END_SENSITIVITY_UNSPECIFIED El valor predeterminado es END_SENSITIVITY_HIGH.
END_SENSITIVITY_HIGH La detección automática finaliza el discurso con mayor frecuencia.
END_SENSITIVITY_LOW La detección automática finaliza el discurso con menos frecuencia.

ActivityHandling

Las diferentes formas de controlar la actividad del usuario

Enums
ACTIVITY_HANDLING_UNSPECIFIED Si no se especifica, el comportamiento predeterminado es START_OF_ACTIVITY_INTERRUPTS.
START_OF_ACTIVITY_INTERRUPTS Si es verdadero, el inicio de la actividad interrumpirá la respuesta del modelo (también llamado "interrupción"). La respuesta actual del modelo se cortará en el momento de la interrupción. Este es el comportamiento predeterminado.
NO_INTERRUPTION No se interrumpirá la respuesta del modelo.

TurnCoverage

Son las opciones sobre qué entrada se incluye en el turno del usuario.

Enums
TURN_COVERAGE_UNSPECIFIED Si no se especifica, se selecciona un comportamiento predeterminado según el modelo. Por ejemplo, para Gemini 2.5, el valor predeterminado es TURN_INCLUDES_ONLY_ACTIVITY, mientras que para Gemini 3.1 y versiones posteriores, es TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO.
TURN_INCLUDES_ONLY_ACTIVITY Incluye la actividad desde el último turno, sin incluir la inactividad (p.ej., silencio en la transmisión de audio).
TURN_INCLUDES_ALL_INPUT Incluye todas las entradas en tiempo real desde el último turno, incluida la inactividad (p.ej., silencio en la transmisión de audio).
TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO Incluye la actividad de audio y todos los videos desde el último turno. Con la detección automática de actividad, la actividad de audio significa voz y excluye el silencio.

SessionResumptionConfig

Es la configuración de reanudación de sesión.

Este mensaje se incluye en la configuración de la sesión como BidiGenerateContentSetup.session_resumption. Si se configura, el servidor enviará mensajes de SessionResumptionUpdate.

Campos
handle string

Es el identificador de una sesión anterior. Si no está presente, se crea una sesión nueva.

Los identificadores de sesión provienen de los valores de SessionResumptionUpdate.token en conexiones anteriores.

Representación JSON
{
  "handle": string
}

ContextWindowCompressionConfig

Habilita la compresión de la ventana de contexto, un mecanismo para administrar la ventana de contexto del modelo de modo que no exceda una longitud determinada.

Campos
compression_mechanism Union type
Es el mecanismo de compresión de la ventana de contexto que se usa. compression_mechanism puede ser una de las siguientes opciones:
slidingWindow object (SlidingWindow)

Un mecanismo de ventana deslizante

triggerTokens string (int64 format)

Es la cantidad de tokens (antes de ejecutar un turno) que se requieren para activar la compresión de la ventana de contexto.

Esto se puede usar para equilibrar la calidad con la latencia, ya que las ventanas de contexto más cortas pueden generar respuestas más rápidas del modelo. Sin embargo, cualquier operación de compresión provocará un aumento temporal de la latencia, por lo que no se deben activar con frecuencia.

Si no se establece, el valor predeterminado es el 80% del límite de la ventana de contexto del modelo. Esto deja un 20% para la próxima solicitud del usuario o respuesta del modelo.

Representación JSON
{

  // compression_mechanism
  "slidingWindow": {
    object (SlidingWindow)
  }
  // Union type
  "triggerTokens": string
}

SlidingWindow

El método SlidingWindow descarta el contenido al principio de la ventana de contexto. El contexto resultante siempre comenzará al inicio de un turno de rol de USER. Las instrucciones del sistema y cualquier BidiGenerateContentSetup.prefix_turns siempre permanecerán al principio del resultado.

Campos
targetTokens string (int64 format)

Es la cantidad objetivo de tokens que se deben conservar. El valor predeterminado es triggerTokens/2.

Descartar partes de la ventana de contexto provoca un aumento temporal de la latencia, por lo que este valor debe calibrarse para evitar operaciones de compresión frecuentes.

Representación JSON
{
  "targetTokens": string
}

HistoryConfig

Es la configuración del historial.

Este mensaje se incluye en la configuración de la sesión como BidiGenerateContentSetup.history_config. Configura el intercambio de mensajes del historial.

Campos
initialHistoryInClientContent boolean

Opcional. Si es verdadero, después de enviar setupComplete, el servidor esperará y, primero, procesará los mensajes clientContent hasta que turnComplete sea true. Este historial inicial no activará una llamada al modelo y puede finalizar con el rol MODEL. Después de que turnComplete es true, el cliente puede iniciar la conversación en tiempo real a través de realtimeInput.

Representación JSON
{
  "initialHistoryInClientContent": boolean
}

Método: auth_tokens.create

Crea un token que se puede usar para restringir el comportamiento de una sesión de BidiGenerateContent.

Extremo

post https://generativelanguage.googleapis.com/v1beta/auth_tokens

Cuerpo de la solicitud

El cuerpo de la solicitud contiene una instancia de AuthToken.

Campos
expireTime string (Timestamp format)

Opcional. Solo entrada. Inmutable. Es un período opcional después del cual, cuando se usa el token resultante, se rechazarán los mensajes en las sesiones de BidiGenerateContent. (Gemini puede cerrar la sesión de forma preventiva después de este tiempo).

Si no se configura, el valor predeterminado es 30 minutos en el futuro. Si se configura, este valor debe ser inferior a 20 horas en el futuro.

Usa el formato RFC 3339, en el que el resultado generado siempre usará la normalización Z y los dígitos fraccionarios 0, 3, 6 o 9. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" o "2014-10-02T15:01:23+05:30".

newSessionExpireTime string (Timestamp format)

Opcional. Solo entrada. Inmutable. Es la fecha y hora después de las cuales se rechazarán las nuevas sesiones de la API de Live que usen el token resultante de esta solicitud.

Si no se configura, el valor predeterminado es 60 segundos en el futuro. Si se configura, este valor debe ser inferior a 20 horas en el futuro.

Usa el formato RFC 3339, en el que el resultado generado siempre usará la normalización Z y los dígitos fraccionarios 0, 3, 6 o 9. También se aceptan otras compensaciones que no sean “Z”. Ejemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" o "2014-10-02T15:01:23+05:30".

fieldMask string (FieldMask format)

Opcional. Solo entrada. Inmutable. Si fieldMask está vacío y bidiGenerateContentSetup no está presente, el mensaje BidiGenerateContentSetup efectivo se toma de la conexión de la API de Live.

Si fieldMask está vacío y bidiGenerateContentSetup está presente, el mensaje BidiGenerateContentSetup efectivo se toma por completo de bidiGenerateContentSetup en esta solicitud. Se ignora el mensaje de configuración de la conexión a la API de Live.

Si fieldMask no está vacío, los campos correspondientes de bidiGenerateContentSetup reemplazarán los campos del mensaje de configuración en la conexión de la API de Live.

Esta es una lista separada por comas de los nombres de campos totalmente calificados. Ejemplo: "user.displayName,photo".

config Union type
Es la configuración específica del método para el token resultante. config puede ser una de las siguientes opciones:
bidiGenerateContentSetup object (BidiGenerateContentSetup)

Opcional. Solo entrada. Inmutable. Es la configuración específica de BidiGenerateContent.

uses integer

Opcional. Solo entrada. Inmutable. Es la cantidad de veces que se puede usar el token. Si este valor es cero, no se aplica ningún límite. Reanudar una sesión de la API de Live no se considera un uso. Si no se especifica, el valor predeterminado es 1.

Cuerpo de la respuesta

Si el proceso se realiza de forma correcta, el cuerpo de la respuesta contiene una instancia recién creada de AuthToken.