Generating content

تتيح واجهة Gemini API إنشاء المحتوى باستخدام الصور والصوت والرموز البرمجية والأدوات والمزيد. للاطّلاع على تفاصيل حول كل ميزة من هذه الميزات، يُرجى مواصلة القراءة والاطّلاع على الرموز النموذجية التي تركّز على المهام، أو قراءة الأدلة الشاملة.

الطريقة: models.generateContent

يُنشئ ردًا من النموذج استنادًا إلى الإدخال GenerateContentRequest. يُرجى الرجوع إلى دليل إنشاء النصوص للحصول على معلومات الاستخدام المفصّلة. تختلف إمكانيات الإدخال بين النماذج، بما في ذلك النماذج المضبوطة. يُرجى الرجوع إلى دليل النماذج ودليل الضبط للاطّلاع على التفاصيل.

نقطة نهاية

منشور https://generativelanguage.googleapis.com/v1beta/{model=models/*}:generateContent

مَعلمات المسار

model string

الحقل مطلوب. اسم Model المطلوب استخدامه لإنشاء الإكمال

التنسيق: models/{model} ويكون بالتنسيق التالي: models/{model}.

نص الطلب

يتضمن نص الطلب بيانات بالبنية التالية:

الحقول
contents[] object (Content)

الحقل مطلوب. محتوى المحادثة الحالية مع النموذج

بالنسبة إلى طلبات البحث التي تتطلّب ردًا واحدًا، يكون هذا مثيلاً واحدًا. بالنسبة إلى طلبات البحث المتعدّدة الأدوار، مثل المحادثة، هذا حقل متكرّر يحتوي على سجلّ المحادثات وأحدث طلب.

tools[] object (Tool)

اختيارية: قائمة بـ Tools التي قد يستخدمها Model لإنشاء الردّ التالي

Tool هو جزء من الرمز البرمجي يتيح للنظام التفاعل مع أنظمة خارجية لتنفيذ إجراء أو مجموعة من الإجراءات خارج نطاق Model ومعرفته. القيمتان المسموح بإدراجهما في السمة Tool هما Function وcodeExecution. لمزيد من المعلومات، يُرجى الرجوع إلى دليلَي استدعاء الدوال وتنفيذ الرموز البرمجية.

toolConfig object (ToolConfig)

اختيارية: إعدادات الأداة لأي Tool محدّد في الطلب. يمكنك الرجوع إلى دليل استدعاء الدوال للاطّلاع على مثال على الاستخدام.

safetySettings[] object (SafetySetting)

اختيارية: قائمة بمثيلات SafetySetting الفريدة لحظر المحتوى غير الآمن

سيتم تنفيذ ذلك في ‎GenerateContentRequest.contents و‎GenerateContentResponse.candidates. يجب ألا يكون هناك أكثر من إعداد واحد لكل نوع من أنواع SafetyCategory. ستحظر واجهة برمجة التطبيقات أي محتوى وردود لا تستوفي الحدود التي تم ضبطها من خلال هذه الإعدادات. تلغي هذه القائمة الإعدادات التلقائية لكل SafetyCategory محدّد في safetySettings. إذا لم يكن هناك SafetySetting لـ SafetyCategory معيّن في القائمة، ستستخدم واجهة برمجة التطبيقات إعداد الأمان التلقائي لتلك الفئة. تتوفّر فئات الضرر HARM_CATEGORY_HATE_SPEECH وHARM_CATEGORY_SEXUALLY_EXPLICIT وHARM_CATEGORY_DANGEROUS_CONTENT وHARM_CATEGORY_HARASSMENT وHARM_CATEGORY_CIVIC_INTEGRITY وHARM_CATEGORY_JAILBREAK. يُرجى الرجوع إلى الدليل للحصول على معلومات مفصّلة عن إعدادات الأمان المتاحة. يمكنك أيضًا الرجوع إلى إرشادات الأمان للتعرّف على كيفية دمج اعتبارات الأمان في تطبيقات الذكاء الاصطناعي.

continuationToken string (bytes format)

اختيارية: رمز مميّز للمتابعة غير واضح يُستخدَم لاستئناف عملية الإنشاء من ردّ سابق على models.generateContent أو models.streamGenerateContent توقّف مع ضبط finishReason على CONTINUATION. يُرجى العِلم أنّ السمة contents إلزامية ويجب أن تكرّر الطلب وسجلّ المحادثة من الطلب الأولي بشكل مطابق عند تقديم رمز المتابعة في طلب.

سلسلة بترميز base64

labels map (key: string, value: string)

اختيارية: التصنيفات التي تحتوي على بيانات وصفية يحدّدها المستخدم للطلب

اختيارية: يجب أن تتّبع التصنيفات متطلبات تصنيفات Cloud الموحّدة العادية: - يجب أن تبدأ مفاتيح التصنيفات بحرف. - يجب ألا يزيد طول مفاتيح التصنيفات وقيمها عن 63 حرفًا (نقاط ترميز Unicode)، ويمكن أن تحتوي فقط على أحرف صغيرة وأحرف رقمية وشرطات سفلية وشرطات عادية. - يُسمح باستخدام الأحرف الدولية.

Usage: - Safety identifiers from aggregators: Use the key safety_identifier (e.g. {"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)

محارة

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

جافا

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)

محارة

# 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

جافا

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)

محارة

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

محارة

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

محارة

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

محارة

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"

جافا

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)

محارة

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

جافا

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

جافا

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

محارة


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'

جافا

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)

محارة

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"

جافا

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

محارة

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

جافا

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)

محارة

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"}}}'

جافا

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.

نقطة نهاية

منشور https://generativelanguage.googleapis.com/v1beta/{model=models/*}:streamGenerateContent

مَعلمات المسار

model string

الحقل مطلوب. اسم Model المطلوب استخدامه لإنشاء الإكمال

التنسيق: models/{model} ويكون بالتنسيق التالي: models/{model}.

نص الطلب

يتضمن نص الطلب بيانات بالبنية التالية:

الحقول
contents[] object (Content)

الحقل مطلوب. محتوى المحادثة الحالية مع النموذج

بالنسبة إلى طلبات البحث التي تتطلّب ردًا واحدًا، يكون هذا مثيلاً واحدًا. بالنسبة إلى طلبات البحث المتعدّدة الأدوار، مثل المحادثة، هذا حقل متكرّر يحتوي على سجلّ المحادثات وأحدث طلب.

tools[] object (Tool)

اختيارية: قائمة بـ Tools التي قد يستخدمها Model لإنشاء الردّ التالي

Tool هو جزء من الرمز البرمجي يتيح للنظام التفاعل مع أنظمة خارجية لتنفيذ إجراء أو مجموعة من الإجراءات خارج نطاق Model ومعرفته. القيمتان المسموح بإدراجهما في السمة Tool هما Function وcodeExecution. لمزيد من المعلومات، يُرجى الرجوع إلى دليلَي استدعاء الدوال وتنفيذ الرموز البرمجية.

toolConfig object (ToolConfig)

اختيارية: إعدادات الأداة لأي Tool محدّد في الطلب. يمكنك الرجوع إلى دليل استدعاء الدوال للاطّلاع على مثال على الاستخدام.

safetySettings[] object (SafetySetting)

اختيارية: قائمة بمثيلات SafetySetting الفريدة لحظر المحتوى غير الآمن

سيتم تنفيذ ذلك في ‎GenerateContentRequest.contents و‎GenerateContentResponse.candidates. يجب ألا يكون هناك أكثر من إعداد واحد لكل نوع من أنواع SafetyCategory. ستحظر واجهة برمجة التطبيقات أي محتوى وردود لا تستوفي الحدود التي تم ضبطها من خلال هذه الإعدادات. تلغي هذه القائمة الإعدادات التلقائية لكل SafetyCategory محدّد في safetySettings. إذا لم يكن هناك SafetySetting لـ SafetyCategory معيّن في القائمة، ستستخدم واجهة برمجة التطبيقات إعداد الأمان التلقائي لتلك الفئة. تتوفّر فئات الضرر HARM_CATEGORY_HATE_SPEECH وHARM_CATEGORY_SEXUALLY_EXPLICIT وHARM_CATEGORY_DANGEROUS_CONTENT وHARM_CATEGORY_HARASSMENT وHARM_CATEGORY_CIVIC_INTEGRITY وHARM_CATEGORY_JAILBREAK. يُرجى الرجوع إلى الدليل للحصول على معلومات مفصّلة عن إعدادات الأمان المتاحة. يمكنك أيضًا الرجوع إلى إرشادات الأمان للتعرّف على كيفية دمج اعتبارات الأمان في تطبيقات الذكاء الاصطناعي.

continuationToken string (bytes format)

اختيارية: رمز مميّز للمتابعة غير واضح يُستخدَم لاستئناف عملية الإنشاء من ردّ سابق على models.generateContent أو models.streamGenerateContent توقّف مع ضبط finishReason على CONTINUATION. يُرجى العِلم أنّ السمة contents إلزامية ويجب أن تكرّر الطلب وسجلّ المحادثة من الطلب الأولي بشكل مطابق عند تقديم رمز المتابعة في طلب.

سلسلة بترميز base64

labels map (key: string, value: string)

اختيارية: التصنيفات التي تحتوي على بيانات وصفية يحدّدها المستخدم للطلب

اختيارية: يجب أن تتّبع التصنيفات متطلبات تصنيفات Cloud الموحّدة العادية: - يجب أن تبدأ مفاتيح التصنيفات بحرف. - يجب ألا يزيد طول مفاتيح التصنيفات وقيمها عن 63 حرفًا (نقاط ترميز Unicode)، ويمكن أن تحتوي فقط على أحرف صغيرة وأحرف رقمية وشرطات سفلية وشرطات عادية. - يُسمح باستخدام الأحرف الدولية.

Usage: - Safety identifiers from aggregators: Use the key safety_identifier (e.g. {"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)
}

محارة

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."}]}]}'

جافا

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

محارة

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

جافا

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

محارة

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

محارة

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

محارة

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

محارة

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. تؤدي واجهة برمجة التطبيقات إلى: - عرض جميع المرشحين المطلوبين أو عدم عرض أي منهم - عدم عرض أي مرشحين على الإطلاق فقط في حال وجود خطأ في الطلب (يُرجى التحقق من 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)

تقييمات أمان الطلب يتوفّر تقييم واحد كحدّ أقصى لكل فئة.

تمثيل 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)

قائمة بالتقييمات الخاصة بأمان الردّ المرشّح

يتوفّر تقييم واحد كحدّ أقصى لكل فئة.

citationMetadata object (CitationMetadata)

للعرض فقط. معلومات الاقتباس للمرشّح الذي أنشأه النموذج

قد تتم تعبئة هذا الحقل بمعلومات التلاوة لأي نص مضمّن في content. وهي عبارة عن فقرات يتم "اقتباسها" من مواد محمية بحقوق الطبع والنشر في بيانات التدريب الخاصة بالنموذج اللغوي الكبير الأساسي.

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 يفتقد الطلب إلى توقيع فكرة واحد على الأقل.
MALFORMED_RESPONSE تم الانتهاء بسبب ردّ مكتوب بشكل غير صحيح.
ESCALATION تمت فلترة الطلب من خلال قاعدة تصعيد.
PUP_LIMITED_DISABLED يشير إلى توقُّف إنشاء الرموز المميّزة لأنّ حساب المستخدم محدود أو غير مفعَّل بسبب انتهاكات "سياسة الاستخدام المحظور".
CONTINUATION تم إيقاف إنشاء الرموز المميّزة لأنّ الردّ بلغ الحدّ الأقصى المسموح به لكل طلب، ولكن لم تكتمل عملية الإنشاء بعد. يمكن مواصلة ردّ النموذج من خلال طلب لاحق باستخدام continuationToken الذي تم عرضه. يُرجى العِلم أنّ maxOutputTokens تراكمي في جميع عمليات الانتقال المتتالية ويجب زيادته أو حذفه بشكل رتيب.

GroundingAttribution

يشير هذا الحقل إلى مصدر ساهم في تقديم إجابة.

الحقول
sourceId object (AttributionSourceId)

للعرض فقط. معرّف المصدر الذي يساهم في تحديد المصدر هذا

content object (Content)

محتوى المصدر المستند إلى الواقع الذي يشكّل هذا الإسناد.

تمثيل JSON
{
  "sourceId": {
    object (AttributionSourceId)
  },
  "content": {
    object (Content)
  }
}

AttributionSourceId

معرّف المصدر الذي يساهم في تحديد المصدر هذا

الحقول
source Union type
في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
groundingPassage object (GroundingPassageId)

معرّف لفقرة مضمّنة

semanticRetrieverChunk object (SemanticRetrieverChunk)

معرّف Chunk تم جلبه من خلال Semantic Retriever

نهاية الحقول التي يستبعد كلّ منها الآخر
تمثيل JSON
{

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

GroundingPassageId

معرّف لجزء ضمن GroundingPassage.

الحقول
passageId string

للعرض فقط. معرّف الفقرة التي تطابق GroundingPassage.id في GenerateAnswerRequest

partIndex integer

للعرض فقط. مؤشر الجزء ضمن GroundingPassage.content في GenerateAnswerRequest.

تمثيل JSON
{
  "passageId": string,
  "partIndex": integer
}

SemanticRetrieverChunk

معرّف Chunk تم استرداده من خلال Semantic Retriever المحدّد في GenerateAnswerRequest باستخدام SemanticRetrieverConfig.

الحقول
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

اختيارية: اسم المورد للرمز المميّز السياقي لأداة "خرائط Google" الذي يمكن استخدامه مع أداة PlacesContextElement لعرض البيانات السياقية. لا تتم تعبئة هذا الحقل إلا في حال تفعيل ميزة "استخدام خرائط Google كمصدر".

تمثيل JSON
{
  "groundingChunks": [
    {
      object (GroundingChunk)
    }
  ],
  "groundingSupports": [
    {
      object (GroundingSupport)
    }
  ],
  "webSearchQueries": [
    string
  ],
  "imageSearchQueries": [
    string
  ],
  "searchEntryPoint": {
    object (SearchEntryPoint)
  },
  "retrievalMetadata": {
    object (RetrievalMetadata)
  },
  "googleMapsWidgetContextToken": string
}

SearchEntryPoint

نقطة الدخول إلى "بحث Google"

الحقول
renderedContent string

اختيارية: مقتطف محتوى على الويب يمكن تضمينه في صفحة ويب أو في WebView لتطبيق

sdkBlob string (bytes format)

اختيارية: تمثّل JSON المرمّزة بترميز Base64 مصفوفة من الصفوف <عبارة البحث، عنوان URL للبحث>.

سلسلة بترميز base64

تمثيل JSON
{
  "renderedContent": string,
  "sdkBlob": string
}

GroundingChunk

يمثّل GroundingChunk جزءًا من الأدلة الداعمة التي تستند إليها ردود النموذج. ويمكن أن يكون جزءًا من الويب أو سياقًا تم استرداده من ملف أو معلومات من "خرائط Google".

الحقول
chunk_type Union type
نوع الجزء في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
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
قيمة البيانات الوصفية يمكن أن تكون سلسلة أو قائمة سلاسل أو رقمًا. في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
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". يتوافق كل قسم في "خرائط Google" مع مكان واحد.

الحقول
uri string

مرجع معرّف الموارد المنتظم (URI) للمكان

title string

عنوان المكان

text string

الوصف النصي للإجابة عن المكان

placeId string

معرّف المكان، بتنسيق places/{placeId}. ويمكن للمستخدم استخدام هذا المعرّف للبحث عن ذلك المكان.

placeAnswerSources object (PlaceAnswerSources)

المصادر التي تقدّم إجابات عن ميزات مكان معيّن في "خرائط Google"

تمثيل JSON
{
  "uri": string,
  "title": string,
  "text": string,
  "placeId": string,
  "placeAnswerSources": {
    object (PlaceAnswerSources)
  }
}

PlaceAnswerSources

مجموعة من المصادر التي تقدّم إجابات حول ميزات مكان معيّن في "خرائط Google" تتوافق كل رسالة PlaceAnswerSources مع مكان معيّن في "خرائط Google". استخدمت أداة "خرائط Google" هذه المصادر للإجابة عن أسئلة حول ميزات المكان (مثلاً: "هل يتوفّر اتصال Wi-Fi في مطعم Foo؟" أو "هل مطعم Foo مناسب لأصحاب الكراسي المتحرّكة؟"). في الوقت الحالي، لا نتيح سوى مقتطفات المراجعات كمصادر.

الحقول
reviewSnippets[] object (ReviewSnippet)

مقتطفات من المراجعات التي يتم استخدامها لإنشاء إجابات حول ميزات مكان معيّن في "خرائط Google"

تمثيل JSON
{
  "reviewSnippets": [
    {
      object (ReviewSnippet)
    }
  ]
}

ReviewSnippet

تتضمّن هذه الفئة مقتطفًا من مراجعة مستخدم تجيب عن سؤال حول ميزات مكان معيّن في "خرائط Google".

الحقول
reviewId string

رقم تعريف المقتطف من المراجعة

googleMapsUri string

رابط يتوافق مع مراجعة المستخدم على "خرائط Google"

title string

عنوان المراجعة

تمثيل JSON
{
  "reviewId": string,
  "googleMapsUri": string,
  "title": string
}

GroundingSupport

دعم التحقّق من المصادر

الحقول
groundingChunkIndices[] integer

اختيارية: قائمة بالفهارس (في 'grounding_chunk' في response.candidate.grounding_metadata) تحدّد الاقتباسات المرتبطة بالادّعاء. على سبيل المثال، يعني [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

فهرس عنصر Part ضمن عنصر Content الرئيسي

startIndex integer

فهرس البداية في الجزء المحدّد، ويُقاس بالبايت. تمثّل هذه السمة الإزاحة من بداية الجزء، وهي قيمة شاملة تبدأ من الصفر.

endIndex integer

فهرس النهاية في الجزء المحدّد، ويُقاس بالبايت تمثّل هذه السمة الإزاحة من بداية الجزء، وهي حصرية وتبدأ من الصفر.

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

قيمة معرّف الرمز المميّز للمرشّح

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: تعليقات سلبية أو ضارة تستهدف الهوية و/أو سمة محمية. DEPRECATED: PaLM-only category, not supported by Gemini models.

HARM_CATEGORY_TOXICITY

PaLM: المحتوى الفظ أو غير اللائق أو النابي DEPRECATED: PaLM-only category, not supported by Gemini models.

HARM_CATEGORY_VIOLENCE

PaLM: يصف سيناريوهات تصوّر العنف ضد فرد أو مجموعة، أو أوصاف عامة لمشاهد دموية. DEPRECATED: PaLM-only category, not supported by Gemini models.

HARM_CATEGORY_SEXUAL

PaLM: يحتوي على إشارات إلى أفعال جنسية أو محتوى بذيء آخر. DEPRECATED: PaLM-only category, not supported by Gemini models.

HARM_CATEGORY_MEDICAL

PaLM: يروّج لنصائح طبية لم يتم التحقّق منها. DEPRECATED: PaLM-only category, not supported by Gemini models.

HARM_CATEGORY_DANGEROUS

PaLM: المحتوى الخطير الذي يروّج لأفعال ضارة أو يسهّل تنفيذها أو يشجّع عليها DEPRECATED: PaLM-only category, not supported by Gemini models.

HARM_CATEGORY_HARASSMENT Gemini - المحتوى الذي يهدف إلى المضايقة
HARM_CATEGORY_HATE_SPEECH Gemini: الكلام الذي يحض على الكراهية والمحتوى المرتبط به
HARM_CATEGORY_SEXUALLY_EXPLICIT Gemini - المحتوى الجنسي الفاضح
HARM_CATEGORY_DANGEROUS_CONTENT Gemini - المحتوى الخطير
HARM_CATEGORY_CIVIC_INTEGRITY

Gemini: المحتوى الذي قد يُستخدم للإضرار بالنزاهة المدنية DEPRECATED: use enableEnhancedCivicAnswers instead.

HARM_CATEGORY_JAILBREAK Gemini: الطلبات التي تحاول تجاوز إرشادات السلامة الخاصة بالنموذج أو مخالفتها (محاولات كسر الحماية)

ModalityTokenCount

تمثّل معلومات احتساب الرموز المميّزة لوسيط واحد.

الحقول
modality enum (Modality)

تمثّل هذه السمة طريقة الإدخال المرتبطة بعدد الرموز المميّزة هذا.

tokenCount integer

عدد الرموز المميّزة

تمثيل JSON
{
  "modality": enum (Modality),
  "tokenCount": integer
}

نمط البيانات

Content Part modality

عمليات التعداد
MODALITY_UNSPECIFIED طريقة غير محدّدة
TEXT نص عادي
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 سيتم السماح بالمحتوى الذي يتضمّن مستوى "ضئيل".
BLOCK_MEDIUM_AND_ABOVE سيتم السماح بالمحتوى الذي يتضمّن مستويات "ضئيلة" و"منخفضة".
BLOCK_ONLY_HIGH سيتم السماح بالمحتوى الذي يحمل التصنيف "ضئيل" و"منخفض" و"متوسط".
BLOCK_NONE سيتم السماح بكل المحتوى.
OFF أوقِف فلتر الأمان.

ServiceTier

فئة الخدمة للطلب

عمليات التعداد
unspecified فئة الخدمة التلقائية، وهي عادية.
standard فئة الخدمة العادية
flex فئة الخدمة Flex
priority فئة الخدمة ذات الأولوية

المحتوى

نوع البيانات المنظَّمة الأساسي الذي يحتوي على محتوى رسالة متعدّد الأجزاء

يتضمّن Content حقل role يحدّد منتج Content وحقل parts يحتوي على بيانات متعددة الأجزاء تتضمّن محتوى دور الرسالة.

الحقول
parts[] object (Part)

تم ترتيب Parts التي تشكّل رسالة واحدة. قد تحتوي الأجزاء على أنواع MIME مختلفة.

role string

اختيارية: منتِج المحتوى يجب أن تكون إما "user" أو "model".

من المفيد ضبطه للمحادثات المتعددة الجولات، وإلا يمكن تركه فارغًا أو غير مضبوط.

تمثيل JSON
{
  "parts": [
    {
      object (Part)
    }
  ],
  "role": string
}

الجزء

نوع بيانات يحتوي على وسائط تشكّل جزءًا من رسالة Content متعددة الأجزاء

يتكوّن Part من بيانات لها نوع بيانات مرتبط بها. يمكن أن يحتوي Part على نوع واحد فقط من الأنواع المقبولة في Part.data.

يجب أن يتضمّن Part نوع MIME ثابتًا من IANA يحدّد نوع الوسائط ونوعها الفرعي إذا تم ملء الحقل inlineData بوحدات بايت أولية.

الحقول
thought boolean

اختيارية: يشير إلى ما إذا كان الجزء من تفكير النموذج.

thoughtSignature string (bytes format)

اختيارية: توقيع غير واضح للفكرة بحيث يمكن إعادة استخدامه في الطلبات اللاحقة.

سلسلة بترميز base64

partMetadata object (Struct format)

بيانات وصفية مخصّصة مرتبطة بالجزء قد يحتاج الوكلاء الذين يستخدمون genai.Part كتمثيل للمحتوى إلى تتبُّع المعلومات الإضافية. على سبيل المثال، يمكن أن يكون اسم ملف أو مصدر ينشأ منه الجزء أو طريقة لتعديد تدفقات أجزاء متعددة.

mediaResolution object (MediaResolution)

اختيارية: دقة وسائط الإدخال

mediaProcessing enum (MediaProcessing)

اختيارية: كيفية معالجة النموذج للوسائط في هذا الجزء لفهمها لا يكون هذا الحقل مفيدًا إلا لأجزاء الفيديو (inlineData أو fileData مع نوع MIME للفيديو). يتم تجاهل هذا الحقل في الأجزاء غير المخصّصة للفيديو.

audioTranscription object (AudioTranscription)

اختيارية: تحويل الصوت (الإدخال أو الإخراج) إلى نص يتم ضبط هذا الخيار فقط عندما يحتوي هذا الجزء على بيانات صوتية.

speechMetadata object (SpeechMetadata)

اختيارية: تشير إلى البيانات الوصفية التي يتم تطبيقها على أجزاء من النص لتخصيص طريقة نطقها أو تركيبها، مثل تحديد هوية المتحدّث أو أسلوب الكلام.

data Union type
في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
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)

طلب استخدام أداة من جهة الخادم تتم تعبئة هذا الحقل عندما يتوقّع النموذج استدعاء أداة يجب تنفيذها على الخادم. من المتوقّع أن يعيد العميل إرسال هذه الرسالة إلى واجهة برمجة التطبيقات.

toolResponse object (ToolResponse)

الناتج من تنفيذ ToolCall من جهة الخادم يملأ العميل هذا الحقل بنتائج تنفيذ ToolCall المقابل.

نهاية الحقول التي يستبعد كلّ منها الآخر
metadata Union type
يتحكّم في المعالجة المسبقة الإضافية للبيانات. يجب ضبط هذه السمة عند توفّر inline_data أو file_data لضبط المعالجة المُسبقة للوسائط الثابتة لكل جزء. في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
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
}

بلوب

وحدات بايت الوسائط الأولية

يجب عدم إرسال النص كوحدات بايت أولية، بل يجب استخدام حقل "text".

الحقول
mimeType string

نوع MIME المتوافق مع معيار IANA لبيانات المصدر. أمثلة على الأنواع المتوافقة: - الصور: 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

اختيارية: يحدّد الاسم المستخدَم للإشارة إلى هذا الملف الثنائي الكبير في النموذج (مثل "my_blob.png"). يُستخدَم كمعرّف مرجعي لملف blob عندما يتم ضبط verbalizationMode على REFERENCE_ONLY.

تمثيل JSON
{
  "mimeType": string,
  "data": string,
  "displayName": string
}

FunctionCall

‫FunctionCall متوقَّع يتم إرجاعه من النموذج ويحتوي على سلسلة تمثّل FunctionDeclaration.name مع الوسيطات وقيمها.

الحقول
id string

اختيارية: المعرّف الفريد لاستدعاء الدالة في حال ملء هذا الحقل، ينفّذ العميل functionCall ويعرض الاستجابة مع id المطابق.

name string

الحقل مطلوب. اسم الدالة المطلوب استدعاؤها يجب أن يتألف من أحرف لاتينية صغيرة أو كبيرة أو أرقام أو أن يحتوي على شرطات سفلية وشرطات، وألا يزيد طوله عن 128 حرفًا.

args object (Struct format)

اختيارية: مَعلمات الدالة وقيمها بتنسيق عنصر JSON

تمثيل JSON
{
  "id": string,
  "name": string,
  "args": {
    object
  }
}

FunctionResponse

يتم استخدام النتيجة الناتجة من FunctionCall التي تحتوي على سلسلة تمثّل FunctionDeclaration.name وعنصر JSON منظَّم يحتوي على أي ناتج من الدالة كسياق للنموذج. يجب أن يحتوي هذا على نتيجةFunctionCall تم إجراؤها بناءً على تنبؤ النموذج.

الحقول
id string

اختيارية: معرّف استدعاء الدالة الذي يخصّه هذا الردّ. يتم ملؤها من قِبل العميل لمطابقة استدعاء الدالة المقابل id.

name string

الحقل مطلوب. اسم الدالة المطلوب استدعاؤها يجب أن يتألف من أحرف لاتينية صغيرة أو كبيرة أو أرقام أو أن يحتوي على شرطات سفلية وواصلات، وألا يزيد طوله عن 128 حرفًا.

response object (Struct format)

الحقل مطلوب. ردّ الدالة بتنسيق كائن JSON يمكن للمتصلين استخدام أي مفاتيح من اختيارهم تناسب بنية الدالة لعرض ناتج الدالة، مثل "output" و"result" وما إلى ذلك. على وجه الخصوص، إذا تعذّر تنفيذ استدعاء الدالة، يمكن أن يتضمّن الردّ مفتاح "error" لعرض تفاصيل الخطأ للنموذج.

يمكن تضمين الوسائط المتعددة باستخدام كائن فرعي يحتوي على مفتاح "$ref" واحد تكون قيمته هي inlineData.display_name لـ FunctionResponsePart يحتوي على الوسائط المتعددة. يُرجى الاطّلاع على https://ai.google.dev/gemini-api/docs/function-calling#multimodal.

parts[] object (FunctionResponsePart)

اختيارية: تم ترتيب Parts التي تشكّل ردّ الدالة. قد تحتوي الأجزاء على أنواع MIME مختلفة من IANA.

willContinue boolean

اختيارية: تشير إلى أنّ استدعاء الدالة مستمر، وسيتم عرض المزيد من الردود، ما يحوّل استدعاء الدالة إلى دالة مولِّدة. لا ينطبق إلا على استدعاءات الدوال من النوع NON_BLOCKING، ويتم تجاهله في الحالات الأخرى. في حال ضبطها على "خطأ"، لن يتم أخذ الردود المستقبلية في الاعتبار. يُسمح بإرجاع response فارغ مع willContinue=False للإشارة إلى انتهاء استدعاء الدالة. قد يؤدي ذلك إلى إنشاء النموذج. لتجنُّب بدء عملية الإنشاء وإنهاء استدعاء الدالة، اضبط أيضًا 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.

يجب أن يتضمّن FunctionResponsePart نوع MIME ثابتًا من IANA يحدّد نوع الوسائط ونوعها الفرعي إذا تم ملء الحقل inlineData بوحدات بايت أولية.

الحقول
data Union type
بيانات جزء ردّ الدالة في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
inlineData object (FunctionResponseBlob)

وحدات بايت الوسائط المضمّنة

نهاية الحقول التي يستبعد كلّ منها الآخر
تمثيل JSON
{

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

FunctionResponseBlob

وحدات بايت الوسائط الأولية لاستجابة الدالة

يجب عدم إرسال النص كوحدات بايت أولية، بل يجب استخدام الحقل FunctionResponse.response.

الحقول
mimeType string

نوع MIME المتوافق مع معيار IANA لبيانات المصدر. أمثلة: - 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

اختيارية: نوع MIME المتوافق مع معيار IANA لبيانات المصدر.

fileUri string

الحقل مطلوب. معرّف الموارد المنتظم (URI).

displayName string

اختيارية: يحدّد الاسم المستخدَم للإشارة إلى هذا الملف في النموذج (مثل "my_file.pdf"). يُستخدَم كمعرّف مرجعي للملف عندما يتم ضبط verbalizationMode على REFERENCE_ONLY.

تمثيل JSON
{
  "mimeType": string,
  "fileUri": string,
  "displayName": string
}

ExecutableCode

يشير ذلك إلى الرمز البرمجي الذي أنشأه النموذج والمخصّص للتنفيذ، والنتيجة التي تم عرضها للنموذج.

يتم إنشاؤه فقط عند استخدام أداة CodeExecution، حيث سيتم تنفيذ الرمز تلقائيًا، وسيتم أيضًا إنشاء CodeExecutionResult مقابل.

الحقول
id string

اختيارية: المعرّف الفريد للجزء "ExecutableCode" يعرض الخادم CodeExecutionResult مع id المطابق.

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 المقابل يحتوي على معرّف.

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. بدلاً من ذلك، على العميل إرسال ToolCall إلى واجهة برمجة التطبيقات في دور لاحق ضمن رسالة Content، مع ToolResponse المقابل.

الحقول
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 من النموذج. يجب أن يرسل العميل هذه السمة ToolResponse إلى واجهة برمجة التطبيقات في دور لاحق ضمن رسالة Content، مع السمة ToolCall المقابلة.

الحقول
id string

اختيارية: معرّف طلب الأداة الذي يخصّه هذا الردّ.

toolType enum (ToolType)

الحقل مطلوب. نوع الأداة التي تم استدعاؤها، ويتطابق مع toolType في ToolCall المقابل.

response object (Struct format)

اختيارية: ردّ الأداة

تمثيل JSON
{
  "id": string,
  "toolType": enum (ToolType),
  "response": {
    object
  }
}

VideoMetadata

تصف البيانات الوصفية محتوى الفيديو المُدخَل. يمكنك ضبط هذه السمة في Part.video_metadata أو FunctionResponsePart.video_metadata عندما يحتوي inlineData أو fileData على فيديو لضبط المعالجة المُسبقة للفيديو الثابت (مثل اقتصاص الوقت أو عدد اللقطات في الثانية أو الحد الأقصى لعدد اللقطات أو طبقات المحتوى المستخرَجة).

الحقول
startOffset string (Duration format)

اختيارية: تمثّل هذه السمة وقت بدء الفيديو.

تمثّل هذه السمة مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ "s"، مثلاً: "3.5s".

endOffset string (Duration format)

اختيارية: تمثّل هذه السمة الإزاحة النهائية للفيديو.

تمثّل هذه السمة مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ "s"، مثلاً: "3.5s".

fps number

اختيارية: عدد اللقطات في الثانية في الفيديو الذي تم إرساله إلى النموذج في حال عدم تحديدها، ستكون القيمة التلقائية 1.0. يتراوح نطاق عدد اللقطات في الثانية بين (0.0 و24.0].

تمثيل JSON
{
  "startOffset": string,
  "endOffset": string,
  "fps": number
}

MediaResolution

دقة الوسائط لإنشاء الرموز المميّزة

الحقول
value Union type
مستوى دقة الوسائط في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
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

تحويل جزء صوتي إلى نص بالنسبة إلى الملفات الصوتية التي تتضمّن عدة متحدثين، يكون كل مقطع صوتي لمتحدث معيّن عبارة عن جزء منفصل يتضمّن 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"، مثلاً: "3.5s".

endOffset string (Duration format)

اختيارية: تمثّل هذه السمة وقت انتهاء الكلمة بالنسبة إلى بداية المقطع الصوتي.

تمثّل هذه السمة مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ "s"، مثلاً: "3.5s".

تمثيل JSON
{
  "word": string,
  "startOffset": string,
  "endOffset": string
}

SpeechMetadata

البيانات الوصفية للكلام في text جزء

الحقول
speaker string

اختيارية: اسم المتحدّث الاختياري لإنشاء بودكاست بعدة متحدثين

style string

اختيارية: تعليمات اختيارية بشأن أسلوب تركيب الكلام

تمثيل JSON
{
  "speaker": string,
  "style": string
}

البيئة

بيئة تنفيذ لوكيل

الحقول
id string

الحقل مطلوب. للعرض فقط. معرّف البيئة.

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
إعدادات الشبكة للبيئة في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
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

اختيارية: وصف موجز للمَعلمة يمكن أن يحتوي هذا على أمثلة للاستخدام. يمكن تنسيق وصف المَعلمة باستخدام Markdown.

nullable boolean

اختيارية: تشير إلى ما إذا كانت القيمة فارغة.

enum[] string

اختيارية: القيم المحتملة للعنصر من النوع Type.STRING بتنسيق enum على سبيل المثال، يمكننا تحديد تعداد الاتجاه على النحو التالي : {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)

اختيارية: SCHEMA FIELDS FOR TYPE STRING Minimum length of the Type.STRING

maxLength string (int64 format)

اختيارية: الحد الأقصى لطول Type.STRING

pattern string

اختيارية: نمط Type.STRING لتقييد سلسلة بتعبير عادي

example value (Value format)

اختيارية: مثال على العنصر ستتم تعبئته فقط عندما يكون العنصر هو الجذر.

anyOf[] object (Schema)

اختيارية: يجب التحقّق من صحة القيمة وفقًا لأي من المخططات الفرعية (واحد أو أكثر) في القائمة.

propertyOrdering[] string

اختيارية: ترتيب السمات هذا الحقل ليس عاديًا في مواصفات واجهة برمجة التطبيقات المفتوحة، ويُستخدم لتحديد ترتيب السمات في الردّ.

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
}

النوع

يحتوي النوع على قائمة بأنواع بيانات OpenAPI كما هو محدّد في https://spec.openapis.org/oas/v3.0.3#data-types

عمليات التعداد
TYPE_UNSPECIFIED لم يتم تحديدها، ويجب عدم استخدامها.
STRING يجب إدخال القيمة بتنسيق سلسلة.
NUMBER نوع الرقم
INTEGER نوع العدد الصحيح
BOOLEAN نوع منطقي
ARRAY نوع المصفوفة
OBJECT نوع العنصر
NULL نوع فارغ

الأداة

تفاصيل الأداة التي قد يستخدمها النموذج لإنشاء الردّ

Tool هو جزء من الرمز البرمجي يتيح للنظام التفاعل مع الأنظمة الخارجية لتنفيذ إجراء أو مجموعة من الإجراءات خارج نطاق النموذج ومعرفته.

الحقول
functionDeclarations[] object (FunctionDeclaration)

اختيارية: قائمة بـ FunctionDeclarations متاحة للنموذج ويمكن استخدامها لاستدعاء الدوال

لا ينفّذ النموذج أو النظام الدالة. بدلاً من ذلك، قد يتم عرض الدالة المحدّدة على أنّها FunctionCall مع وسيطات إلى جهة العميل لتنفيذها. قد يقرّر النموذج استدعاء مجموعة فرعية من هذه الدوال من خلال ملء FunctionCall في الردّ. قد يحتوي دور المحادثة التالي على FunctionResponse مع سياق إنشاء "الدالة" Content.role لدور النموذج التالي.

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

الحقل مطلوب. اسم الدالة يجب أن يتألف من أحرف لاتينية صغيرة أو كبيرة أو أرقام أو أن يحتوي على شرطات سفلية ونقطتَين رأسيتَين ونقاط وشرطات، وألا يزيد طوله عن 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. يحدّد المخطط النوع المستخدَم لقيمة استجابة الدالة.

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" في النموذج بواسطة Google

الحقول
timeRangeFilter object (Interval)

اختيارية: فلترة نتائج البحث حسب نطاق زمني محدّد إذا حدّد العملاء وقت بدء، يجب أن يحدّدوا وقت انتهاء (والعكس صحيح).

searchTypes object (SearchTypes)

اختيارية: مجموعة أنواع البحث التي تريد تفعيلها وفي حال عدم ضبطها، يتم تفعيل ميزة "بحث الويب" تلقائيًا.

تمثيل JSON
{
  "timeRangeFilter": {
    object (Interval)
  },
  "searchTypes": {
    object (SearchTypes)
  }
}

الفاصل الزمني

يمثّل فاصلاً زمنيًا محدّدًا يتم ترميزه بطابع زمني للبداية (مشمولة) وطابع زمني للنهاية (غير مشمولة).

يجب أن تكون البداية مساوية أو أقدم من النهاية. إذا كانت البداية مساوية للنهاية، يكون الفاصل فارغًا (أي لا يطابق أي وقت). وإذا لم يتم تحديد البداية والنهاية، يطابق الفاصل أي وقت.

الحقول
startTime 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"

endTime 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"

تمثيل JSON
{
  "startTime": string,
  "endTime": string
}

SearchTypes

أنواع مختلفة من البحث يمكن تفعيلها في أداة GoogleSearch

الحقول
تمثيل JSON
{
  "webSearch": {
    object (WebSearch)
  },
  "imageSearch": {
    object (ImageSearch)
  }
}

WebSearch

هذا النوع لا يحتوي على حقول.

بحث الويب العادي لعملية التحقّق من صحة الردود والإعدادات ذات الصلة

ImageSearch

هذا النوع لا يحتوي على حقول.

البحث عن الصور لعمليات التحقّق من صحة المعلومات والإعدادات ذات الصلة

ComputerUse

نوع أداة "استخدام الكمبيوتر"

الحقول
environment enum (Environment)

الحقل مطلوب. البيئة التي يتم تشغيلها

excludedPredefinedFunctions[] string

اختيارية: يتم تلقائيًا تضمين الدوال المحدّدة مسبقًا في طلب النموذج النهائي. ويمكن استبعاد بعضها صراحةً من تضمينها تلقائيًا. يمكن أن يخدم ذلك غرضَين: 1. استخدام مساحة إجراءات مختلفة أو أكثر تقييدًا 2. تحسين تعريفات / تعليمات الدوال المحدّدة مسبقًا

enablePromptInjectionDetection boolean

اختيارية: ما إذا كان سيتم تفعيل ميزة رصد هجمات حقن الطلبات في طلبات استخدام الكمبيوتر.

disabledSafetyPolicies[] enum (SafetyPolicy)

اختيارية: سياسات الأمان غير مفعَّلة لاستخدام الكمبيوتر.

تمثيل JSON
{
  "environment": enum (Environment),
  "excludedPredefinedFunctions": [
    string
  ],
  "enablePromptInjectionDetection": boolean,
  "disabledSafetyPolicies": [
    enum (SafetyPolicy)
  ]
}

البيئة

تمثّل البيئة التي يتم تشغيلها، مثل متصفّح ويب.

عمليات التعداد
ENVIRONMENT_UNSPECIFIED الإعداد التلقائي هو المتصفّح.
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 التي تستردّ المعرفة من مجموعات نصوص Semantic Retrieval. يتم استيراد الملفات إلى مجموعات نصوص Semantic Retrieval باستخدام واجهة برمجة التطبيقات ImportFile API.

الحقول
fileSearchStoreNames[] string

الحقل مطلوب. أسماء fileSearchStores المطلوب استردادها مثلاً: 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. في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
streamableHttpTransport object (StreamableHttpTransport)

بروتوكول نقل يمكنه بث طلبات واستجابات HTTP

نهاية الحقول التي يستبعد كلّ منها الآخر
تمثيل JSON
{
  "name": string,

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

StreamableHttpTransport

بروتوكول نقل يمكنه بث طلبات واستجابات HTTP

الحقول
url string

عنوان URL الكامل لنقطة نهاية MCPServer. مثال: "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"، مثلاً: "3.5s".

sseReadTimeout string (Duration format)

مهلة عمليات قراءة SSE

تمثّل هذه السمة مدة بالثواني مع ما يصل إلى تسعة أرقام كسور، وتنتهي بـ "s"، مثلاً: "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

للعرض فقط. المعرّف. الرمز المميّز نفسه

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
الإعدادات الخاصة بالطريقة للرمز المميّز الناتج. في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
bidiGenerateContentSetup object (BidiGenerateContentSetup)

اختيارية: الإدخال فقط غير قابل للتغيير الإعدادات الخاصة بـ "BidiGenerateContent"

نهاية الحقول التي يستبعد كلّ منها الآخر
uses integer

اختيارية: الإدخال فقط غير قابل للتغيير عدد المرات التي يمكن فيها استخدام الرمز المميّز إذا كانت هذه القيمة صفرًا، لن يتم تطبيق أي حدّ أقصى. ولا يُعدّ استئناف جلسة 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

الحقل مطلوب. اسم مورد النموذج ويُستخدَم هذا كمعرّف للنموذج.

التنسيق: 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)، ويمكن أن تحتوي فقط على أحرف صغيرة وأحرف رقمية وشرطات سفلية وشرطات عادية. - يُسمح باستخدام الأحرف الدولية.

Usage: - Safety identifiers from aggregators: Use the key safety_identifier (e.g. {"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) التي ستوقف إنشاء المخرجات. في حال تحديد هذا الحقل، ستتوقف واجهة برمجة التطبيقات عند أول ظهور لـ 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)

اختيارية: مخطط الناتج للردّ الذي تم إنشاؤه هذا بديل لـ responseSchema يقبل مخطّط JSON.

في حال ضبط هذه السمة، يجب حذف 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 غير العادية.

يتم إلغاء المراجع الدورية إلى حدّ محدود، وبالتالي لا يمكن استخدامها إلا ضمن السمات غير المطلوبة. (الخصائص التي يمكن أن تكون فارغة ليست كافية). إذا تم ضبط $ref على مخطط فرعي، لا يمكن ضبط أي سمات أخرى، باستثناء تلك التي تبدأ بـ $.

تمّ الإيقاف. يمكنك استخدام responseFormat كبديل.

responseJsonSchema value (Value format)

اختيارية: تفصيل داخلي استخدِم responseJsonSchema بدلاً من هذا الحقل.

responseModalities[] enum (Modality)

اختيارية: الوسائط المطلوبة للردّ تمثّل مجموعة الأساليب التي يمكن أن يعرضها النموذج، ويجب توقّعها في الردّ. هذا مطابق تمامًا لأساليب الرد.

قد يتضمّن النموذج مجموعات متعدّدة من الوسائط المتوافقة. إذا لم تتطابق الأنماط المطلوبة مع أي من المجموعات المتوافقة، سيظهر خطأ.

وتعادل القائمة الفارغة طلب نص فقط.

candidateCount integer

اختيارية: عدد الردود التي تم إنشاؤها المطلوب عرضها في حال عدم ضبط هذه السياسة، سيتم ضبطها تلقائيًا على 1. يُرجى العِلم أنّ هذه الميزة لا تعمل مع نماذج الجيل السابق (مجموعة Gemini 1.0)

maxOutputTokens integer

اختيارية: الحد الأقصى لعدد الرموز المميّزة التي يمكن تضمينها في الردّ المرشّح.

ملاحظة: تختلف القيمة التلقائية حسب النموذج. يمكنك الاطّلاع على سمة Model.output_token_limit في Model التي تعرضها الدالة getModel.

temperature number

اختيارية: تتحكّم في عشوائية الناتج.

ملاحظة: تختلف القيمة التلقائية حسب النموذج. يمكنك الاطّلاع على سمة Model.temperature في Model التي تعرضها الدالة getModel.

يمكن أن تتراوح القيم بين [0.0 و2.0].

لم يعُد هذا الحقل متاحًا ويتم تجاهله تلقائيًا في Gemini 3.6 Flash والنماذج الأحدث.

topP number

اختيارية: الحد الأقصى للاحتمال التراكمي للرموز المميّزة التي يجب أخذها في الاعتبار عند أخذ العينات.

يستخدم النموذج اختيار العيّنات بناءً على أعلى احتمال (Top-k) وأعلى احتمال تراكمي (Top-p) معًا.

يتم ترتيب الرموز المميّزة استنادًا إلى الاحتمالات المخصّصة لها بحيث يتم استخدام الرموز المميّزة الأكثر احتمالاً فقط. يحدّ اختيار العيّنات بناءً على أعلى احتمال مباشرةً من الحد الأقصى لعدد الرموز المميّزة التي يتم أخذها في الاعتبار، بينما يحدّ اختيار العيّنات بناءً على الاحتمال التراكمي من عدد الرموز المميّزة بناءً على الاحتمال التراكمي.

ملاحظة: تختلف القيمة التلقائية حسب Model ويتم تحديدها من خلال السمة Model.top_p التي تعرضها الدالة getModel. تشير السمة topK الفارغة إلى أنّ النموذج لا يطبّق أخذ عينات من أفضل k ولا يسمح بضبط topK في الطلبات.

لم يعُد هذا الحقل متاحًا ويتم تجاهله تلقائيًا في Gemini 3.6 Flash والنماذج الأحدث.

topK integer

اختيارية: الحد الأقصى لعدد الرموز المميّزة التي يجب أخذها في الاعتبار عند أخذ العينات.

تستخدم نماذج Gemini اختيار العيّنات بناءً على الاحتمال التراكمي (أعلى احتمال تراكمي) أو مزيجًا من اختيار العيّنات بناءً على الاحتمال التراكمي وأعلى احتمال. يأخذ أسلوب أخذ العينات Top-k في الاعتبار مجموعة من الرموز المميّزة الأكثر احتمالاً وعددها topK. لا تسمح النماذج التي تعمل باستخدام اختيار العيّنات بناءً على الاحتمال التراكمي بإعداد "أعلى احتمال".

ملاحظة: تختلف القيمة التلقائية حسب Model ويتم تحديدها من خلال السمة Model.top_p التي تعرضها الدالة getModel. تشير سمة topK الفارغة إلى أنّ النموذج لا يطبّق أخذ عينات من أفضل k ولا يسمح بضبط topK في الطلبات.

لم يعُد هذا الحقل متاحًا ويتم تجاهله تلقائيًا في Gemini 3.6 Flash والنماذج الأحدث.

seed integer

اختيارية: تمثّل هذه السمة القيمة الأولية المستخدَمة في فك الترميز. في حال عدم ضبط هذه المَعلمة، يستخدم الطلب قيمة عشوائية.

presencePenalty number

اختيارية: يتم تطبيق عقوبة التكرار على احتمالات السجلّ للرمز المميّز التالي إذا سبق أن ظهر الرمز المميّز في الردّ.

هذه العقوبة هي ثنائية (تُطبَّق أو لا تُطبَّق) ولا تعتمد على عدد مرات استخدام الرمز المميّز (بعد المرة الأولى). استخدِم frequencyPenalty لفرض عقوبة تزداد مع كل استخدام.

ستؤدي العقوبة الإيجابية إلى الحدّ من استخدام الرموز التي سبق استخدامها في الردّ، ما يزيد من المفردات.

ستشجّع العقوبة السلبية على استخدام الرموز التي سبق استخدامها في الردّ، ما يقلّل من المفردات.

frequencyPenalty number

اختيارية: تم تطبيق عقوبة التكرار على احتمالات السجلّ للرمز المميّز التالي، مضروبة في عدد مرات ظهور كل رمز مميّز في الرد حتى الآن.

ستؤدي العقوبة الإيجابية إلى الحد من استخدام الرموز التي سبق استخدامها، بما يتناسب مع عدد مرات استخدام الرمز: كلما زاد استخدام الرمز، زادت صعوبة استخدام النموذج لهذا الرمز مرة أخرى، ما يزيد من مفردات الردود.

تنبيه: ستشجّع العقوبة السلبية النموذج على إعادة استخدام الرموز المميّزة بما يتناسب مع عدد مرات استخدام الرمز المميّز. ستؤدي القيم السالبة الصغيرة إلى تقليل المفردات في الردّ. ستؤدي القيم السالبة الأكبر إلى بدء النموذج في تكرار رمز مميّز شائع إلى أن يصل إلى حدّ maxOutputTokens.

responseLogprobs boolean

اختيارية: إذا كانت القيمة "صحيح"، يتم تصدير نتائج logprobs في الردّ.

logprobs integer

اختيارية: يكون صالحًا فقط إذا كان responseLogprobs=True. يحدّد هذا الخيار عدد أهم الاحتمالات اللوغاريتمية، بما في ذلك المرشّح الذي تم اختياره، والتي يتم عرضها في كل خطوة من خطوات فك الترميز في Candidate.logprobs_result. يجب أن يكون الرقم في النطاق [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

اختيارية: رمز اللغة وفقًا لمعيار BCP-47 الصادر عن مجموعة مهندسي الإنترنت (IETF) والذي ضبطه المستخدم لاستخدامه في التطبيق. يُستخدَم للتعرّف على الكلام وتركيبه.

القيم الصالحة هي: 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
إعدادات مكبّر الصوت المطلوب استخدامه في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
prebuiltVoiceConfig object (PrebuiltVoiceConfig)

إعدادات الصوت المُعدّ مسبقًا المطلوب استخدامه

voice string

اختيارية: معرّف المتحدّث لتركيب الكلام التنسيقات المتوافقة:

  • اسم المتحدّث للأصوات المُعدّة مسبقًا (على سبيل المثال، Orus أو Kore)
  • معرّف الصوت للأصوات المخزّنة (على سبيل المثال، 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

يشير هذا الحقل إلى ما إذا كان يجب تضمين الأفكار في الردّ. إذا كانت القيمة "صحيح"، يتم عرض الأفكار فقط عندما تكون متاحة.

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

اختيارية: معدّل البيانات في الملف الصوتي بالهرتز

bitRate integer

اختيارية: معدل نقل البيانات بالبت في الثانية (بت في الثانية) ينطبق ذلك فقط على التنسيقات المضغوطة (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).

AspectRatio

نسب العرض إلى الارتفاع المتاحة للصور الناتجة

عمليات التعداد
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

اختيارية: إذا كانت القيمة "صحيح"، سينشئ النموذج صوتًا عند التحدّث باللغة المستهدَفة، أي أنّه سيقلّد الإدخال بشكل أساسي. إذا كانت القيمة "خطأ"، لن ننشئ محتوًى صوتيًا باللغة المستهدَفة.

تمثيل 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 ذات المستوى الأعلى بدلاً منها. في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
languageAuto
(deprecated)
object (LanguageAuto)

اختيارية: سيتعرّف النموذج على اللغة تلقائيًا.

languageHints
(deprecated)
object (LanguageHints)

اختيارية: تحدّد لغة واحدة أو أكثر في الصوت.

نهاية الحقول التي يستبعد كلّ منها الآخر
تمثيل 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 إذا كانت القيمة "صحيح"، سيؤدي بدء النشاط إلى مقاطعة ردّ النموذج (يُعرف أيضًا باسم "المقاطعة"). سيتم قطع ردّ النموذج الحالي في لحظة المقاطعة. وهذا هو الإعداد التلقائي.
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
آلية ضغط سياق الاستخدام. في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
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

اختيارية: إذا كانت القيمة صحيحة، بعد إرسال setupComplete، سينتظر الخادم ويعالج أولاً رسائل clientContent إلى أن يصبح turnComplete هو true. لن يؤدي هذا السجلّ الأولي إلى تفعيل طلب النموذج، وقد ينتهي بالدور MODEL. بعد true "turnComplete"، يمكن للعميل بدء المحادثة في الوقت الفعلي من خلال "realtimeInput".

تمثيل JSON
{
  "initialHistoryInClientContent": boolean
}

الطريقة: auth_tokens.create

تنشئ هذه السياسة رمزًا مميزًا يمكن استخدامه لتقييد سلوك جلسة BidiGenerateContent.

نقطة نهاية

منشور 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
الإعدادات الخاصة بالطريقة للرمز المميّز الناتج. في ما يلي قائمة بالحقول التي يستبعد بعضها بعضًا. سيتم ضبط حقل واحد على الأكثر في الرد:
bidiGenerateContentSetup object (BidiGenerateContentSetup)

اختيارية: الإدخال فقط غير قابل للتغيير الإعدادات الخاصة بـ "BidiGenerateContent"

نهاية الحقول التي يستبعد كلّ منها الآخر
uses integer

اختيارية: الإدخال فقط غير قابل للتغيير عدد المرات التي يمكن فيها استخدام الرمز المميّز إذا كانت هذه القيمة صفرًا، لن يتم تطبيق أي حدّ أقصى. ولا يُعدّ استئناف جلسة Live API استخدامًا. إذا لم يتم تحديدها، تكون القيمة التلقائية هي 1.

نص الاستجابة

إذا كانت الاستجابة ناجحة، سيحتوي نصها على مثال تم إنشاؤه حديثًا لـ AuthToken.