Generating content

Gemini API は、画像、音声、コード、ツールなどを使用したコンテンツ生成をサポートしています。各機能の詳細については、このまま読み進めてタスクに焦点を当てたサンプルコードを確認するか、包括的なガイドをご覧ください。

メソッド: models.generateContent

入力 GenerateContentRequest に基づいてモデル レスポンスを生成します。使用方法の詳細については、テキスト生成ガイドをご覧ください。入力機能は、チューニングされたモデルを含むモデルによって異なります。詳しくは、モデルガイドとチューニング ガイドをご覧ください。

エンドポイント

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

パスパラメータ

model string

必須。補完の生成に使用する Model の名前。

形式: models/{model}。形式は models/{model} です。

リクエストの本文

リクエストの本文には、次の構造のデータが含まれます。

フィールド
contents[] object (Content)

必須。モデルとの現在の会話の内容。

シングルターン クエリの場合、単一のインスタンスです。チャットなどのマルチターン クエリの場合、これは会話履歴と最新のリクエストを含む繰り返しフィールドです。

tools[] object (Tool)

省略可。Model が次のレスポンスの生成に使用できる Tools のリスト。

Tool は、システムが外部システムと対話して、Model の知識や範囲外のアクションまたは一連のアクションを実行できるようにするコードです。サポートされている Tool は Function と codeExecution です。詳細については、関数呼び出しとコード実行のガイドをご覧ください。

toolConfig object (ToolConfig)

省略可。リクエストで指定された Tool のツール構成。使用例については、関数呼び出しガイドをご覧ください。

safetySettings[] object (SafetySetting)

省略可。安全でないコンテンツをブロックするための一意の SafetySetting インスタンスのリスト。

この要件は GenerateContentRequest.contents と GenerateContentResponse.candidates から適用されます。SafetyCategory タイプごとに複数の設定を指定することはできません。これらの設定で指定されたしきい値を満たさないコンテンツやレスポンスは、API によってブロックされます。このリストは、safetySettings で指定された各 SafetyCategory のデフォルト設定をオーバーライドします。リストに指定された SafetyCategory に SafetySetting がない場合、API はそのカテゴリのデフォルトの安全性設定を使用します。有害カテゴリ HARM_CATEGORY_HATE_SPEECH、HARM_CATEGORY_SEXUALLY_EXPLICIT、HARM_CATEGORY_DANGEROUS_CONTENT、HARM_CATEGORY_HARASSMENT、HARM_CATEGORY_CIVIC_INTEGRITY、HARM_CATEGORY_JAILBREAK がサポートされています。利用可能な安全性設定の詳細については、ガイドをご覧ください。また、安全に関するガイダンスを参照して、AI アプリケーションに安全に関する考慮事項を組み込む方法を確認してください。

continuationToken string (bytes format)

省略可。finishReason が CONTINUATION に設定されて停止した以前の models.generateContent または models.streamGenerateContent レスポンスから生成を再開するために使用される不透明な継続トークン。contents は必須であり、リクエストで継続トークンが指定されている場合は、最初のリクエストのプロンプトと会話履歴を完全に複製する必要があります。

Base64 でエンコードされた文字列。

labels map (key: string, value: string)

省略可。リクエストのユーザー定義のメタデータを含むラベル。

省略可。ラベルは、標準の統合 Cloud ラベルの要件に従う必要があります。- ラベルキーの先頭は英字にする必要があります。- ラベルのキーと値は 63 文字(Unicode コードポイント)以下にする必要があります。使用できるのは小文字、数字、アンダースコア、ダッシュのみです。- 国際文字も使用できます。

使用方法: - アグリゲータの安全識別子: キー safety_identifier(例: {"safety_identifier": "user_session_123"})を使用します。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

systemInstruction object (Content)

省略可。デベロッパーが設定したシステム指示。現時点ではテキストのみ。

generationConfig object (GenerationConfig)

省略可。モデルの生成と出力の構成オプション。

cachedContent string

省略可。予測を提供するためにコンテキストとして使用される、キャッシュに保存されたコンテンツの名前。形式: cachedContents/{cachedContent}

serviceTier enum (ServiceTier)

省略可。リクエストのサービス階層。

store boolean

省略可。特定のリクエストのロギング動作を構成します。設定すると、プロジェクト レベルのロギング構成よりも優先されます。

リクエスト例

テキスト

Python

from google import genai

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.8-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.8-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.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

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.8-flash", "Write a story about a magic backpack.", null);

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

画像

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.8-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.8-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.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

# 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.8-flash", content, null);

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

音声

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.8-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.8-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.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

# 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

動画

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.8-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.8-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.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

# 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.8-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.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

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

チャット

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.8-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.8-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.8-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())

Shell

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.8-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());

キャッシュ

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.8-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.8-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.8-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)

チューニング済みモデル

Python

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

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.8-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.8-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.8-flash",
	genai.Text("List a few popular cookie recipes."),
	config,
)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

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.8-flash", "List a few popular cookie recipes.", config);

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

コード実行

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.8-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.8-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.8-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());

関数呼び出し

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.8-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.8-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.8-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.8-flash'});
const chatResponse = await chat.sendMessage({
  message: 'The final result is ' + resultValue,
});
console.log(chatResponse.text);

Shell


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.8-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);

生成の構成

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.8-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.8-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.8-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)

Shell

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.8-flash", "Tell me a story about a magic backpack.", config);

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

安全に関する設定

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.8-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.8-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);

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.8-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.")
}

Shell

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.8-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());

システム指示

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.8-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.8-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.8-flash", contents, config)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

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.8-flash", "Good morning! How are you?", config);

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

レスポンスの本文

成功した場合、レスポンスの本文には GenerateContentResponse のインスタンスが含まれます。

メソッド: models.streamGenerateContent

入力 GenerateContentRequest が指定されたモデルからストリーミング レスポンスを生成します。

エンドポイント

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

パスパラメータ

model string

必須。補完の生成に使用する Model の名前。

形式: models/{model}。形式は models/{model} です。

リクエストの本文

リクエストの本文には、次の構造のデータが含まれます。

フィールド
contents[] object (Content)

必須。モデルとの現在の会話の内容。

シングルターン クエリの場合、単一のインスタンスです。チャットなどのマルチターン クエリの場合、これは会話履歴と最新のリクエストを含む繰り返しフィールドです。

tools[] object (Tool)

省略可。Model が次のレスポンスの生成に使用できる Tools のリスト。

Tool は、システムが外部システムと対話して、Model の知識や範囲外のアクションまたは一連のアクションを実行できるようにするコードです。サポートされている Tool は Function と codeExecution です。詳細については、関数呼び出しとコード実行のガイドをご覧ください。

toolConfig object (ToolConfig)

省略可。リクエストで指定された Tool のツール構成。使用例については、関数呼び出しガイドをご覧ください。

safetySettings[] object (SafetySetting)

省略可。安全でないコンテンツをブロックするための一意の SafetySetting インスタンスのリスト。

この要件は GenerateContentRequest.contents と GenerateContentResponse.candidates から適用されます。SafetyCategory タイプごとに複数の設定を指定することはできません。これらの設定で指定されたしきい値を満たさないコンテンツやレスポンスは、API によってブロックされます。このリストは、safetySettings で指定された各 SafetyCategory のデフォルト設定をオーバーライドします。リストに指定された SafetyCategory に SafetySetting がない場合、API はそのカテゴリのデフォルトの安全性設定を使用します。有害カテゴリ HARM_CATEGORY_HATE_SPEECH、HARM_CATEGORY_SEXUALLY_EXPLICIT、HARM_CATEGORY_DANGEROUS_CONTENT、HARM_CATEGORY_HARASSMENT、HARM_CATEGORY_CIVIC_INTEGRITY、HARM_CATEGORY_JAILBREAK がサポートされています。利用可能な安全性設定の詳細については、ガイドをご覧ください。また、安全に関するガイダンスを参照して、AI アプリケーションに安全に関する考慮事項を組み込む方法を確認してください。

continuationToken string (bytes format)

省略可。finishReason が CONTINUATION に設定されて停止した以前の models.generateContent または models.streamGenerateContent レスポンスから生成を再開するために使用される不透明な継続トークン。contents は必須であり、リクエストで継続トークンが指定されている場合は、最初のリクエストのプロンプトと会話履歴を完全に複製する必要があります。

Base64 でエンコードされた文字列。

labels map (key: string, value: string)

省略可。リクエストのユーザー定義のメタデータを含むラベル。

省略可。ラベルは、標準の統合 Cloud ラベルの要件に従う必要があります。- ラベルキーの先頭は英字にする必要があります。- ラベルのキーと値は 63 文字(Unicode コードポイント)以下にする必要があります。使用できるのは小文字、数字、アンダースコア、ダッシュのみです。- 国際文字も使用できます。

使用方法: - アグリゲータの安全識別子: キー safety_identifier(例: {"safety_identifier": "user_session_123"})を使用します。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

systemInstruction object (Content)

省略可。デベロッパーが設定したシステム指示。現時点ではテキストのみ。

generationConfig object (GenerationConfig)

省略可。モデルの生成と出力の構成オプション。

cachedContent string

省略可。予測を提供するためにコンテキストとして使用される、キャッシュに保存されたコンテンツの名前。形式: cachedContents/{cachedContent}

serviceTier enum (ServiceTier)

省略可。リクエストのサービス階層。

store boolean

省略可。特定のリクエストのロギング動作を構成します。設定すると、プロジェクト レベルのロギング構成よりも優先されます。

リクエスト例

テキスト

Python

from google import genai

client = genai.Client()
response = client.models.generate_content_stream(
    model="gemini-3.8-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.8-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.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(response.Candidates[0].Content.Parts[0].Text)
}

Shell

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.8-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();

画像

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.8-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.8-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.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(response.Candidates[0].Content.Parts[0].Text)
}

Shell

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.8-flash", content, null);

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

responseStream.close();

音声

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.8-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.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Shell

# 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

動画

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.8-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.8-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.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Shell

# 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.8-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.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Shell

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

チャット

Python

from google import genai
from google.genai import types

client = genai.Client()
chat = client.chats.create(
    model="gemini-3.8-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.8-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.8-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))

Shell

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"

レスポンスの本文

成功した場合、レスポンスの本文には GenerateContentResponse インスタンスのストリームが含まれます。

GenerateContentResponse

複数の候補レスポンスをサポートするモデルからのレスポンス。

安全性評価とコンテンツ フィルタリングは、GenerateContentResponse.prompt_feedback のプロンプトと、finishReason と safetyRatings の各候補の両方について報告されます。API: - リクエストされたすべての候補を返すか、まったく返さないかのいずれかです。- プロンプトに問題があった場合にのみ、候補をまったく返しません(promptFeedback を確認してください)。- finishReason と safetyRatings で各候補に関するフィードバックを報告します。

フィールド
candidates[] object (Candidate)

モデルからの候補レスポンス。

promptFeedback object (PromptFeedback)

コンテンツ フィルタに関連するプロンプトのフィードバックを返します。

usageMetadata object (UsageMetadata)

出力専用。生成リクエストのトークン使用量に関するメタデータ。

modelVersion string

出力専用。回答の生成に使用されたモデル バージョン。

responseId string

出力専用。responseId は、各レスポンスを識別するために使用されます。

modelStatus object (ModelStatus)

出力専用。このモデルの現在のモデル ステータス。

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

PromptFeedback

GenerateContentRequest.content で指定されたプロンプトのフィードバック メタデータのセット。

フィールド
blockReason enum (BlockReason)

省略可。設定されている場合、プロンプトはブロックされ、候補は返されません。プロンプトを言い換える。

safetyRatings[] object (SafetyRating)

プロンプトの安全性に関する評価。カテゴリごとに最大 1 つの評価があります。

JSON 表現
{
  "blockReason": enum (BlockReason),
  "safetyRatings": [
    {
      object (SafetyRating)
    }
  ]
}

BlockReason

プロンプトがブロックされた理由を指定します。

列挙型
BLOCK_REASON_UNSPECIFIED デフォルト値。この値は使用されません。
SAFETY 安全上の理由により、プロンプトがブロックされました。safetyRatings を調べて、どの安全性カテゴリでブロックされたのかを確認します。
OTHER 不明な理由によりプロンプトがブロックされました。
BLOCKLIST 用語のブロックリストに含まれる用語が原因で、プロンプトがブロックされました。
PROHIBITED_CONTENT 禁止コンテンツが含まれているため、プロンプトがブロックされました。
IMAGE_SAFETY 安全でない画像生成コンテンツが原因でブロックされた候補。

UsageMetadata

生成リクエストのトークン使用量に関するメタデータ。

フィールド
promptTokenCount integer

プロンプト内のトークン数。cachedContent が設定されている場合でも、これは有効なプロンプトの合計サイズです。つまり、キャッシュに保存されたコンテンツのトークン数も含まれます。

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)

出力専用。リクエストのサービス階層。

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

基盤となるモデルのステータス。これは、基盤となるモデルのステージと、該当する場合は廃止時期を示すために使用されます。

フィールド
modelStage enum (ModelStage)

基盤となるモデルのステージ。

retirementTime string (Timestamp format)

モデルが廃止される時刻。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

message string

モデルのステータスを説明するメッセージ。

JSON 表現
{
  "modelStage": enum (ModelStage),
  "retirementTime": string,
  "message": string
}

ModelStage

基盤となるモデルのステージを定義します。

列挙型
MODEL_STAGE_UNSPECIFIED モデルステージが指定されていません。
UNSTABLE_EXPERIMENTAL

基盤となるモデルは、多くのチューニングの対象となります。

EXPERIMENTAL このステージのモデルは、テスト目的でのみ使用されます。
PREVIEW このステージのモデルは、試験運用版モデルよりも成熟しています。
STABLE このステージのモデルは安定しており、本番環境での使用に適していると見なされます。
LEGACY モデルがこのステージにある場合、そのモデルは近い将来に非推奨になる予定であることを意味します。このモデルを使用できるのは、既存のお客様のみです。
DEPRECATED

このステージのモデルは非推奨です。これらのモデルは使用できません。

RETIRED このステージのモデルは廃止されます。これらのモデルは使用できません。

受験者

モデルから生成されたレスポンス候補。

フィールド
content object (Content)

出力専用。モデルから返された生成コンテンツ。

finishReason enum (FinishReason)

省略可。出力専用。モデルがトークンの生成を停止した理由。

空の場合、モデルはトークンの生成を停止していません。

safetyRatings[] object (SafetyRating)

レスポンス候補の安全性評価のリスト。

カテゴリごとに最大 1 つの評価があります。

citationMetadata object (CitationMetadata)

出力専用。モデルが生成した候補の引用情報。

このフィールドには、content に含まれるテキストの引用情報が入力されることがあります。これらは、基盤となる LLM のトレーニング データ内の著作権で保護された素材から「引用」された文章です。

tokenCount integer

出力専用。この候補のトークン数。

groundingAttributions[] object (GroundingAttribution)

出力専用。根拠のある回答に貢献したソースのアトリビューション情報。

このフィールドは、GenerateAnswer 呼び出しで入力されます。

groundingMetadata object (GroundingMetadata)

出力専用。候補のグラウンディング メタデータ。

このフィールドは、GenerateContent 呼び出しで入力されます。

avgLogprobs number

出力専用。候補の平均ログ確率スコア。

logprobsResult object (LogprobsResult)

出力専用。レスポンス トークンと上位トークンの対数尤度スコア

urlContextMetadata object (UrlContextMetadata)

出力専用。URL コンテキスト取得ツールに関連するメタデータ。

continuationToken string (bytes format)

finishReason が CONTINUATION の場合に返される、不透明な継続トークン(省略可)。クライアントは、後続の GenerateContentRequest でこのトークンを渡して生成を続行できます。

Base64 でエンコードされた文字列。

index integer

出力専用。レスポンス候補のリスト内の候補のインデックス。

finishMessage string

省略可。出力専用。モデルがトークンの生成を停止した理由の詳細。これは、finishReason が設定されている場合にのみ入力されます。

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)
  },
  "continuationToken": string,
  "index": integer,
  "finishMessage": string
}

FinishReason

モデルがトークンの生成を停止した理由を定義します。

列挙型
FINISH_REASON_UNSPECIFIED デフォルト値。この値は使用されません。
STOP モデルの自然な停止点、または指定された停止シーケンス。
MAX_TOKENS リクエストで指定されたトークンの上限に達しました。
SAFETY 回答候補のコンテンツに安全上の理由からフラグが付けられた。
RECITATION レスポンス候補のコンテンツが、引用を理由にフラグ付けされました。
LANGUAGE 回答候補のコンテンツが、サポートされていない言語を使用しているとして報告されました。
OTHER 不明な理由。
BLOCKLIST コンテンツに禁止用語が含まれているため、トークンの生成が停止されました。
PROHIBITED_CONTENT 禁止コンテンツが含まれている可能性があるため、トークンの生成が停止されました。
SPII コンテンツに個人を特定できる機密情報(SPII)が含まれている可能性があるため、トークンの生成が停止されました。
MALFORMED_FUNCTION_CALL モデルによって生成された関数呼び出しが無効です。
IMAGE_SAFETY 生成画像に安全性の違反が含まれているため、トークンの生成が停止されました。
IMAGE_PROHIBITED_CONTENT 生成された画像に他の禁止コンテンツが含まれているため、画像生成が停止されました。
IMAGE_OTHER その他の問題により、画像生成が停止しました。
NO_IMAGE モデルが画像を生成すると想定されていましたが、画像が生成されませんでした。
IMAGE_RECITATION 列挙のため、画像生成が停止しました。
UNEXPECTED_TOOL_CALL モデルがツール呼び出しを生成しましたが、リクエストで有効になっているツールがありません。
TOO_MANY_TOOL_CALLS モデルが連続して呼び出したツールの数が多すぎるため、システムが実行を終了しました。
MISSING_THOUGHT_SIGNATURE リクエストに、少なくとも 1 つの思考署名がありません。
MALFORMED_RESPONSE 不正な形式のレスポンスにより終了しました。
ESCALATION リクエストはエスカレーション ルールによってフィルタされました。
PUP_LIMITED_DISABLED 使用禁止に関するポリシー(PUP)違反によりユーザー アカウントが制限または無効化されたため、トークンの生成が停止したことを示します。
CONTINUATION レスポンスがリクエストあたりのトークン上限に達したため、トークンの生成が停止されましたが、生成はまだ完了していません。モデルのレスポンスは、返された continuationToken を使用して後続のリクエストで続行できます。maxOutputTokens は継続ホップ全体で累積されるため、単調増加するか、省略する必要があります。

GroundingAttribution

回答に貢献したソースのアトリビューション。

フィールド
sourceId object (AttributionSourceId)

出力専用。このアトリビューションに貢献しているソースの ID。

content object (Content)

このアトリビューションを構成するグラウンディング ソース コンテンツ。

JSON 表現
{
  "sourceId": {
    object (AttributionSourceId)
  },
  "content": {
    object (Content)
  }
}

AttributionSourceId

このアトリビューションに貢献したソースの識別子。

フィールド
source Union type
相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
groundingPassage object (GroundingPassageId)

インライン パッセージの識別子。

semanticRetrieverChunk object (SemanticRetrieverChunk)

Semantic Retriever を介して取得された Chunk の識別子。

相互に排他的なフィールドの終了。
JSON 表現
{

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

GroundingPassageId

GroundingPassage 内の部品の識別子。

フィールド
passageId string

出力専用。GenerateAnswerRequest の GroundingPassage.id と一致するパッセージの ID。

partIndex integer

出力専用。GenerateAnswerRequest の GroundingPassage.content 内のパートのインデックス。

JSON 表現
{
  "passageId": string,
  "partIndex": integer
}

SemanticRetrieverChunk

SemanticRetrieverConfig を使用して GenerateAnswerRequest で指定されたセマンティック レトリーバーを介して取得された Chunk の識別子。

フィールド
source string

出力専用。リクエストの SemanticRetrieverConfig.source と一致するソースの名前。例: corpora/123、corpora/123/documents/abc

chunk string

出力専用。帰属表示を含む Chunk の名前。例: corpora/123/documents/abc/chunks/xyz

JSON 表現
{
  "source": string,
  "chunk": string
}

GroundingMetadata

グラウンディングが有効になっている場合にクライアントに返されるメタデータ。

フィールド
groundingChunks[] object (GroundingChunk)

指定されたグラウンディング ソースから取得された、裏付けとなる参照のリスト。ストリーミングの場合、これには、以前のレスポンスのグラウンディング メタデータに含まれていないグラウンディング チャンクのみが含まれます。

groundingSupports[] object (GroundingSupport)

グラウンディング サポートのリスト。

webSearchQueries[] string

フォローアップ ウェブ検索のウェブ検索クエリ。

imageSearchQueries[] string

グラウンディングに使用される画像検索クエリ。

searchEntryPoint object (SearchEntryPoint)

省略可。フォローアップ ウェブ検索の Google 検索エントリ。

retrievalMetadata object (RetrievalMetadata)

グラウンディング フローでの検索に関連するメタデータ。

googleMapsWidgetContextToken string

省略可。コンテキスト データをレンダリングするために PlacesContextElement ウィジェットで使用できる Google マップ ウィジェット コンテキスト トークンのリソース名。Google マップによるグラウンディングが有効になっている場合にのみ入力されます。

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

SearchEntryPoint

Google 検索のエントリ ポイント。

フィールド
renderedContent string

省略可。ウェブページまたはアプリのウェブビューに埋め込むことができるウェブ コンテンツ スニペット。

sdkBlob string (bytes format)

省略可。<検索キーワード、検索 URL> のタプルの配列を表す Base64 エンコードされた JSON。

Base64 でエンコードされた文字列。

JSON 表現
{
  "renderedContent": string,
  "sdkBlob": string
}

GroundingChunk

GroundingChunk は、モデルのレスポンスを裏付ける証拠のセグメントを表します。ウェブから取得したチャンク、ファイルから取得したコンテキスト、Google マップから取得した情報などがあります。

フィールド
chunk_type Union type
チャンクタイプ。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
web object (Web)

ウェブからのグラウンディング チャンク。

image object (Image)

省略可。画像検索からのグラウンディング チャンク。

retrievedContext object (RetrievedContext)

省略可。ファイル検索ツールによって取得されたコンテキストからのグラウンディング チャンク。

maps object (Maps)

省略可。Google マップからのグラウンディング チャンク。

相互に排他的なフィールドの終了。
JSON 表現
{

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

ウェブ

ウェブからのチャンク。

フィールド
uri string

出力専用。チャンクの URI 参照。

title string

出力専用。チャンクのタイトル。

JSON 表現
{
  "uri": string,
  "title": string
}

画像

画像検索からのチャンク。

フィールド
sourceUri string

アトリビューションのウェブページ URI。

imageUri string

画像アセットの URL。

title string

画像の取得元であるウェブページのタイトル。

domain string

画像の取得元であるウェブページのルートドメイン(例: 「example.com」)。

JSON 表現
{
  "sourceUri": string,
  "imageUri": string,
  "title": string,
  "domain": string
}

RetrievedContext

ファイル検索ツールによって取得されたコンテキストのチャンク。

フィールド
customMetadata[] object (CustomMetadata)

省略可。取得されたコンテキストに関するユーザー提供のメタデータ。

uri string

省略可。セマンティック検索ドキュメントの URI 参照。

title string

省略可。ドキュメントのタイトル。

text string

省略可。チャンクのテキスト。

fileSearchStore string

省略可。ドキュメントを含む FileSearchStore の名前。例: fileSearchStores/123

pageNumber integer

省略可。取得したコンテキストのページ番号(該当する場合)。

mediaId string

省略可。マルチモーダル ファイル検索結果のメディア blob リソース名。形式: fileSearchStores/{file_search_store_id}/media/{blobId}

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

CustomMetadata

GroundingFact に関するユーザー提供のメタデータ。

フィールド
key string

メタデータのキー。

value Union type
メタデータの値。文字列、文字列のリスト、または数値を指定できます。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
stringValue string

省略可。メタデータの文字列値。

stringListValue object (StringList)

省略可。メタデータの文字列値のリスト。

numericValue number

省略可。メタデータの数値。この値の想定範囲は、使用する key によって異なります。

相互に排他的なフィールドの終了。
JSON 表現
{
  "key": string,

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

StringList

文字列値のリスト。

フィールド
values[] string

リストの文字列値。

JSON 表現
{
  "values": [
    string
  ]
}

マップ

Google マップのグラウンディング チャンク。マップ チャンクは 1 つの場所に対応します。

フィールド
uri string

場所の URI 参照。

title string

場所のタイトル。

text string

場所の回答のテキストによる説明。

placeId string

場所の ID(places/{placeId} 形式)。ユーザーはこの ID を使用してその場所を検索できます。

placeAnswerSources object (PlaceAnswerSources)

Google マップで特定の場所の特徴に関する回答を提供するソース。

JSON 表現
{
  "uri": string,
  "title": string,
  "text": string,
  "placeId": string,
  "placeAnswerSources": {
    object (PlaceAnswerSources)
  }
}

PlaceAnswerSources

Google マップの特定の場所の特徴に関する回答を提供するソースのコレクション。各 PlaceAnswerSources メッセージは、Google マップの特定の場所に対応しています。Google マップ ツールは、場所の特徴に関する質問(「Bar Foo には Wi-Fi がありますか?」や「Foo Bar は車椅子でアクセスできますか?」など)に回答するために、これらのソースを使用しました。現在、ソースとしてサポートされているのはクチコミ抜粋のみです。

フィールド
reviewSnippets[] object (ReviewSnippet)

Google マップで特定の場所の特徴に関する回答を生成するために使用されるクチコミのスニペット。

JSON 表現
{
  "reviewSnippets": [
    {
      object (ReviewSnippet)
    }
  ]
}

ReviewSnippet

Google マップの特定の場所の機能に関する質問に回答するユーザー レビューのスニペットをカプセル化します。

フィールド
reviewId string

クチコミ抜粋の ID。

googleMapsUri string

Google マップのユーザーのクチコミに対応するリンク。

title string

レビューのタイトル。

JSON 表現
{
  "reviewId": string,
  "googleMapsUri": string,
  "title": string
}

GroundingSupport

グラウンディング サポート。

フィールド
groundingChunkIndices[] integer

省略可。申し立てに関連付けられている引用を指定するインデックスのリスト(response.candidate.grounding_metadata の「grounding_chunk」内)。たとえば、[1,3,4] は、grounding_chunk[1]、grounding_chunk[3]、grounding_chunk[4] が、申し立てに起因する取得されたコンテンツであることを意味します。レスポンスがストリーミングの場合、groundingChunkIndices はすべてのレスポンスのインデックスを参照します。すべてのレスポンスからグラウンディング チャンクを(同じ順序を維持しながら)蓄積するのは、クライアントの責任です。

confidenceScores[] number

省略可。サポート参照の信頼度スコア。範囲は 0 ~ 1 です。1 が最も高い信頼度です。このリストは、groundingChunkIndices と同じサイズにする必要があります。

renderedParts[] integer

出力専用。候補のコンテンツの parts フィールドへのインデックス。これらのインデックスは、このサポートソースに関連付けられているレンダリングされた部分を指定します。

segment object (Segment)

このサポートが属するコンテンツのセグメント。

JSON 表現
{
  "groundingChunkIndices": [
    integer
  ],
  "confidenceScores": [
    number
  ],
  "renderedParts": [
    integer
  ],
  "segment": {
    object (Segment)
  }
}

セグメント

コンテンツのセグメント。

フィールド
partIndex integer

親 Content オブジェクト内の Part オブジェクトのインデックス。

startIndex integer

指定された Part の開始インデックス(バイト単位)。Part の先頭からのオフセット(この値を含む)。0 から始まります。

endIndex integer

指定された Part の終了インデックス(バイト単位)。Part の先頭からのオフセット(排他的、0 から開始)。

text string

レスポンスのセグメントに対応するテキスト。

JSON 表現
{
  "partIndex": integer,
  "startIndex": integer,
  "endIndex": integer,
  "text": string
}

RetrievalMetadata

グラウンディング フローでの検索に関連するメタデータ。

フィールド
googleSearchDynamicRetrievalScore number

省略可。Google 検索からの情報がプロンプトへの回答に役立つ可能性を示すスコア。スコアの範囲は [0, 1] です。0 は可能性が最も低く、1 は可能性が最も高いことを示します。このスコアは、Google 検索のグラウンディングと動的取得が有効になっている場合にのみ入力されます。この値はしきい値と比較され、Google 検索をトリガーするかどうかが判断されます。

JSON 表現
{
  "googleSearchDynamicRetrievalScore": number
}

LogprobsResult

Logprobs の結果

フィールド
topCandidates[] object (TopCandidates)

長さ = デコード ステップの合計数。

chosenCandidates[] object (Candidate)

長さ = デコード ステップの合計数。選択された候補は、topCandidates に含まれる場合もあれば、含まれない場合もあります。

logProbabilitySum number

すべてのトークンのログ確率の合計。

JSON 表現
{
  "topCandidates": [
    {
      object (TopCandidates)
    }
  ],
  "chosenCandidates": [
    {
      object (Candidate)
    }
  ],
  "logProbabilitySum": number
}

TopCandidates

各デコード ステップでログ確率が最も高い候補。

フィールド
candidates[] object (Candidate)

対数確率の降順で並べ替えられます。

JSON 表現
{
  "candidates": [
    {
      object (Candidate)
    }
  ]
}

受験者

logprobs トークンとスコアの候補。

フィールド
token string

候補のトークン文字列値。

tokenId integer

候補のトークン ID 値。

logProbability number

候補のログ確率。

JSON 表現
{
  "token": string,
  "tokenId": integer,
  "logProbability": number
}

UrlContextMetadata

URL コンテキスト取得ツールに関連するメタデータ。

フィールド
urlMetadata[] object (UrlMetadata)

URL コンテキストのリスト。

JSON 表現
{
  "urlMetadata": [
    {
      object (UrlMetadata)
    }
  ]
}

UrlMetadata

単一の URL 取得のコンテキスト。

フィールド
retrievedUrl string

ツールによって取得された URL。

urlRetrievalStatus enum (UrlRetrievalStatus)

URL 取得のステータス。

JSON 表現
{
  "retrievedUrl": string,
  "urlRetrievalStatus": enum (UrlRetrievalStatus)
}

UrlRetrievalStatus

URL 取得のステータス。

列挙型
URL_RETRIEVAL_STATUS_UNSPECIFIED デフォルト値。この値は使用されません。
URL_RETRIEVAL_STATUS_SUCCESS URL の取得に成功しました。
URL_RETRIEVAL_STATUS_ERROR エラーのため、URL を取得できませんでした。
URL_RETRIEVAL_STATUS_PAYWALL コンテンツがペイウォールの内側にあるため、URL を取得できませんでした。
URL_RETRIEVAL_STATUS_UNSAFE コンテンツが安全でないため、URL の取得に失敗しました。

CitationMetadata

コンテンツの一部分に関するソース アトリビューションの集合。

フィールド
citationSources[] object (CitationSource)

特定の回答のソースの引用。

JSON 表現
{
  "citationSources": [
    {
      object (CitationSource)
    }
  ]
}

CitationSource

特定のレスポンスの一部に対するソースの引用。

フィールド
startIndex integer

省略可。このソースに起因する回答のセグメントの開始。

インデックスはセグメントの開始位置を示し、バイト単位で測定されます。

endIndex integer

省略可。帰属セグメントの終了位置(この位置自体は含みません)。

uri string

省略可。テキストの一部のソースとして帰属される URI。

license string

省略可。セグメントのソースとして帰属する GitHub プロジェクトのライセンス。

コードの引用にはライセンス情報が必要です。

JSON 表現
{
  "startIndex": integer,
  "endIndex": integer,
  "uri": string,
  "license": string
}

HarmCategory

評価のカテゴリ。

これらのカテゴリは、デベロッパーが調整を必要とする可能性のあるさまざまな種類の有害なコンテンツをカバーしています。

列挙型
HARM_CATEGORY_UNSPECIFIED カテゴリが指定されていません。
HARM_CATEGORY_DEROGATORY

PaLM - ID や保護されている属性をターゲットとする否定的なコメントや有害なコメント。非推奨: PaLM 専用カテゴリ。Gemini モデルではサポートされていません。

HARM_CATEGORY_TOXICITY

PaLM - 粗暴、無礼、または冒とく的なコンテンツ。非推奨: PaLM 専用カテゴリ。Gemini モデルではサポートされていません。

HARM_CATEGORY_VIOLENCE

PaLM - 個人やグループに対する暴力を描写したシナリオ、または残虐行為の一般的な説明についての記述。非推奨: PaLM 専用カテゴリ。Gemini モデルではサポートされていません。

HARM_CATEGORY_SEXUAL

PaLM - 性行為やわいせつな内容に関する情報が含まれるコンテンツ。非推奨: PaLM 専用カテゴリ。Gemini モデルではサポートされていません。

HARM_CATEGORY_MEDICAL

PaLM - 未確認の医学的なアドバイスを促進する。非推奨: PaLM 専用カテゴリ。Gemini モデルではサポートされていません。

HARM_CATEGORY_DANGEROUS

PaLM - 有害な行為を奨励、促進、または助長する危険なコンテンツ。非推奨: PaLM 専用カテゴリ。Gemini モデルではサポートされていません。

HARM_CATEGORY_HARASSMENT Gemini - ハラスメント コンテンツ。
HARM_CATEGORY_HATE_SPEECH Gemini - ヘイトスピーチとコンテンツ。
HARM_CATEGORY_SEXUALLY_EXPLICIT Gemini - 性的描写が露骨なコンテンツ。
HARM_CATEGORY_DANGEROUS_CONTENT Gemini - 危険なコンテンツ。
HARM_CATEGORY_CIVIC_INTEGRITY

Gemini - 市民の清廉性を損なうために使用される可能性のあるコンテンツ。非推奨: 代わりに enableEnhancedCivicAnswers を使用してください。

HARM_CATEGORY_JAILBREAK Gemini - モデルの安全に関するガイドラインを回避または覆そうとするプロンプト(ジェイルブレイクの試み)。

ModalityTokenCount

単一のモダリティのトークン カウント情報を表します。

フィールド
modality enum (Modality)

このトークン数に関連付けられているモダリティ。

tokenCount integer

トークン数。

JSON 表現
{
  "modality": enum (Modality),
  "tokenCount": integer
}

モダリティ

コンテンツ部分のモダリティ

列挙型
MODALITY_UNSPECIFIED モダリティが指定されていません。
TEXT 書式なしテキスト。
IMAGE Image.
VIDEO 動画
AUDIO 音声。
DOCUMENT ドキュメント(PDF など)。

SafetyRating

コンテンツの安全性評価。

安全性評価には、コンテンツの有害カテゴリと、そのカテゴリにおける有害である確率のレベルが含まれます。コンテンツは、複数の有害カテゴリにわたって安全性について分類され、有害として分類される確率がここに表示されます。

フィールド
category enum (HarmCategory)

必須。この評価のカテゴリ。

probability enum (HarmProbability)

必須。このコンテンツが有害である確率。

blocked boolean

この評価が原因でこのコンテンツはブロックされましたか?

JSON 表現
{
  "category": enum (HarmCategory),
  "probability": enum (HarmProbability),
  "blocked": boolean
}

HarmProbability

コンテンツが有害である確率。

分類システムは、コンテンツが安全でない確率を算出します。これは、コンテンツの有害性の重大度を示すものではありません。

列挙型
HARM_PROBABILITY_UNSPECIFIED 確率は指定されていません。
NEGLIGIBLE コンテンツが安全でない可能性はごくわずかである。
LOW コンテンツが安全でない可能性は低い。
MEDIUM コンテンツが安全でない可能性が中程度である。
HIGH コンテンツが安全でない可能性が高い。

SafetySetting

安全性設定。安全性ブロックの動作に影響します。

カテゴリの安全性設定を渡すと、コンテンツがブロックされる許容確率が変更されます。

フィールド
category enum (HarmCategory)

必須。この設定のカテゴリ。

threshold enum (HarmBlockThreshold)

必須。有害なコンテンツをブロックする確率のしきい値を制御します。

JSON 表現
{
  "category": enum (HarmCategory),
  "threshold": enum (HarmBlockThreshold)
}

HarmBlockThreshold

指定された危害発生確率以上でブロックします。

列挙型
HARM_BLOCK_THRESHOLD_UNSPECIFIED しきい値が指定されていません。
BLOCK_LOW_AND_ABOVE NEGLIGIBLE のコンテンツは許可されます。
BLOCK_MEDIUM_AND_ABOVE NEGLIGIBLE と LOW のコンテンツは許可されます。
BLOCK_ONLY_HIGH NEGLIGIBLE、LOW、MEDIUM のコンテンツは許可されます。
BLOCK_NONE すべてのコンテンツが許可されます。
OFF 安全フィルタをオフにします。

ServiceTier

リクエストのサービス階層。

列挙型
unspecified デフォルトのサービスティア(スタンダード)。
standard スタンダード サービスティア。
flex Flex サービスティア。
priority 優先サービスティア。

コンテンツ

メッセージのマルチパート コンテンツを含む基本的な構造化データ型。

Content には、Content のプロデューサーを指定する role フィールドと、メッセージ ターンのコンテンツを含むマルチパート データを含む parts フィールドが含まれます。

フィールド
parts[] object (Part)

1 つのメッセージを構成する順序付きの Parts。パーツによって MIME タイプが異なる場合があります。

role string

省略可。コンテンツの作成者。「user」または「model」のいずれかにする必要があります。

マルチターンの会話に設定すると便利です。それ以外の場合は、空白のままにするか、未設定のままにできます。

JSON 表現
{
  "parts": [
    {
      object (Part)
    }
  ],
  "role": string
}

Part

マルチパート Content メッセージの一部であるメディアを含むデータ型。

Part は、関連付けられたデータ型を持つデータで構成されます。Part には、Part.data で受け入れられるタイプのいずれか 1 つのみを含めることができます。

inlineData フィールドに未加工のバイトが入力されている場合、Part には、メディアのタイプとサブタイプを識別する固定の IANA MIME タイプが必要です。

フィールド
thought boolean

省略可。この部分がモデルによる「思考」かどうかを示します。

thoughtSignature string (bytes format)

省略可。思考の不透明な署名。後続のリクエストで再利用できます。

Base64 でエンコードされた文字列。

partMetadata object (Struct format)

Part に関連付けられたカスタム メタデータ。genai.Part をコンテンツ表現として使用するエージェントは、追加情報を追跡する必要がある場合があります。たとえば、Part の送信元であるファイル/ソースの名前や、複数の Part ストリームを多重化する方法などです。

mediaResolution object (MediaResolution)

省略可。入力メディアのメディア解像度。

mediaProcessing enum (MediaProcessing)

省略可。モデルがこの部分のメディアを処理して理解する方法。動画パート(inlineData または動画 MIME を含む fileData)にのみ有効です。動画以外の部分では、このフィールドは無視されます。

audioTranscription object (AudioTranscription)

省略可。音声(入力または出力)の音声文字変換。この Part に音声データが含まれている場合にのみ設定されます。

speechMetadata object (SpeechMetadata)

省略可。テキスト部分に適用されるメタデータ。話者の ID や話し方の指定など、テキスト部分の発話方法や合成方法をカスタマイズします。

data Union type
相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
text string

インライン テキスト。

inlineData object (Blob)

インライン メディアバイト。

functionCall object (FunctionCall)

モデルから返される、予測された FunctionCall。引数とその値を含む FunctionDeclaration.name を表す文字列が含まれます。

functionResponse object (FunctionResponse)

FunctionCall の結果の出力。FunctionDeclaration.name を表す文字列と、関数からの出力を含む構造化 JSON オブジェクトが、モデルのコンテキストとして使用されます。

fileData object (FileData)

URI ベースのデータ。

executableCode object (ExecutableCode)

実行されることを目的とし、モデルによって生成されたコード。

codeExecutionResult object (CodeExecutionResult)

ExecutableCode の実行結果。

toolCall object (ToolCall)

サーバーサイド ツール呼び出し。このフィールドは、モデルがサーバーで実行する必要があるツール呼び出しを予測するときに入力されます。クライアントは、このメッセージを API にエコーバックする必要があります。

toolResponse object (ToolResponse)

サーバーサイドの ToolCall 実行の出力。このフィールドには、対応する ToolCall の実行結果がクライアントによって入力されます。

相互に排他的なフィールドの終了。
metadata Union type
データの前処理を制御します。inline_data または file_data が存在する場合に、パートごとの静的メディアの前処理を構成するために設定します。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
videoMetadata object (VideoMetadata)

省略可。動画のメタデータ。メタデータは、動画データが inlineData または fileData で表されている場合にのみ指定する必要があります。

相互に排他的なフィールドの終了。
JSON 表現
{
  "thought": boolean,
  "thoughtSignature": string,
  "partMetadata": {
    object
  },
  "mediaResolution": {
    object (MediaResolution)
  },
  "mediaProcessing": enum (MediaProcessing),
  "audioTranscription": {
    object (AudioTranscription)
  },
  "speechMetadata": {
    object (SpeechMetadata)
  },

  // 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

未加工のメディアバイト。

テキストは未加工のバイトとして送信しないでください。'text' フィールドを使用してください。

フィールド
mimeType string

ソースデータの IANA 標準 MIME タイプ。サポートされているタイプの例: - 画像: image/png、image/jpeg、image/jpg、image/webp、image/heic、image/heif、image/gif、image/avif - 音声: audio/*、video/audio/s16le、video/audio/wav - 動画: video/* - テキスト: 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 - アプリケーション: application/x-javascript、application/x-typescript、application/x-python-code、application/json、application/x-ipynb+json、application/rtf、application/pdf。詳細については、サポートされているファイル形式をご覧ください。//

data string (bytes format)

メディア フォーマットの未加工バイト。

Base64 でエンコードされた文字列。

displayName string

省略可。モデルに対してこの blob を参照するために使用する名前を指定します(例: 「my_blob.png」)。verbalizationMode が REFERENCE_ONLY に設定されている場合に、blob 参照識別子として使用されます。

JSON 表現
{
  "mimeType": string,
  "data": string,
  "displayName": string
}

FunctionCall

モデルから返される、予測された FunctionCall。引数とその値を含む FunctionDeclaration.name を表す文字列が含まれます。

フィールド
id string

省略可。関数呼び出しの固有識別子。入力されている場合、クライアントは functionCall を実行し、一致する id を含むレスポンスを返します。

name string

必須。呼び出す関数の名前。a ~ z、A ~ Z、0 ~ 9 にする必要があり、アンダースコアとダッシュを含めることができます。最大長は 128 文字です。

args object (Struct format)

省略可。JSON オブジェクト形式の関数パラメータと値。

JSON 表現
{
  "id": string,
  "name": string,
  "args": {
    object
  }
}

FunctionResponse

FunctionCall からの結果出力。FunctionDeclaration.name を表す文字列と、関数からの出力を含む構造化 JSON オブジェクトが含まれます。これはモデルのコンテキストとして使用されます。これには、モデル予測に基づいて作成された FunctionCall の結果が含まれている必要があります。

フィールド
id string

省略可。このレスポンスの対象となる関数呼び出しの識別子。対応する関数呼び出し id と一致するようにクライアントによって入力されます。

name string

必須。呼び出す関数の名前。a ~ z、A ~ Z、0 ~ 9 にする必要があり、アンダースコアとダッシュを含めることができます。最大長は 128 文字です。

response object (Struct format)

必須。JSON オブジェクト形式の関数のレスポンス。呼び出し元は、関数の構文に適合する任意のキーを使用して、関数の出力(「output」、「result」など)を返すことができます。特に関数呼び出しの実行に失敗した場合、レスポンスに「error」キーを含めて、エラーの詳細をモデルに返すことができます。

マルチメディアを含めるには、マルチメディアを保持する FunctionResponsePart の inlineData.display_name を値とする単一の「$ref」キーを含むサブオブジェクトを使用します。https://ai.google.dev/gemini-api/docs/function-calling#multimodal をご覧ください。

parts[] object (FunctionResponsePart)

省略可。関数レスポンスを構成する順序付き Parts。パーツによって IANA MIME タイプが異なる場合があります。

willContinue boolean

省略可。関数呼び出しが継続し、より多くのレスポンスが返されることを示すシグナル。関数呼び出しをジェネレーターに変換します。NON_BLOCKING 関数呼び出しにのみ適用され、それ以外の場合は無視されます。false に設定すると、今後の回答は考慮されません。関数呼び出しが完了したことを示すために、willContinue=False を含む空の response を返すことができます。これにより、モデルの生成がトリガーされる可能性があります。生成をトリガーせずに関数呼び出しを終了するには、scheduling を SILENT に設定します。

scheduling enum (Scheduling)

省略可。会話でレスポンスをスケジュールする方法を指定します。NON_BLOCKING 関数呼び出しにのみ適用されます。それ以外の場合は無視されます。デフォルトは WHEN_IDLE です。

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

FunctionResponsePart

FunctionResponse メッセージの一部であるメディアを含むデータ型。

FunctionResponsePart は、関連付けられたデータ型を持つデータで構成されます。FunctionResponsePart には、FunctionResponsePart.data で受け入れられるタイプのいずれか 1 つのみを含めることができます。

inlineData フィールドに未加工のバイトが入力されている場合、FunctionResponsePart には、メディアのタイプとサブタイプを識別する固定の IANA MIME タイプが必要です。

フィールド
data Union type
関数レスポンス部分のデータ。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
inlineData object (FunctionResponseBlob)

インライン メディアバイト。

相互に排他的なフィールドの終了。
JSON 表現
{

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

FunctionResponseBlob

関数レスポンスの未加工のメディアバイト。

テキストを生のバイトとして送信しないでください。FunctionResponse.response フィールドを使用してください。

フィールド
mimeType string

ソースデータの IANA 標準 MIME タイプ。例: - image/png - image/jpeg サポートされていない MIME タイプが指定されると、エラーが返されます。サポートされている種類の完全なリストについては、サポートされているファイル形式をご覧ください。

data string (bytes format)

メディア フォーマットの未加工バイト。

Base64 でエンコードされた文字列。

JSON 表現
{
  "mimeType": string,
  "data": string
}

スケジュール

会話でレスポンスをスケジュールする方法を指定します。

列挙型
SCHEDULING_UNSPECIFIED この値は使用されません。
SILENT 結果を会話コンテキストに追加するだけで、生成を中断したりトリガーしたりしないでください。
WHEN_IDLE 結果を会話コンテキストに追加し、進行中の生成を中断することなく出力を生成するようプロンプトを表示します。
INTERRUPT 結果を会話コンテキストに追加し、進行中の生成を中断して、出力を生成するようプロンプトを表示します。

FileData

URI ベースのデータ。

フィールド
mimeType string

省略可。ソースデータの IANA 標準 MIME タイプ。

fileUri string

必須。URI。

displayName string

省略可。モデルに対してこのファイルを参照するために使用する名前(「my_file.pdf」など)を指定します。verbalizationMode が REFERENCE_ONLY に設定されている場合に、ファイル参照識別子として使用されます。

JSON 表現
{
  "mimeType": string,
  "fileUri": string,
  "displayName": string
}

ExecutableCode

実行されることを目的とし、モデルによって生成されたコード。結果はモデルに返されます。

CodeExecution ツールを使用する場合にのみ生成されます。このツールでは、コードが自動的に実行され、対応する CodeExecutionResult も生成されます。

フィールド
id string

省略可。ExecutableCode 部品の固有識別子。サーバーは、一致する id を含む CodeExecutionResult を返します。

language enum (Language)

必須。code のプログラミング言語。

code string

必須。実行されるコード。

JSON 表現
{
  "id": string,
  "language": enum (Language),
  "code": string
}

言語

生成されたコードでサポートされているプログラミング言語。

列挙型
LANGUAGE_UNSPECIFIED 不明な言語。この値は使用されるべきではありません。
PYTHON Python >= 3.10(numpy と simpy が利用可能)。Python がデフォルトの言語です。

CodeExecutionResult

ExecutableCode の実行結果。

CodeExecution ツールが使用されている場合にのみ生成されます。

フィールド
id string

省略可。この結果が対象とする ExecutableCode 部分の識別子。対応する ExecutableCode に ID がある場合にのみ入力されます。

outcome enum (Outcome)

必須。コード実行の結果。

output string

省略可。コード実行が成功した場合は stdout、それ以外の場合は stderr または他の説明が含まれます。

JSON 表現
{
  "id": string,
  "outcome": enum (Outcome),
  "output": string
}

結果

可能性のあるコード実行結果の列挙。

列挙型
OUTCOME_UNSPECIFIED ステータスの指定がありません。この値は使用されるべきではありません。
OUTCOME_OK コード実行が正常に完了しました。output には、stdout が含まれます(存在する場合)。
OUTCOME_FAILED コード実行に失敗しました。output には、stderr と stdout が含まれます(存在する場合)。
OUTCOME_DEADLINE_EXCEEDED コード実行に時間がかかり過ぎたため、キャンセルされました。部分的な output が存在する場合も、存在しない場合もあります。

ToolCall

モデルから返された、予測されたサーバーサイドの ToolCall。このメッセージには、モデルが呼び出すツールに関する情報が含まれています。クライアントはこの ToolCall を実行する必要はありません。代わりに、クライアントは、対応する ToolResponse とともに、Content メッセージ内の後続のターンでこの ToolCall を API に返す必要があります。

フィールド
id string

省略可。ツール呼び出しの固有識別子。サーバーは、一致する id を含むツールのレスポンスを返します。

toolName string

省略可。呼び出されたツールの名前。

toolType enum (ToolType)

必須。呼び出されたツールのタイプ。

args object (Struct format)

省略可。ツール呼び出しの引数。例: {"arg1" : "value1", "arg2" : "value2" , ...}

JSON 表現
{
  "id": string,
  "toolName": string,
  "toolType": enum (ToolType),
  "args": {
    object
  }
}

ToolType

関数呼び出しのツールのタイプ。

列挙型
TOOL_TYPE_UNSPECIFIED 未指定のツールタイプ。
GOOGLE_SEARCH_WEB Google 検索ツール。Tool.google_search.search_types.web_search にマッピングされます。
GOOGLE_SEARCH_IMAGE 画像検索ツール。Tool.google_search.search_types.image_search にマッピングされます。
URL_CONTEXT URL コンテキスト ツール。Tool.url_context にマッピングされます。
GOOGLE_MAPS Google マップツール。Tool.google_maps にマッピングされます。

ToolResponse

サーバーサイドの ToolCall 実行の出力。このメッセージには、モデルからの ToolCall によって開始されたツール呼び出しの結果が含まれます。クライアントは、対応する ToolCall とともに、Content メッセージ内の後続のターンでこの ToolResponse を API に返す必要があります。

フィールド
id string

省略可。このレスポンスの対象となるツール呼び出しの識別子。

toolType enum (ToolType)

必須。呼び出されたツールのタイプ。対応する ToolCall の toolType と一致します。

response object (Struct format)

省略可。ツールのレスポンス。

JSON 表現
{
  "id": string,
  "toolType": enum (ToolType),
  "response": {
    object
  }
}

VideoMetadata

メタデータは、入力動画コンテンツを記述します。inlineData または fileData に動画が含まれている場合に、Part.video_metadata または FunctionResponsePart.video_metadata でこれを設定して、静的動画の前処理(時間クリッピング、フレームレート、最大フレーム数、抽出されたコンテンツ レイヤなど)を構成します。

フィールド
startOffset string (Duration format)

省略可。動画の開始オフセット

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"。

endOffset string (Duration format)

省略可。動画の終了オフセット。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"。

fps number

省略可。モデルに送信された動画のフレームレート。指定しない場合、デフォルト値は 1.0 になります。fps の範囲は (0.0, 24.0] です。

JSON 表現
{
  "startOffset": string,
  "endOffset": string,
  "fps": number
}

MediaResolution

トークン化のメディア解像度。

フィールド
value Union type
メディアの解像度レベル。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
level enum (Level)

特定のメディアに使用されるトークン化の品質。 (Gemini API のサポート)。

相互に排他的なフィールドの終了。
JSON 表現
{

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

レベル

メディアの解像度レベル。

列挙型
MEDIA_RESOLUTION_UNSPECIFIED メディアの解像度が設定されていません。
MEDIA_RESOLUTION_LOW メディアの解像度が低に設定されています。
MEDIA_RESOLUTION_MEDIUM メディアの解像度が中程度に設定されています。
MEDIA_RESOLUTION_HIGH メディアの解像度が高に設定されています。
MEDIA_RESOLUTION_ULTRA_HIGH メディアの解像度が超高に設定されています。

MediaProcessing

モデルが理解のために入力メディアを処理する方法。

列挙型
MEDIA_PROCESSING_UNSPECIFIED デフォルトはモデル固有の処理です。
STATIC 固定レートのフレーム抽出。すべてのフレームがコンテキストに配置されます。
AGENTIC モデルドリブンの動的ナビゲーション。ほとんどのユースケースで推奨されます。

AudioTranscription

音声部分の文字起こし。マルチスピーカー音声の場合、各スピーカー セグメントは個別の Part であり、独自の AudioTranscription が speakerLabel を保持します。

フィールド
text string

必須。この音声セグメントの音声文字変換テキスト。

speakerLabel string

省略可。この音声セグメントの話者を識別するラベル(「spk_1」、「spk_2」など)。ダイアライゼーションが設定されている場合に存在します。

words[] object (WordInfo)

省略可。単語レベルの詳細な音声文字変換とタイミングの詳細。wordTimestamp が設定されている場合に表示されます。

JSON 表現
{
  "text": string,
  "speakerLabel": string,
  "words": [
    {
      object (WordInfo)
    }
  ]
}

WordInfo

認識された単一の単語に関する情報。

フィールド
word string

必須。単語の文字起こし。

startOffset string (Duration format)

省略可。音声の開始を基準とした単語の開始オフセット(時間)。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"。

endOffset string (Duration format)

省略可。音声の開始を基準とした単語の終了オフセット。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"。

JSON 表現
{
  "word": string,
  "startOffset": string,
  "endOffset": string
}

SpeechMetadata

text 部分の音声メタデータ。

フィールド
speaker string

省略可。複数話者合成のオプションの話者名。

style string

省略可。音声合成のスタイル指示(省略可)。

JSON 表現
{
  "speaker": string,
  "style": string
}

環境

エージェントの実行環境。

フィールド
id string

必須。出力専用。環境の ID。

sources[] object (Source)

環境にマウントされるソース。

created string

出力専用。環境が作成された時刻(ISO 8601 形式、YYYY-MM-DDThh:mm:ssZ)。

updated string

出力専用。環境が最後に更新された時刻(ISO 8601 形式、YYYY-MM-DDThh:mm:ssZ)。

lastAccessed string

出力専用。環境に最後にアクセスした時刻(ISO 8601 形式、YYYY-MM-DDThh:mm:ssZ)。

status enum (Status)

出力専用。環境コンテナのステータス。

fileCount string (int64 format)

出力専用。環境内のファイル数(出力専用)。

sizeBytes string (int64 format)

出力専用。環境ファイルの合計サイズ(バイト単位、出力専用)。

network Union type
環境のネットワーク構成。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
networkAllowlist object (EnvironmentNetworkEgressAllowlist)

特定のドメインのみを許可する。

networkMode enum (NetworkMode)

ネットワーク下り(外向き)モード。

相互に排他的なフィールドの終了。
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
}

ステータス

環境のステータス。

列挙型
STATUS_UNSPECIFIED
ACTIVE
EXPIRED

NetworkMode

許可リスト以外の構成のネットワーク下り(外向き)モード。

列挙型
NETWORK_MODE_UNSPECIFIED デフォルト値。未使用。
DISABLED すべてのネットワーク下り(外向き)がブロックされます。

スキーマ

Schema オブジェクトを使用すると、入力データ型と出力データ型を定義できます。これらの型はオブジェクトにすることもできますが、プリミティブや配列にすることもできます。OpenAPI 3.0 スキーマ オブジェクトの選択されたサブセットを表します。

フィールド
type enum (Type)

必須。データ型。

format string

省略可。データの形式。任意の値を使用できますが、ほとんどの値は特別な機能をトリガーしません。

title string

省略可。スキーマのタイトル。

description string

省略可。パラメータの簡単な説明。これには、使用例が含まれる場合があります。パラメータの説明はマークダウン形式で記述できます。

nullable boolean

省略可。値が null の可能性があるかどうかを示します。

enum[] string

省略可。Type.STRING の要素の可能な値(列挙型形式)。たとえば、Enum Direction を {type:STRING, format:enum, enum:["EAST", NORTH", "SOUTH", "WEST"]} のように定義できます。

maxItems string (int64 format)

省略可。Type.ARRAY の要素の最大数。

minItems string (int64 format)

省略可。Type.ARRAY の要素の最小数。

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

省略可。Type.OBJECT のプロパティ。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

required[] string

省略可。Type.OBJECT の必須プロパティ。

minProperties string (int64 format)

省略可。Type.OBJECT のプロパティの最小数。

maxProperties string (int64 format)

省略可。Type.OBJECT のプロパティの最大数。

minLength string (int64 format)

省略可。STRING 型のスキーマ フィールド。Type.STRING の最小長

maxLength string (int64 format)

省略可。Type.STRING の最大長

pattern string

省略可。文字列を正規表現に制限する Type.STRING のパターン。

example value (Value format)

省略可。オブジェクトの例。オブジェクトがルートの場合にのみ入力されます。

anyOf[] object (Schema)

省略可。値は、リスト内のサブスキーマのいずれか(1 つ以上)に対して検証する必要があります。

propertyOrdering[] string

省略可。プロパティの順序。OpenAPI 仕様の標準フィールドではありません。レスポンス内のプロパティの順序を決定するために使用されます。

default value (Value format)

省略可。フィールドのデフォルト値。JSON スキーマによると、このフィールドはドキュメント生成ツールを対象としており、検証には影響しません。そのため、default フィールドを含むスキーマを送信するデベロッパーが不明なフィールドのエラーを受け取らないように、このフィールドは無視されます。

items object (Schema)

省略可。Type.ARRAY の要素のスキーマ。

minimum number

省略可。INTEGER 型と NUMBER 型のスキーマ フィールド。Type.INTEGER と Type.NUMBER の最小値

maximum number

省略可。Type.INTEGER と Type.NUMBER の最大値

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
}

タイプ

type には、https://spec.openapis.org/oas/v3.0.3#data-types で定義されている OpenAPI データ型のリストが含まれます。

列挙型
TYPE_UNSPECIFIED 指定されていません。使用しないでください。
STRING 文字列型。
NUMBER 数値型。
INTEGER 整数型。
BOOLEAN ブール型。
ARRAY 配列型。
OBJECT オブジェクト タイプ。
NULL Null 型。

ツール

モデルがレスポンスの生成に使用できるツールの詳細。

Tool は、システムが外部システムと対話して、モデルの知識や範囲外のアクションまたは一連のアクションを実行できるようにするコードです。

フィールド
functionDeclarations[] object (FunctionDeclaration)

省略可。関数呼び出しに使用できるモデルで使用可能な FunctionDeclarations のリスト。

モデルまたはシステムは関数を実行しません。代わりに、定義された関数が、実行のためにクライアント側に引数とともに FunctionCall として返されることがあります。モデルは、レスポンスに FunctionCall を入力することで、これらの関数のサブセットを呼び出すことを決定する場合があります。次の会話ターンには、次のモデルターンの Content.role「関数」生成コンテキストを含む FunctionResponse が含まれる場合があります。

googleSearchRetrieval object (GoogleSearchRetrieval)

省略可。Google 検索を利用した情報取得ツール。

codeExecution object (CodeExecution)

省略可。モデルが生成の一部としてコードを実行できるようにします。

computerUse object (ComputerUse)

省略可。モデルがコンピュータと直接やり取りできるようにするためのツール。有効にすると、コンピュータの使用に固有の関数宣言が自動的に入力されます。

urlContext object (UrlContext)

省略可。URL コンテキストの取得をサポートするツール。

mcpServers[] object (McpServer)

省略可。接続先の MCP サーバー。

googleMaps object (GoogleMaps)

省略可。ユーザーのクエリに関連する地理空間コンテキストを使用してモデルのレスポンスをグラウンディングできるツール。

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

OpenAPI 3.03 仕様で定義されている関数宣言の構造化表現。この宣言には、関数名とパラメータが含まれます。この FunctionDeclaration は、モデルによって Tool として使用され、クライアントによって実行されるコードブロックの表現です。

フィールド
name string

必須。関数名。a ~ z、A ~ Z、0 ~ 9 にする必要があり、アンダースコア、コロン、ドット、ダッシュを含めることができます。最大長は 128 文字です。

description string

必須。関数の簡単な説明。

behavior enum (Behavior)

省略可。関数の動作を指定します。現在、BidiGenerateContent メソッドでのみサポートされています。

parameters object (Schema)

省略可。この関数のパラメータについて説明します。Open API 3.03 パラメータ オブジェクトの文字列キー(パラメータの名前)を反映します。パラメータ名では大文字と小文字が区別されます。スキーマ値: パラメータに使用される型を定義するスキーマ。

parametersJsonSchema value (Value format)

省略可。関数のパラメータを JSON スキーマ形式で記述します。スキーマでは、プロパティが関数のパラメータであるオブジェクトを記述する必要があります。次に例を示します。

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

このフィールドは parameters と相互に排他的です。

response object (Schema)

省略可。この関数からの出力を JSON スキーマ形式で記述します。Open API 3.03 レスポンス オブジェクトを反映します。Schema は、関数のレスポンス値に使用される型を定義します。

responseJsonSchema value (Value format)

省略可。この関数からの出力を JSON スキーマ形式で記述します。スキーマで指定された値は、関数のレスポンス値です。

このフィールドは response と相互に排他的です。

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

動作

関数の動作を定義します。デフォルトは BLOCKING です。

列挙型
UNSPECIFIED この値は使用されません。
BLOCKING 設定すると、システムは関数のレスポンスを受信するまで待機してから会話を続行します。
NON_BLOCKING 設定されている場合、システムは関数のレスポンスを待機しません。代わりに、ユーザーとモデル間の会話を維持しながら、関数レスポンスが利用可能になった時点で処理を試みます。

GoogleSearchRetrieval

Google が提供する、グラウンディング用の公開ウェブデータを取得するツール。

フィールド
dynamicRetrievalConfig object (DynamicRetrievalConfig)

指定されたソースの動的取得構成を指定します。

JSON 表現
{
  "dynamicRetrievalConfig": {
    object (DynamicRetrievalConfig)
  }
}

DynamicRetrievalConfig

動的取得をカスタマイズするオプションについて説明します。

フィールド
mode enum (Mode)

動的検索で使用される予測ツールのモード。

dynamicThreshold number

動的取得で使用されるしきい値。設定しない場合、システムのデフォルト値が使用されます。

JSON 表現
{
  "mode": enum (Mode),
  "dynamicThreshold": number
}

モード

動的検索で使用される予測ツールのモード。

列挙型
MODE_UNSPECIFIED 常に取得をトリガーします。
MODE_DYNAMIC システムが必要と判断した場合にのみ、取得を実行します。

CodeExecution

この型にはフィールドがありません。

モデルによって生成されたコードを実行し、結果をモデルに自動的に返すツール。

このツールの使用時にのみ生成される ExecutableCode と CodeExecutionResult もご覧ください。

GoogleSearch

GoogleSearch ツールタイプ。モデルで Google 検索をサポートするツール。Powered by Google。

フィールド
timeRangeFilter object (Interval)

省略可。検索結果を特定の期間に絞り込みます。開始時間を設定した場合は、終了時間も設定する必要があります(逆も同様)。

searchTypes object (SearchTypes)

省略可。有効にする検索タイプのセット。設定されていない場合、デフォルトでウェブ検索が有効になります。

JSON 表現
{
  "timeRangeFilter": {
    object (Interval)
  },
  "searchTypes": {
    object (SearchTypes)
  }
}

間隔

時間間隔を表します。開始日時を示す Timestamp(この日時を含む)と終了日時を示す Timestamp(この日時を含まない)としてエンコードされます。

開始日時は終了日時以前にする必要があります。開始日時と終了日時が同じ場合、時間間隔は空になります(どの時間とも一致しません)。開始日時と終了日時が両方とも指定されていない場合、その時間間隔はすべての日時と一致します。

フィールド
startTime string (Timestamp format)

省略可。時間間隔の開始日時(この日時を含む)。

指定した場合、開始日時と同じかそれ以降の Timestamp がこの時間間隔に一致します。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

endTime string (Timestamp format)

省略可。時間間隔の終了日時(この日時を含まない)。

指定した場合、終了時刻より前の Timestamp がこの時間間隔に一致します。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

JSON 表現
{
  "startTime": string,
  "endTime": string
}

SearchTypes

GoogleSearch ツールで有効にできるさまざまな種類の検索。

フィールド
JSON 表現
{
  "webSearch": {
    object (WebSearch)
  },
  "imageSearch": {
    object (ImageSearch)
  }
}

WebSearch

この型にはフィールドがありません。

グラウンディングと関連する構成の標準ウェブ検索。

ImageSearch

この型にはフィールドがありません。

グラウンディングと関連する構成の画像検索。

ComputerUse

コンピュータ使用ツールのタイプ。

フィールド
environment enum (Environment)

必須。運用されている環境。

excludedPredefinedFunctions[] string

省略可。デフォルトでは、事前定義された関数が最終的なモデル呼び出しに含まれます。一部のオブジェクトは、自動的に含まれないように明示的に除外できます。これには 2 つの目的があります。1. より制限された / 異なるアクション スペースを使用する。2. 事前定義された関数の定義 / 手順を改善する。

enablePromptInjectionDetection boolean

省略可。コンピュータ使用リクエストでプロンプト インジェクションの検出チェックを有効にするかどうか。

disabledSafetyPolicies[] enum (SafetyPolicy)

省略可。コンピュータの使用に関する安全ポリシーを無効にしました。

JSON 表現
{
  "environment": enum (Environment),
  "excludedPredefinedFunctions": [
    string
  ],
  "enablePromptInjectionDetection": boolean,
  "disabledSafetyPolicies": [
    enum (SafetyPolicy)
  ]
}

環境

ウェブブラウザなど、操作されている環境を表します。

列挙型
ENVIRONMENT_UNSPECIFIED デフォルトは browser です。
ENVIRONMENT_BROWSER ウェブブラウザで動作します。
ENVIRONMENT_MOBILE モバイル環境で動作する。
ENVIRONMENT_DESKTOP デスクトップ環境で動作する。

SafetyPolicy

コンピュータの使用に関する事前定義された安全ポリシー。

列挙型
SAFETY_POLICY_UNSPECIFIED 未指定の安全ポリシー。
FINANCIAL_TRANSACTIONS 金融取引に関する安全性ポリシー。
SENSITIVE_DATA_MODIFICATION 機密データの変更に関する安全ポリシー。
COMMUNICATION_TOOL コミュニケーション ツール(Gmail、Chat、Meet など)の安全ポリシー。
ACCOUNT_CREATION アカウント作成に関する安全ポリシー。
DATA_MODIFICATION データ変更の安全ポリシー。
LEGAL_TERMS_AND_AGREEMENTS 法的条件と契約に関する安全ポリシー。

UrlContext

この型にはフィールドがありません。

URL コンテキストの取得をサポートするツール。

FileSearch

セマンティック検索コーパスからナレッジを取得する FileSearch ツール。ファイルは、ImportFile API を使用してセマンティック検索コーパスにインポートされます。

フィールド
fileSearchStoreNames[] string

必須。取得元の fileSearchStore の名前。例: fileSearchStores/my-file-search-store-123

metadataFilter string

省略可。セマンティック検索のドキュメントとチャンクに適用するメタデータ フィルタ。

topK integer

省略可。取得するセマンティック検索チャンクの数。

JSON 表現
{
  "fileSearchStoreNames": [
    string
  ],
  "metadataFilter": string,
  "topK": integer
}

McpServer

MCPServer は、モデルから呼び出されてアクションを実行できるサーバーです。MCP プロトコルを実装するサーバーです。

フィールド
name string

MCPServer の名前。

transport Union type
MCPServer への接続に使用するトランスポート。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
streamableHttpTransport object (StreamableHttpTransport)

HTTP リクエストとレスポンスをストリーミングできるトランスポート。

相互に排他的なフィールドの終了。
JSON 表現
{
  "name": string,

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

StreamableHttpTransport

HTTP リクエストとレスポンスをストリーミングできるトランスポート。

フィールド
url string

MCPServer エンドポイントの完全な URL。例: "https://api.example.com/mcp"

headers map (key: string, value: string)

省略可: 必要に応じて、認証ヘッダー、タイムアウトなどのフィールド。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

timeout string (Duration format)

通常のオペレーションの HTTP タイムアウト。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"。

sseReadTimeout string (Duration format)

SSE 読み取りオペレーションのタイムアウト。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"。

terminateOnClose boolean

トランスポートが閉じるときにクライアント セッションを閉じるかどうか。

JSON 表現
{
  "url": string,
  "headers": {
    string: string,
    ...
  },
  "timeout": string,
  "sseReadTimeout": string,
  "terminateOnClose": boolean
}

GoogleMaps

ユーザーのクエリに地理空間コンテキストを提供する GoogleMaps ツール。

フィールド
enableWidget boolean

省略可。レスポンスの GroundingMetadata でウィジェット コンテキスト トークンを返すかどうか。デベロッパーは、ウィジェット コンテキスト トークンを使用して、モデルがレスポンスで参照する場所に関連する地理空間コンテキストを含む Google マップ ウィジェットをレンダリングできます。

JSON 表現
{
  "enableWidget": boolean
}

REST リソース: auth_tokens

リソース: AuthToken

エフェメラル認証トークンを作成するリクエスト。

フィールド
name string

出力専用。ID。トークン自体。

expireTime string (Timestamp format)

省略可。入力専用。変更不可。生成されたトークンを使用する場合に、BidiGenerateContent セッションのメッセージが拒否されるまでの時間(省略可)。(この時間を過ぎると、Gemini はセッションを事前に終了することがあります)。

設定しない場合、デフォルトは 30 分後になります。この値を設定する場合は、20 時間未満の将来の日時にする必要があります。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

newSessionExpireTime string (Timestamp format)

省略可。入力専用。変更不可。このリクエストの結果として生成されたトークンを使用する新しい Live API セッションが拒否されるまでの時間。

設定しない場合、デフォルトは 60 秒後になります。この値を設定する場合は、20 時間未満の将来の日時にする必要があります。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

fieldMask string (FieldMask format)

省略可。入力専用。変更不可。fieldMask が空で、bidiGenerateContentSetup が存在しない場合、有効な BidiGenerateContentSetup メッセージは Live API 接続から取得されます。

fieldMask が空で、bidiGenerateContentSetup が存在する場合、有効な BidiGenerateContentSetup メッセージは、このリクエストの bidiGenerateContentSetup から完全に取得されます。Live API 接続からの設定メッセージは無視されます。

fieldMask が空でない場合、bidiGenerateContentSetup の対応するフィールドが、Live API 接続のセットアップ メッセージのフィールドを上書きします。

完全修飾フィールド名のカンマ区切りリスト。例: "user.displayName,photo"。

config Union type
生成されるトークンのメソッド固有の構成。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
bidiGenerateContentSetup object (BidiGenerateContentSetup)

省略可。入力専用。変更不可。BidiGenerateContent に固有の構成。

相互に排他的なフィールドの終了。
uses integer

省略可。入力専用。変更不可。トークンを使用できる回数。この値が 0 の場合、上限は適用されません。Live API セッションの再開は、使用としてカウントされません。指定しない場合、デフォルトは 1 です。

JSON 表現
{
  "name": string,
  "expireTime": string,
  "newSessionExpireTime": string,
  "fieldMask": string,

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

BidiGenerateContentSetup

最初の BidiGenerateContentClientMessage でのみ送信されるメッセージ。ストリーミング RPC の期間に適用される構成が含まれています。

クライアントは、BidiGenerateContentSetupComplete メッセージを待って、追加メッセージを送信する必要があります。

フィールド
model string

必須。モデルのリソース名。これは、使用するモデルの ID として機能します。

形式: models/{model}

generationConfig object (GenerationConfig)

省略可。生成の構成。

次のフィールドはサポートされていません。

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

省略可。ユーザーがモデルに提供するシステム指示。

注: パートにはテキストのみを使用します。各パートのコンテンツは別の段落にします。

tools[] object (Tool)

省略可。モデルが次のレスポンスの生成に使用できる Tools のリスト。

Tool は、システムが外部システムと対話して、モデルの知識や範囲外のアクションまたは一連のアクションを実行できるようにするコードです。

realtimeInputConfig object (RealtimeInputConfig)

省略可。リアルタイム入力の処理を構成します。

sessionResumption object (SessionResumptionConfig)

省略可。セッション再開メカニズムを構成します。

含まれている場合、サーバーは SessionResumptionUpdate メッセージを送信します。

contextWindowCompression object (ContextWindowCompressionConfig)

省略可。コンテキスト ウィンドウの圧縮メカニズムを構成します。

含まれている場合、サーバーはコンテキストのサイズが構成された長さを超えると、自動的にサイズを縮小します。

inputAudioTranscription object (AudioTranscriptionConfig)

省略可。設定すると、音声入力の文字起こしが有効になります。音声文字変換は、入力音声の言語(構成されている場合)と一致します。

outputAudioTranscription object (AudioTranscriptionConfig)

省略可。設定すると、モデルの音声出力の文字変換が有効になります。音声文字変換は、出力音声に指定された言語コードに従って行われます(構成されている場合)。

historyConfig object (HistoryConfig)

省略可。クライアントとサーバー間の履歴の交換を構成します。

labels map (key: string, value: string)

省略可。リクエストのユーザー定義のメタデータを含むラベル。

省略可。ラベルは、標準の統合 Cloud ラベルの要件に従う必要があります。- ラベルキーの先頭は英字にする必要があります。- ラベルのキーと値は 63 文字(Unicode コードポイント)以下にする必要があります。使用できるのは小文字、数字、アンダースコア、ダッシュのみです。- 国際文字も使用できます。

使用方法: - アグリゲータの安全識別子: キー safety_identifier(例: {"safety_identifier": "user_session_123"})を使用します。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

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)
  },
  "labels": {
    string: string,
    ...
  }
}

GenerationConfig

モデルの生成と出力の構成オプション。すべてのモデルですべてのパラメータを構成できるわけではありません。

フィールド
stopSequences[] string

省略可。出力の生成を停止する文字シーケンスのセット(最大 5 つ)。指定すると、API は stop_sequence が最初に出現した時点で停止します。停止シーケンスはレスポンスには含まれません。

responseMimeType string

省略可。生成された候補テキストの MIME タイプ。サポートされている MIME タイプは次のとおりです。text/plain:(デフォルト)テキスト出力。application/json: レスポンス候補の JSON レスポンス。text/x.enum: レスポンス候補の文字列レスポンスとしての ENUM。サポートされているすべてのテキスト MIME タイプのリストについては、ドキュメントをご覧ください。

responseSchema
(deprecated)
object (Schema)

省略可。生成された候補テキストの出力スキーマ。スキーマは OpenAPI スキーマのサブセットである必要があり、オブジェクト、プリミティブ、配列のいずれかになります。

設定する場合は、互換性のある responseMimeType も設定する必要があります。互換性のある MIME タイプ: application/json: JSON レスポンスのスキーマ。詳細については、JSON テキスト生成ガイドをご覧ください。

非推奨です。responseFormat を代わりに使用してください。

_responseJsonSchema
(deprecated)
value (Value format)

省略可。生成されたレスポンスの出力スキーマ。これは、JSON スキーマを受け入れる responseSchema の代替手段です。

設定する場合は、responseSchema を省略する必要がありますが、responseMimeType は必須です。

完全な JSON スキーマを送信できますが、すべての機能がサポートされているわけではありません。具体的には、次のプロパティのみがサポートされています。

  • $id
  • $defs
  • $ref
  • $anchor
  • type
  • format
  • title
  • description
  • enum(文字列と数値の場合)
  • items
  • prefixItems
  • minItems
  • maxItems
  • minimum
  • maximum
  • anyOf
  • oneOf(anyOf と同じように解釈されます)
  • properties
  • additionalProperties
  • required

非標準の propertyOrdering プロパティが設定されている場合もあります。

循環参照は、限られた範囲で展開されるため、必須でないプロパティ内でのみ使用できます。(null 値許容プロパティだけでは不十分です)。$ref がサブスキーマに設定されている場合、$ で始まるプロパティ以外のプロパティは設定できません。

非推奨です。代わりに responseFormat を使用してください。

responseJsonSchema value (Value format)

省略可。内部の詳細。このフィールドではなく responseJsonSchema を使用してください。

responseModalities[] enum (Modality)

省略可。リクエストされたレスポンスのモダリティ。モデルが返すことができ、レスポンスで想定されるモダリティのセットを表します。これは、レスポンスのモダリティと完全一致します。

モデルには、サポートされているモダリティの組み合わせが複数存在する場合があります。リクエストされたモダリティがサポートされている組み合わせのいずれとも一致しない場合は、エラーが返されます。

空のリストは、テキストのみをリクエストすることと同じです。

candidateCount integer

省略可。返す生成されたレスポンスの数。設定しない場合、デフォルトで 1 になります。なお、この機能は前世代のモデル(Gemini 1.0 ファミリー)では動作しません。

maxOutputTokens integer

省略可。レスポンス候補に含めるトークンの最大数。

注: デフォルト値はモデルによって異なります。getModel 関数から返される Model の Model.output_token_limit 属性をご覧ください。

temperature number

省略可。出力のランダム性を制御します。

注: デフォルト値はモデルによって異なります。getModel 関数から返される Model の Model.temperature 属性をご覧ください。

値の範囲は [0.0, 2.0] です。

このフィールドはサポートが終了し、Gemini 3.6 Flash 以降のモデルでは無視されます。

topP number

省略可。サンプリング時に考慮するトークンの最大累積確率。

このモデルでは、Top-K と Top-P(Nucleus)のサンプリングを組み合わせて使用します。

トークンは、割り当てられた確率に基づいて並べ替えられ、最も可能性の高いトークンのみが考慮されます。Top-K サンプリングは、考慮するトークンの最大数を直接制限します。一方、Nucleus サンプリングは、累積確率に基づいてトークンの数を制限します。

注: デフォルト値は Model によって異なり、getModel 関数から返される Model.top_p 属性によって指定されます。topK 属性が空の場合、モデルは Top-K サンプリングを適用せず、リクエストで topK を設定できません。

このフィールドはサポートが終了し、Gemini 3.6 Flash 以降のモデルでは無視されます。

topK integer

省略可。サンプリング時に考慮するトークンの最大数。

Gemini モデルは、Top-P(Nucleus)サンプリング、または Top-K と Nucleus サンプリングの組み合わせを使用します。Top-K サンプリングでは、最も確率の高い topK 個のトークンのセットが考慮されます。Nucleus サンプリングで実行されているモデルでは、topK 設定は許可されません。

注: デフォルト値は Model によって異なり、getModel 関数から返される Model.top_p 属性によって指定されます。topK 属性が空の場合、モデルは Top-K サンプリングを適用せず、リクエストで topK を設定できません。

このフィールドはサポートが終了し、Gemini 3.6 Flash 以降のモデルでは無視されます。

seed integer

省略可。デコードで使用されるシード。設定されていない場合、リクエストはランダムに生成されたシードを使用します。

presencePenalty number

省略可。トークンがレスポンスにすでに表示されている場合、次のトークンの logprobs に適用されるプレゼンス ペナルティ。

このペナルティはバイナリのオン/オフであり、トークンが使用された回数(初回以降)には依存しません。使用するたびにペナルティが増加する場合は、frequencyPenalty を使用します。

正のペナルティは、レスポンスですでに使用されているトークンの使用を抑制し、語彙を増やします。

負のペナルティは、レスポンスですでに使用されているトークンの使用を促し、語彙を減らします。

frequencyPenalty number

省略可。次のトークンの logprob に適用される頻度ペナルティ。各トークンがこれまでにレスポンスに表示された回数を乗算します。

正のペナルティは、すでに使用されているトークンの使用を抑制します。これは、トークンが使用された回数に比例します。トークンが使用されるほど、モデルがそのトークンを再度使用することが難しくなり、レスポンスの語彙が増えます。

注意: 負のペナルティを指定すると、トークンが使用された回数に比例して、モデルがトークンを再利用するようになります。小さな負の値は、レスポンスの語彙を減らします。負の値が大きいほど、モデルは maxOutputTokens の上限に達するまで、一般的なトークンを繰り返し生成するようになります。

responseLogprobs boolean

省略可。true の場合、レスポンスで logprobs の結果をエクスポートします。

logprobs integer

省略可。responseLogprobs=True の場合にのみ有効です。これにより、Candidate.logprobs_result の各デコード ステップで返される、選択された候補を含む上位の logprob の数が設定されます。数値は [0, 20] の範囲内にする必要があります。

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)

省略可。音声文字変換(音声認識)の構成。

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)
  }
}

モダリティ

レスポンスのサポートされているモダリティ。

列挙型
MODALITY_UNSPECIFIED デフォルト値。
TEXT モデルがテキストを返すことを示します。
IMAGE モデルが画像を返す必要があることを示します。
AUDIO モデルが音声を返す必要があることを示します。

SpeechConfig

音声生成と音声文字変換の構成。

フィールド
voiceConfig object (VoiceConfig)

単一音声出力の場合の構成。

multiSpeakerVoiceConfig object (MultiSpeakerVoiceConfig)

省略可。マルチスピーカー設定の構成。voiceConfig フィールドとは相互に排他的です。

languageCode string

省略可。ユーザーがアプリで使用するように構成した IETF BCP-47 言語コード。音声認識と音声合成に使用されます。

有効な値は、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、th-TH です。

JSON 表現
{
  "voiceConfig": {
    object (VoiceConfig)
  },
  "multiSpeakerVoiceConfig": {
    object (MultiSpeakerVoiceConfig)
  },
  "languageCode": string
}

VoiceConfig

使用する音声の構成。

フィールド
voice_config Union type
使用するスピーカーの構成。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
prebuiltVoiceConfig object (PrebuiltVoiceConfig)

使用する事前構築済み音声の構成。

voice string

省略可。合成用の話者識別子。サポートされている形式:

  • 事前構築済み音声の話者名(Orus、Kore など)。
  • 保存された音声の音声 ID(例: voice_xxx)。
  • ボイス レプリケーション キー(例: voicekey_xxx)。
相互に排他的なフィールドの終了。
JSON 表現
{

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

PrebuiltVoiceConfig

使用する事前構築済みスピーカーの構成。

フィールド
voiceName string

省略可。使用するプリセット音声の名前。

JSON 表現
{
  "voiceName": string
}

MultiSpeakerVoiceConfig

マルチスピーカー設定の構成。

フィールド
speakerVoiceConfigs[] object (SpeakerVoiceConfig)

必須。有効になっているすべてのスピーカーの声。

JSON 表現
{
  "speakerVoiceConfigs": [
    {
      object (SpeakerVoiceConfig)
    }
  ]
}

SpeakerVoiceConfig

マルチスピーカー設定における単一スピーカーの構成。

フィールド
speaker string

必須。使用するスピーカーの名前。プロンプトと同じにする必要があります。

voiceConfig object (VoiceConfig)

必須。使用する音声の構成。

JSON 表現
{
  "speaker": string,
  "voiceConfig": {
    object (VoiceConfig)
  }
}

ThinkingConfig

思考機能の構成。

フィールド
includeThoughts boolean

レスポンスに思考を含めるかどうかを示します。true の場合、思考は利用可能な場合にのみ返されます。

thinkingBudget integer

モデルが生成する思考トークンの数。

thinkingLevel enum (ThinkingLevel)

省略可。モデルがレスポンスを生成する前に実行する内部推論プロセスの最大深度を制御します。デフォルト値はモデルによって異なります。詳しくは、思考レベルのガイドをご覧ください。Gemini 3 以降のモデルにおすすめです。以前のモデルで使用するとエラーが発生します。

JSON 表現
{
  "includeThoughts": boolean,
  "thinkingBudget": integer,
  "thinkingLevel": enum (ThinkingLevel)
}

ThinkingLevel

整数予算ではなく列挙型を使用して、思考量をユーザーが指定できるようにします。

列挙型
THINKING_LEVEL_UNSPECIFIED デフォルト値。
MINIMAL ほとんど考える必要がない。
LOW 思考レベルが低い。
MEDIUM 中程度の思考レベル。
HIGH 高度な思考レベル。

ImageConfig

画像生成機能の構成。

フィールド
aspectRatio string

省略可。生成する画像のアスペクト比。サポートされているアスペクト比: 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、21:9。

指定しない場合、モデルは提供された参照画像に基づいてデフォルトのアスペクト比を選択します。

imageSize string

省略可。生成される画像のサイズを指定します。サポートされている値は、512、1K、2K、4K です。指定しない場合、モデルはデフォルト値 1K を使用します。

JSON 表現
{
  "aspectRatio": string,
  "imageSize": string
}

MediaResolution

入力メディアのメディア解像度。

列挙型
MEDIA_RESOLUTION_UNSPECIFIED メディアの解像度が設定されていません。
MEDIA_RESOLUTION_LOW メディアの解像度が低(64 トークン)に設定されている。
MEDIA_RESOLUTION_MEDIUM メディアの解像度が中(256 トークン)に設定されている。
MEDIA_RESOLUTION_HIGH メディアの解像度が高に設定されている(256 トークンでズームされたリフレーミング)。

ResponseFormatConfig

レスポンス出力形式の構成。これは、オプションの各サブフィールドが特定の出力モダリティを構成するフラット オブジェクトです。

フィールド
text object (TextResponseFormat)

省略可。テキスト出力形式の構成。

audio object (AudioResponseFormat)

省略可。音声出力形式の構成。

image object (ImageResponseFormat)

省略可。画像出力形式の構成。

JSON 表現
{
  "text": {
    object (TextResponseFormat)
  },
  "audio": {
    object (AudioResponseFormat)
  },
  "image": {
    object (ImageResponseFormat)
  }
}

TextResponseFormat

テキスト出力形式の構成。

フィールド
mimeType enum (MimeType)

省略可。テキスト出力の MIME タイプ。

schema value (Value format)

省略可。出力が準拠する必要がある JSON スキーマ。mimeType が APPLICATION_JSON の場合にのみ適用されます。

JSON 表現
{
  "mimeType": enum (MimeType),
  "schema": value
}

MimeType

テキスト出力でサポートされている MIME タイプ。

列挙型
MIME_TYPE_UNSPECIFIED デフォルト値。この値は使用されません。
APPLICATION_JSON JSON 出力形式。
TEXT_PLAIN 書式なしテキストの出力形式。

AudioResponseFormat

音声出力形式の構成。

フィールド
mimeType enum (MimeType)

省略可。音声出力の MIME タイプ。

delivery enum (Delivery)

省略可。音声出力の配信モード。

sampleRate integer

省略可。サンプルレート(Hz)。

bitRate integer

省略可。ビットレート(ビット/秒、bps)。圧縮形式(MP3、Opus)にのみ適用されます。

JSON 表現
{
  "mimeType": enum (MimeType),
  "delivery": enum (Delivery),
  "sampleRate": integer,
  "bitRate": integer
}

MimeType

音声出力でサポートされている MIME タイプ。

列挙型
MIME_TYPE_UNSPECIFIED デフォルト値。この値は使用されません。
AUDIO_MP3 MP3 音声形式。
AUDIO_OGG_OPUS OGG Opus 音声形式。
AUDIO_L16 未加工の PCM(L16)オーディオ形式。
AUDIO_WAV WAV 音声形式。
AUDIO_ALAW A-law 音声形式。
AUDIO_MULAW Mu-law 音声形式。

配信

音声出力の配信モード。

列挙型
DELIVERY_UNSPECIFIED デフォルト値。この値は使用されません。
INLINE 音声データはレスポンスでインラインで返されます。
URI 音声データは URI として返されます。

ImageResponseFormat

画像出力形式の構成。

フィールド
mimeType enum (MimeType)

省略可。画像出力の MIME タイプ。

delivery enum (Delivery)

省略可。画像出力の配信モード。

aspectRatio enum (AspectRatio)

省略可。画像出力のアスペクト比。

imageSize enum (ImageSize)

省略可。画像出力のサイズ。

JSON 表現
{
  "mimeType": enum (MimeType),
  "delivery": enum (Delivery),
  "aspectRatio": enum (AspectRatio),
  "imageSize": enum (ImageSize)
}

MimeType

画像出力でサポートされている MIME タイプ。

列挙型
MIME_TYPE_UNSPECIFIED デフォルト値。この値は使用されません。
IMAGE_JPEG JPEG 画像形式。

配信

画像出力の配信モード。

列挙型
DELIVERY_UNSPECIFIED デフォルト値。この値は使用されません。
INLINE 画像データはレスポンスでインラインで返されます。
URI 画像データは URI として返されます。

アスペクト比

画像出力でサポートされているアスペクト比。

列挙型
ASPECT_RATIO_UNSPECIFIED デフォルト値。この値は使用されません。
ASPECT_RATIO_ONE_BY_ONE アスペクト比 1:1。
ASPECT_RATIO_TWO_BY_THREE アスペクト比 2:3。
ASPECT_RATIO_THREE_BY_TWO アスペクト比 3:2。
ASPECT_RATIO_THREE_BY_FOUR アスペクト比 3:4。
ASPECT_RATIO_FOUR_BY_THREE アスペクト比 4:3。
ASPECT_RATIO_FOUR_BY_FIVE アスペクト比 4:5。
ASPECT_RATIO_FIVE_BY_FOUR アスペクト比 5:4。
ASPECT_RATIO_NINE_BY_SIXTEEN アスペクト比 9:16。
ASPECT_RATIO_SIXTEEN_BY_NINE アスペクト比 16:9。
ASPECT_RATIO_TWENTY_ONE_BY_NINE アスペクト比 21:9。
ASPECT_RATIO_ONE_BY_EIGHT アスペクト比 1:8。
ASPECT_RATIO_EIGHT_BY_ONE アスペクト比 8:1。
ASPECT_RATIO_ONE_BY_FOUR アスペクト比 1:4。
ASPECT_RATIO_FOUR_BY_ONE アスペクト比 4:1。

ImageSize

画像出力でサポートされている画像サイズ。

列挙型
IMAGE_SIZE_UNSPECIFIED デフォルト値。この値は使用されません。
IMAGE_SIZE_FIVE_TWELVE 画像サイズは 512 ピクセル。
IMAGE_SIZE_ONE_K 1K の画像サイズ。
IMAGE_SIZE_TWO_K 2K 画像サイズ。
IMAGE_SIZE_FOUR_K 4K 画像サイズ。

TranslationConfig

翻訳機能の構成。

フィールド
targetLanguageCode string

必須。翻訳のターゲット言語。サポートされている値は、BCP-47 言語コード(「en」、「es」、「fr」など)です。

echoTargetLanguage boolean

省略可。true の場合、モデルはターゲット言語が話されたときに音声を生成します。基本的に、入力がそのまま繰り返されます。false の場合、ターゲット言語の音声は生成されません。

JSON 表現
{
  "targetLanguageCode": string,
  "echoTargetLanguage": boolean
}

AudioTranscriptionConfig

音声文字変換の構成。

フィールド
languageCodes[] string

省略可。音声に存在する言語に関するヒントを提供する BCP-47 言語コード。省略するか空のままにすると、デフォルトで言語の自動検出が行われます。

adaptationPhrases[]
(deprecated)
string

省略可。音声適応に使用されるフレーズのリスト。ASR モデルをバイアスして、これらの特定の用語の認識を改善します。

customVocabulary[] string

省略可。音声認識モデルが特定の用語(商品名、固有名詞、専門用語)を認識するようにバイアスをかけるカスタム語彙フレーズのリスト。

wordTimestamp boolean

省略可。単語レベルのタイムスタンプの生成を構成します。

diarization boolean

省略可。話者ダイアライゼーションを構成します。

mode enum (Mode)

省略可。音声文字変換モードを構成します。サポートされている値は、VERBATIM、SMART です。指定しない場合、デフォルトで VERBATIM 音声文字変換になります。SMART モードでは、モデルは言いよどみの除去(つなぎ言葉、繰り返し、言い直しの削除)、軽微な文法修正、自動書式設定(段落、箇条書き、番号付きリスト)、軽微なユーザー編集(インラインの自己修正)を行います。タイムスタンプとダイアライゼーションは、モード SMART と互換性がありません。

language_config Union type
非推奨: 代わりに、最上位の language_codes を使用してください。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
languageAuto
(deprecated)
object (LanguageAuto)

省略可。モデルは言語を自動的に検出します。

languageHints
(deprecated)
object (LanguageHints)

省略可。音声内の 1 つ以上の言語を指定します。

相互に排他的なフィールドの終了。
JSON 表現
{
  "languageCodes": [
    string
  ],
  "adaptationPhrases": [
    string
  ],
  "customVocabulary": [
    string
  ],
  "wordTimestamp": boolean,
  "diarization": boolean,
  "mode": enum (Mode),

  // language_config
  "languageAuto": {
    object (LanguageAuto)
  },
  "languageHints": {
    object (LanguageHints)
  }
  // Union type
}

LanguageAuto

この型にはフィールドがありません。

音声の言語を自動的に検出する必要があることを示します。

LanguageHints

音声に存在する可能性のある言語に関するヒントをモデルに提供します。

フィールド
languageCodes[]
(deprecated)
string

必須。BCP-47 言語コード。

JSON 表現
{
  "languageCodes": [
    string
  ]
}

モード

音声文字変換モード。

列挙型
MODE_UNSPECIFIED 音声文字変換モードが指定されていません。
VERBATIM 逐語的な音声文字変換モード。
SMART スマート音声文字変換モード。

RealtimeInputConfig

BidiGenerateContent でリアルタイム入力の動作を構成します。

フィールド
automaticActivityDetection object (AutomaticActivityDetection)

省略可。設定されていない場合、デフォルトでアクティビティの自動検出が有効になります。自動音声検出が無効になっている場合、クライアントはアクティビティ シグナルを送信する必要があります。

activityHandling enum (ActivityHandling)

省略可。アクティビティの効果を定義します。

turnCoverage enum (TurnCoverage)

省略可。ユーザーのターンに含まれる入力を定義します。

interimTranscriptTimestampEnabled boolean

省略可。中間音声文字変換のタイムスタンプを構成します。

JSON 表現
{
  "automaticActivityDetection": {
    object (AutomaticActivityDetection)
  },
  "activityHandling": enum (ActivityHandling),
  "turnCoverage": enum (TurnCoverage),
  "interimTranscriptTimestampEnabled": boolean
}

AutomaticActivityDetection

アクティビティの自動検出を構成します。

フィールド
disabled boolean

省略可。有効にすると(デフォルト)、検出された音声入力とテキスト入力がアクティビティとしてカウントされます。無効になっている場合、クライアントはアクティビティ シグナルを送信する必要があります。

startOfSpeechSensitivity enum (StartSensitivity)

省略可。音声が検出される可能性を決定します。

prefixPaddingMs integer

省略可。発話の開始がコミットされる前に検出された発話の必要な時間。この値が小さいほど、発話の開始の検出感度が高くなり、短い発話も認識できるようになります。ただし、誤検出の可能性も高くなります。

endOfSpeechSensitivity enum (EndSensitivity)

省略可。検出された音声が終了する可能性を判断します。

silenceDurationMs integer

省略可。発話終了が確定するまでに検出された発話以外の音声(無音など)の必要な時間。この値を大きくすると、ユーザーの操作を中断することなく音声のギャップを長くすることができますが、モデルのレイテンシが増加します。

JSON 表現
{
  "disabled": boolean,
  "startOfSpeechSensitivity": enum (StartSensitivity),
  "prefixPaddingMs": integer,
  "endOfSpeechSensitivity": enum (EndSensitivity),
  "silenceDurationMs": integer
}

StartSensitivity

音声の開始を検出する方法を決定します。

列挙型
START_SENSITIVITY_UNSPECIFIED デフォルトは START_SENSITIVITY_HIGH です。
START_SENSITIVITY_HIGH 自動検出では、音声の開始がより頻繁に検出されます。
START_SENSITIVITY_LOW 自動検出では、音声の開始が検出される頻度が低くなります。

EndSensitivity

音声の終了を検出する方法を決定します。

列挙型
END_SENSITIVITY_UNSPECIFIED デフォルトは END_SENSITIVITY_HIGH です。
END_SENSITIVITY_HIGH 自動検出では、音声が終了する頻度が高くなります。
END_SENSITIVITY_LOW 自動検出では、音声が終了する頻度が少なくなります。

ActivityHandling

ユーザー アクティビティのさまざまな処理方法。

列挙型
ACTIVITY_HANDLING_UNSPECIFIED 指定しない場合、デフォルトの動作は START_OF_ACTIVITY_INTERRUPTS です。
START_OF_ACTIVITY_INTERRUPTS true の場合、アクティビティの開始によってモデルのレスポンスが中断されます(「割り込み」とも呼ばれます)。中断した時点で、モデルの現在のレスポンスは切り捨てられます。これはデフォルトの動作です。
NO_INTERRUPTION モデルのレスポンスが中断されることはありません。

TurnCoverage

ユーザーのターンに含める入力に関するオプション。

列挙型
TURN_COVERAGE_UNSPECIFIED 指定しない場合、モデルに基づいてデフォルトの動作が選択されます。たとえば、Gemini 2.5 のデフォルトは TURN_INCLUDES_ONLY_ACTIVITY ですが、Gemini 3.1 以降では TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO です。
TURN_INCLUDES_ONLY_ACTIVITY 前回のターン以降のアクティビティが含まれ、非アクティビティ(音声ストリームの無音など)は除外されます。
TURN_INCLUDES_ALL_INPUT 前回のターン以降のすべてのリアルタイム入力(音声ストリームの無音など、操作がない状態を含む)が含まれます。
TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO 音声アクティビティと、前回のターン以降のすべての動画が含まれます。アクティビティの自動検出では、音声アクティビティは発話を意味し、無音は除外されます。

SessionResumptionConfig

セッション再開の構成。

このメッセージは、セッション構成に BidiGenerateContentSetup.session_resumption として含まれています。構成されている場合、サーバーは SessionResumptionUpdate メッセージを送信します。

フィールド
handle string

前のセッションのハンドル。存在しない場合は、新しいセッションが作成されます。

セッション ハンドルは、以前の接続の SessionResumptionUpdate.token 値から取得されます。

JSON 表現
{
  "handle": string
}

ContextWindowCompressionConfig

コンテキスト ウィンドウの圧縮を有効にします。これは、モデルのコンテキスト ウィンドウが指定された長さを超えないように管理するメカニズムです。

フィールド
compression_mechanism Union type
使用されるコンテキスト ウィンドウの圧縮メカニズム。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
slidingWindow object (SlidingWindow)

スライディング ウィンドウ メカニズム。

相互に排他的なフィールドの終了。
triggerTokens string (int64 format)

コンテキスト ウィンドウの圧縮をトリガーするために必要なトークン数(ターンを実行する前)。

コンテキスト ウィンドウが短いほどモデルのレスポンスが速くなる可能性があるため、これを使用して品質とレイテンシのバランスを取ることができます。ただし、圧縮オペレーションは一時的にレイテンシを増加させるため、頻繁にトリガーしないでください。

設定しない場合、デフォルトはモデルのコンテキスト ウィンドウの上限の 80% です。これにより、次のユーザー リクエスト/モデル レスポンスに 20% が残ります。

JSON 表現
{

  // compression_mechanism
  "slidingWindow": {
    object (SlidingWindow)
  }
  // Union type
  "triggerTokens": string
}

SlidingWindow

SlidingWindow メソッドは、コンテキスト ウィンドウの先頭にあるコンテンツを破棄することで動作します。結果のコンテキストは、常に USER ロールのターンの開始時に始まります。システム指示と BidiGenerateContentSetup.prefix_turns は、常に結果の先頭に残ります。

フィールド
targetTokens string (int64 format)

保持するトークンの目標数。デフォルト値は triggerTokens/2 です。

コンテキスト ウィンドウの一部を破棄すると、一時的にレイテンシが増加するため、頻繁な圧縮オペレーションを回避するようにこの値を調整する必要があります。

JSON 表現
{
  "targetTokens": string
}

HistoryConfig

履歴の構成。

このメッセージは、セッション構成に BidiGenerateContentSetup.history_config として含まれています。履歴メッセージの交換を構成します。

フィールド
initialHistoryInClientContent boolean

省略可。true の場合、setupComplete を送信した後、サーバーは待機し、turnComplete が true になるまで clientContent メッセージを処理します。この初期履歴はモデル呼び出しをトリガーせず、ロール MODEL で終了する可能性があります。turnComplete が true になると、クライアントは realtimeInput を介してリアルタイムの会話を開始できます。

JSON 表現
{
  "initialHistoryInClientContent": boolean
}

メソッド: auth_tokens.create

BidiGenerateContent セッションの動作を制限するために使用できるトークンを作成します。

エンドポイント

post https://generativelanguage.googleapis.com/v1beta/auth_tokens

リクエストの本文

リクエストの本文には AuthToken のインスタンスが含まれます。

フィールド
expireTime string (Timestamp format)

省略可。入力専用。変更不可。生成されたトークンを使用する場合に、BidiGenerateContent セッションのメッセージが拒否されるまでの時間(省略可)。(この時間を過ぎると、Gemini はセッションを事前に終了することがあります)。

設定しない場合、デフォルトは 30 分後になります。この値を設定する場合は、20 時間未満の将来の日時にする必要があります。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

newSessionExpireTime string (Timestamp format)

省略可。入力専用。変更不可。このリクエストの結果として生成されたトークンを使用する新しい Live API セッションが拒否されるまでの時間。

設定しない場合、デフォルトは 60 秒後になります。この値を設定する場合は、20 時間未満の将来の日時にする必要があります。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

fieldMask string (FieldMask format)

省略可。入力専用。変更不可。fieldMask が空で、bidiGenerateContentSetup が存在しない場合、有効な BidiGenerateContentSetup メッセージは Live API 接続から取得されます。

fieldMask が空で、bidiGenerateContentSetup が存在する場合、有効な BidiGenerateContentSetup メッセージは、このリクエストの bidiGenerateContentSetup から完全に取得されます。Live API 接続からの設定メッセージは無視されます。

fieldMask が空でない場合、bidiGenerateContentSetup の対応するフィールドが、Live API 接続のセットアップ メッセージのフィールドを上書きします。

完全修飾フィールド名のカンマ区切りリスト。例: "user.displayName,photo"。

config Union type
生成されるトークンのメソッド固有の構成。相互に排他的なフィールドのリストは次のとおりです。レスポンスに設定されるフィールドは、最大 1 つです。
bidiGenerateContentSetup object (BidiGenerateContentSetup)

省略可。入力専用。変更不可。BidiGenerateContent に固有の構成。

相互に排他的なフィールドの終了。
uses integer

省略可。入力専用。変更不可。トークンを使用できる回数。この値が 0 の場合、上限は適用されません。Live API セッションの再開は、使用としてカウントされません。指定しない場合、デフォルトは 1 です。

レスポンスの本文

成功した場合、レスポンスの本文には、新しく作成された AuthToken のインスタンスが含まれます。