टोकन को समझें और उनकी गिनती करें

Gemini और अन्य जनरेटिव एआई मॉडल, इनपुट और आउटपुट को बारीकी से प्रोसेस करते हैं. इसे टोकन कहा जाता है.

Gemini मॉडल के लिए, एक टोकन का मतलब करीब चार वर्ण होता है. 100 टोकन, अंग्रेज़ी के करीब 60 से 80 शब्दों के बराबर होते हैं.

टोकन के बारे में जानकारी

टोकन, z जैसे सिंगल वर्ण या cat जैसे पूरे शब्द हो सकते हैं. लंबे शब्दों को कई टोकन में बांटा जाता है. मॉडल में इस्तेमाल किए गए सभी टोकन के सेट को शब्दावली कहा जाता है. साथ ही, टेक्स्ट को टोकन में बांटने की प्रोसेस को टोकनाइज़ेशन कहा जाता है.

बिलिंग की सुविधा चालू होने पर, Gemini API को कॉल करने की लागत, इनपुट और आउटपुट टोकन की संख्या के हिसाब से तय होती है. इसलिए, टोकन की गिनती करने का तरीका जानना मददगार हो सकता है.

हमारे Colab में टोकन की गिनती की जा सकती है.

ai.google.dev पर देखें Colab notebook आज़माएं GitHub पर नोटबुक देखें

टोकन की गिनती करना

Gemini API को दिए जाने वाले सभी इनपुट और उससे मिलने वाले सभी आउटपुट को टोकन में बदला जाता है. इसमें टेक्स्ट, इमेज फ़ाइलें, और टेक्स्ट के अलावा अन्य मोडैलिटी शामिल हैं.

टोकन की गिनती इन तरीकों से की जा सकती है:

  • अनुरोध के इनपुट के साथ count_tokens को कॉल करें.
    इससे सिर्फ़ इनपुट में मौजूद टोकन की कुल संख्या का पता चलता है. मॉडल को इनपुट भेजने से पहले, यह कॉल किया जा सकता है. इससे आपको अपने अनुरोधों का साइज़ पता चल जाएगा.

  • generate_content को कॉल करने के बाद, response ऑब्जेक्ट पर usage_metadata एट्रिब्यूट का इस्तेमाल करें.
    इससे इनपुट और आउटपुट, दोनों में मौजूद टोकन की कुल संख्या का पता चलता है: total_token_count.
    यह इनपुट और आउटपुट के टोकन की संख्या भी अलग-अलग दिखाता है: prompt_token_count (इनपुट टोकन) और candidates_token_count (आउटपुट टोकन).

    अगर सोच-समझकर जवाब देने वाले मॉडल का इस्तेमाल किया जा रहा है, तो जवाब देने की प्रोसेस के दौरान इस्तेमाल किए गए टोकन, thoughts_token_count में वापस कर दिए जाते हैं. अगर कॉन्टेक्स्ट के लिए कैश की सुविधा का इस्तेमाल किया जा रहा है, तो कैश मेमोरी में सेव किए गए टोकन की संख्या cached_content_token_count में होगी.

टेक्स्ट टोकन की गिनती करना

अगर सिर्फ़ टेक्स्ट इनपुट के साथ count_tokens को कॉल किया जाता है, तो यह सिर्फ़ इनपुट (total_tokens) में मौजूद टेक्स्ट के टोकन की संख्या दिखाता है. अपने अनुरोधों का साइज़ देखने के लिए, generate_content को कॉल करने से पहले यह कॉल किया जा सकता है.

इसके अलावा, generate_content को कॉल करके, response ऑब्जेक्ट पर usage_metadata एट्रिब्यूट का इस्तेमाल करके ये वैल्यू पाई जा सकती हैं:

  • इनपुट (prompt_token_count), कैश मेमोरी में सेव किए गए कॉन्टेंट (cached_content_token_count), और आउटपुट (candidates_token_count) के लिए अलग-अलग टोकन की संख्या
  • सोचने की प्रोसेस (thoughts_token_count) के लिए टोकन की संख्या
  • इनपुट और आउटपुट, दोनों में टोकन की कुल संख्या (total_token_count)

Python

from google import genai

client = genai.Client()
prompt = "The quick brown fox jumps over the lazy dog."

total_tokens = client.models.count_tokens(
    model="gemini-3.8-flash", contents=prompt
)
print("total_tokens: ", total_tokens)

response = client.models.generate_content(
    model="gemini-3.8-flash", contents=prompt
)

print(response.usage_metadata)

JavaScript

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({});
const prompt = "The quick brown fox jumps over the lazy dog.";

async function main() {
  const countTokensResponse = await ai.models.countTokens({
    model: "gemini-3.8-flash",
    contents: prompt,
  });
  console.log(countTokensResponse.totalTokens);

  const generateResponse = await ai.models.generateContent({
    model: "gemini-3.8-flash",
    contents: prompt,
  });
  console.log(generateResponse.usageMetadata);
}

await main();

ऐप पर जाएं

ctx := context.Background()
client, err := genai.NewClient(ctx, nil)

// Convert prompt to a slice of *genai.Content using the helper.
contents := []*genai.Content{
  genai.NewContentFromText(prompt, genai.RoleUser),
}
countResp, err := client.Models.CountTokens(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
  return err
}
fmt.Println("total_tokens:", countResp.TotalTokens)

response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
  log.Fatal(err)
}
usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", "  ")
if err != nil {
  log.Fatal(err)
}
fmt.Println(string(usageMetadata))
    ```

सिलसिलेवार बातचीत (चैट) के टोकन गिनना

अगर चैट के इतिहास के साथ count_tokens को कॉल किया जाता है, तो यह चैट (total_tokens) में हर भूमिका के टेक्स्ट के टोकन की कुल संख्या दिखाता है.

इसके अलावा, send_message को कॉल करके, response ऑब्जेक्ट पर usage_metadata एट्रिब्यूट का इस्तेमाल करके ये वैल्यू पाई जा सकती हैं:

  • इनपुट (prompt_token_count), कैश मेमोरी में सेव किए गए कॉन्टेंट (cached_content_token_count), और आउटपुट (candidates_token_count) के लिए अलग-अलग टोकन की संख्या
  • सोचने की प्रोसेस (thoughts_token_count) के लिए टोकन की संख्या
  • इनपुट और आउटपुट, दोनों में टोकन की कुल संख्या (total_token_count)

यह समझने के लिए कि बातचीत का अगला टर्न कितना बड़ा होगा, आपको count_tokens को कॉल करते समय इसे इतिहास में जोड़ना होगा.

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="Hi my name is Bob")]
        ),
        types.Content(role="model", parts=[types.Part(text="Hi Bob!")]),
    ],
)

print(
    client.models.count_tokens(
        model="gemini-3.8-flash", contents=chat.get_history()
    )
)

response = chat.send_message(
    message="In one sentence, explain how a computer works to a young child."
)
print(response.usage_metadata)

extra = types.UserContent(
    parts=[
        types.Part(
            text="What is the meaning of life?",
        )
    ]
)
history = [*chat.get_history(), extra]
print(client.models.count_tokens(model="gemini-3.8-flash", contents=history))

JavaScript

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({});

async function main() {
  const history = [
    { role: "user", parts: [{ text: "Hi my name is Bob" }] },
    { role: "model", parts: [{ text: "Hi Bob!" }] },
  ];
  const chat = ai.chats.create({
    model: "gemini-3.8-flash",
    history: history,
  });

  const countTokensResponse = await ai.models.countTokens({
    model: "gemini-3.8-flash",
    contents: chat.getHistory(),
  });
  console.log(countTokensResponse.totalTokens);

  const chatResponse = await chat.sendMessage({
    message: "In one sentence, explain how a computer works to a young child.",
  });
  console.log(chatResponse.usageMetadata);

  const extraMessage = {
    role: "user",
    parts: [{ text: "What is the meaning of life?" }],
  };
  const combinedHistory = [...chat.getHistory(), extraMessage];
  const combinedCountTokensResponse = await ai.models.countTokens({
    model: "gemini-3.8-flash",
    contents: combinedHistory,
  });
  console.log(
    "Combined history token count:",
    combinedCountTokensResponse.totalTokens,
  );
}

await main();

ऐप पर जाएं

ctx := context.Background()
client, err := genai.NewClient(ctx, nil)

history := []*genai.Content{
  {Role: genai.RoleUser, Parts: []*genai.Part({Text: "Hi my name is Bob"})},
  {Role: genai.RoleModel, Parts: []*genai.Part({Text: "Hi Bob!"})},
}
chat, err := client.Chats.Create(ctx, "gemini-3.8-flash", nil, history)
if err != nil {
  log.Fatal(err)
}

firstTokenResp, err := client.Models.CountTokens(ctx, "gemini-3.8-flash", chat.History(false), nil)
if err != nil {
  log.Fatal(err)
}
fmt.Println(firstTokenResp.TotalTokens)

resp, err := chat.SendMessage(ctx, genai.NewPartFromText("In one sentence, explain how a computer works to a young child."))
if err != nil {
  log.Fatal(err)
}
fmt.Printf("%#v\n", resp.UsageMetadata)

extra := genai.NewContentFromText("What is the meaning of life?", genai.RoleUser)
hist := chat.History(false)
hist = append(hist, extra)

secondTokenResp, err := client.Models.CountTokens(ctx, "gemini-3.8-flash", hist, nil)
if err != nil {
  log.Fatal(err)
}
fmt.Println(secondTokenResp.TotalTokens)

मल्टीमोडल टोकन की गिनती करना

Gemini API को दिए जाने वाले हर इनपुट को टोकन में बदला जाता है. इसमें टेक्स्ट, इमेज फ़ाइलें, और टेक्स्ट के अलावा अन्य मोडैलिटी शामिल हैं. Gemini API के ज़रिए प्रोसेस किए जाने के दौरान, मल्टीमॉडल इनपुट के टोकनाइज़ेशन के बारे में यहां कुछ खास बातें दी गई हैं:

  • अगर किसी इमेज के दोनों डाइमेंशन 384 पिक्सल से कम या इसके बराबर हैं, तो उसे 258 टोकन के तौर पर गिना जाता है. अगर इमेज का कोई एक या दोनों डाइमेंशन तय सीमा से ज़्यादा है, तो उसे 768x768 पिक्सल की टाइल में काटा और स्केल किया जाता है. हर टाइल को 258 टोकन के तौर पर गिना जाता है.

  • वीडियो और ऑडियो फ़ाइलों को इन तय दरों पर टोकन में बदला जाता है: वीडियो को 263 टोकन प्रति सेकंड और ऑडियो को 32 टोकन प्रति सेकंड. यह दर, स्टैटिक प्रोसेसिंग (डिफ़ॉल्ट) पर लागू होती है. एजेंटिक प्रोसेसिंग के लिए, टोकन के इस्तेमाल में अंतर होता है. प्रोसेसिंग मोड के हिसाब से वीडियो टोकन का इस्तेमाल देखें.

मीडिया रिज़ॉल्यूशन

Gemini 3 के मॉडल में, media_resolution पैरामीटर की मदद से मल्टीमोडल विज़न प्रोसेसिंग को बेहतर तरीके से कंट्रोल किया जा सकता है. media_resolution पैरामीटर से यह तय होता है कि इनपुट के तौर पर दी गई हर इमेज या वीडियो फ़्रेम के लिए, ज़्यादा से ज़्यादा कितने टोकन असाइन किए जा सकते हैं. ज़्यादा रिज़ॉल्यूशन से, मॉडल को छोटे टेक्स्ट को पढ़ने या छोटी-छोटी जानकारी की पहचान करने में मदद मिलती है. हालांकि, इससे टोकन का इस्तेमाल और इंतज़ार का समय बढ़ जाता है.

पैरामीटर और टोकन की गिनती पर इसके असर के बारे में ज़्यादा जानने के लिए, मीडिया रिज़ॉल्यूशन गाइड देखें.

इमेज फ़ाइलें

अगर टेक्स्ट और इमेज के इनपुट के साथ count_tokens को कॉल किया जाता है, तो यह सिर्फ़ इनपुट (total_tokens) में मौजूद टेक्स्ट और इमेज के कुल टोकन की संख्या दिखाता है. अनुरोधों का साइज़ देखने के लिए, generate_content को कॉल करने से पहले इस कॉल को किया जा सकता है. इसके अलावा, टेक्स्ट और फ़ाइल पर अलग-अलग तौर पर count_tokens को कॉल किया जा सकता है.

इसके अलावा, generate_content को कॉल करके, response ऑब्जेक्ट पर usage_metadata एट्रिब्यूट का इस्तेमाल करके ये वैल्यू पाई जा सकती हैं:

  • इनपुट (prompt_token_count), कैश मेमोरी में सेव किए गए कॉन्टेंट (cached_content_token_count), और आउटपुट (candidates_token_count) के लिए अलग-अलग टोकन की संख्या
  • सोचने की प्रोसेस (thoughts_token_count) के लिए टोकन की संख्या
  • इनपुट और आउटपुट, दोनों में टोकन की कुल संख्या (total_token_count)

File API से अपलोड की गई इमेज का इस्तेमाल करने वाला उदाहरण:

Python

from google import genai

client = genai.Client()
prompt = "Tell me about this image"
your_image_file = client.files.upload(file=media / "organ.jpg")

print(
    client.models.count_tokens(
        model="gemini-3.8-flash", contents=[prompt, your_image_file]
    )
)

response = client.models.generate_content(
    model="gemini-3.8-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)

JavaScript

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({});
const prompt = "Tell me about this image";

async function main() {
  const organ = await ai.files.upload({
    file: path.join(media, "organ.jpg"),
    config: { mimeType: "image/jpeg" },
  });

  const countTokensResponse = await ai.models.countTokens({
    model: "gemini-3.8-flash",
    contents: createUserContent([
      prompt,
      createPartFromUri(organ.uri, organ.mimeType),
    ]),
  });
  console.log(countTokensResponse.totalTokens);

  const generateResponse = await ai.models.generateContent({
    model: "gemini-3.8-flash",
    contents: createUserContent([
      prompt,
      createPartFromUri(organ.uri, organ.mimeType),
    ]),
  });
  console.log(generateResponse.usageMetadata);
}

await main();

ऐप पर जाएं

ctx := context.Background()
client, err := genai.NewClient(ctx, nil)

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 image"),
  genai.NewPartFromURI(file.URI, file.MIMEType),
}
contents := []*genai.Content{
  genai.NewContentFromParts(parts, genai.RoleUser),
}

tokenResp, err := client.Models.CountTokens(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
  log.Fatal(err)
}
fmt.Println("Multimodal image token count:", tokenResp.TotalTokens)

response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
  log.Fatal(err)
}
usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", "  ")
if err != nil {
  log.Fatal(err)
}
fmt.Println(string(usageMetadata))

इमेज को इनलाइन डेटा के तौर पर दिखाने वाला उदाहरण:

Python

from google import genai
import PIL.Image

client = genai.Client()
prompt = "Tell me about this image"
your_image_file = PIL.Image.open(media / "organ.jpg")

print(
    client.models.count_tokens(
        model="gemini-3.8-flash", contents=[prompt, your_image_file]
    )
)

response = client.models.generate_content(
    model="gemini-3.8-flash", contents=[prompt, your_image_file]
)
print(response.usage_metadata)

JavaScript

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({});
const prompt = "Tell me about this image";
const imageBuffer = fs.readFileSync(path.join(media, "organ.jpg"));

const imageBase64 = imageBuffer.toString("base64");

const contents = createUserContent([
  prompt,
  createPartFromBase64(imageBase64, "image/jpeg"),
]);

async function main() {
  const countTokensResponse = await ai.models.countTokens({
    model: "gemini-3.8-flash",
    contents: contents,
  });
  console.log(countTokensResponse.totalTokens);

  const generateResponse = await ai.models.generateContent({
    model: "gemini-3.8-flash",
    contents: contents,
  });
  console.log(generateResponse.usageMetadata);
}

await main();

ऐप पर जाएं

ctx := context.Background()
client, err := genai.NewClient(ctx, nil)

imageBytes, err := os.ReadFile("organ.jpg")
if err != nil {
    log.Fatalf("Failed to read image file: %v", err)
}
parts := []*genai.Part{
  genai.NewPartFromText("Tell me about this image"),
  {
        InlineData: &genai.Blob{
              MIMEType: "image/jpeg",
              Data:     imageBytes,
        },
  },
}
contents := []*genai.Content{
  genai.NewContentFromParts(parts, genai.RoleUser),
}

tokenResp, err := client.Models.CountTokens(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
  log.Fatal(err)
}
fmt.Println("Multimodal image token count:", tokenResp.TotalTokens)

response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
  log.Fatal(err)
}
usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", "  ")
if err != nil {
  log.Fatal(err)
}
fmt.Println(string(usageMetadata))

वीडियो या ऑडियो फ़ाइलें

ऑडियो और वीडियो को इन तय दरों पर टोकन में बदला जाता है:

  • वीडियो: हर सेकंड के लिए 263 टोकन
  • ऑडियो: हर सेकंड के लिए 32 टोकन

अगर आपने टेक्स्ट और वीडियो/ऑडियो इनपुट के साथ count_tokens को कॉल किया है, तो यह सिर्फ़ इनपुट में मौजूद टेक्स्ट और वीडियो/ऑडियो फ़ाइल के कुल टोकन की संख्या दिखाता है (total_tokens). अपने अनुरोधों का साइज़ देखने के लिए, generate_content को कॉल करने से पहले इस कॉल का इस्तेमाल किया जा सकता है. इसके अलावा, टेक्स्ट और फ़ाइल पर अलग-अलग count_tokens को कॉल किया जा सकता है.

इसके अलावा, generate_content को कॉल करके, response ऑब्जेक्ट पर usage_metadata एट्रिब्यूट का इस्तेमाल करके ये वैल्यू पाई जा सकती हैं:

  • इनपुट (prompt_token_count), कैश मेमोरी में सेव किए गए कॉन्टेंट (cached_content_token_count), और आउटपुट (candidates_token_count) के लिए अलग-अलग टोकन की संख्या
  • गहराई से विचार करने की प्रोसेस के लिए टोकन की संख्या (thoughts_token_count)
  • इनपुट और आउटपुट, दोनों में टोकन की कुल संख्या (total_token_count).

Python

from google import genai
import time

client = genai.Client()
prompt = "Tell me about this video"
your_file = client.files.upload(file=media / "Big_Buck_Bunny.mp4")

while not your_file.state or your_file.state.name != "ACTIVE":
    print("Processing video...")
    print("File state:", your_file.state)
    time.sleep(5)
    your_file = client.files.get(name=your_file.name)

print(
    client.models.count_tokens(
        model="gemini-3.8-flash", contents=[prompt, your_file]
    )
)

response = client.models.generate_content(
    model="gemini-3.8-flash", contents=[prompt, your_file]
)
print(response.usage_metadata)

JavaScript

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({});
const prompt = "Tell me about this video";

async function main() {
  let videoFile = await ai.files.upload({
    file: path.join(media, "Big_Buck_Bunny.mp4"),
    config: { mimeType: "video/mp4" },
  });

  while (!videoFile.state || videoFile.state.toString() !== "ACTIVE") {
    console.log("Processing video...");
    console.log("File state: ", videoFile.state);
    await sleep(5000);
    videoFile = await ai.files.get({ name: videoFile.name });
  }

  const countTokensResponse = await ai.models.countTokens({
    model: "gemini-3.8-flash",
    contents: createUserContent([
      prompt,
      createPartFromUri(videoFile.uri, videoFile.mimeType),
    ]),
  });
  console.log(countTokensResponse.totalTokens);

  const generateResponse = await ai.models.generateContent({
    model: "gemini-3.8-flash",
    contents: createUserContent([
      prompt,
      createPartFromUri(videoFile.uri, videoFile.mimeType),
    ]),
  });
  console.log(generateResponse.usageMetadata);
}

await main();

ऐप पर जाएं

ctx := context.Background()
client, err := genai.NewClient(ctx, nil)

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

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("Tell me about this video"),
  genai.NewPartFromURI(file.URI, file.MIMEType),
}
contents := []*genai.Content{
  genai.NewContentFromParts(parts, genai.RoleUser),
}

tokenResp, err := client.Models.CountTokens(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
  log.Fatal(err)
}
fmt.Println("Multimodal video/audio token count:", tokenResp.TotalTokens)
response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
  log.Fatal(err)
}
usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", "  ")
if err != nil {
  log.Fatal(err)
}
fmt.Println(string(usageMetadata))

प्रोसेसिंग मोड के हिसाब से वीडियो टोकन का इस्तेमाल

वीडियो के लिए टोकन का इस्तेमाल, प्रोसेसिंग मोड पर निर्भर करता है:

प्रोसेसिंग मोड टोकन की गिनती इस्तेमाल का सामान्य तरीका
स्टैटिक (डिफ़ॉल्ट) डिफ़ॉल्ट रूप से, ~100 टोकन/सेकंड (लो रिज़ॉल्यूशन) या ~300 टोकन/सेकंड (हाई रिज़ॉल्यूशन). सभी फ़्रेम को एक एफ़पीएस पर सैंपल किया गया हो. वीडियो की अवधि के हिसाब से, अनुमान लगाया जा सकता है.
एजेंटिक कॉन्टेंट की जटिलता के हिसाब से अलग-अलग होता है. मॉडल, प्रॉम्प्ट का जवाब देने के लिए सिर्फ़ ट्रांसक्रिप्ट और/या फ़्रेम और/या ऑडियो लोड करता है. लॉन्ग-फ़ॉर्म कॉन्टेंट के लिए, 88% तक कम टोकन इस्तेमाल होते हैं.

एजेंटिक प्रोसेसिंग की मदद से, एक घंटे के लेक्चर के लिए स्टैटिक मोड में ~10.8 लाख टोकन इस्तेमाल होते हैं. हालांकि, प्रॉम्प्ट और कॉन्टेंट के आधार पर, इसके लिए ~10.8 हज़ार टोकन इस्तेमाल हो सकते हैं.

किसी अनुरोध के लिए असल टोकन के इस्तेमाल की जांच करने के लिए, जवाब में मौजूद usage_metadata फ़ील्ड का इस्तेमाल करें. साल UsageMetadata में, एजेंटिक वीडियो टोकन की जानकारी इन फ़ील्ड में दी जाती है:

  • शुरुआती प्रॉम्प्ट (वीडियो का रेफ़रंस + उपयोगकर्ता का प्रॉम्प्ट): prompt_token_count
  • नेविगेशन के बारे में सोचना: thoughts_token_count
  • मांग पर लोड की गई ट्रांसक्रिप्ट, फ़्रेम, और ऑडियो: tool_use_prompt_token_count
  • फ़ाइनल जवाब: candidates_token_count

थॉट टोकन की गिनती करना

थिंकिंग मोड चालू करने पर, जवाब की कीमत आउटपुट टोकन और थिंकिंग टोकन की कुल संख्या के हिसाब से तय होती है. thoughtsTokenCount फ़ील्ड (या एसडीके के बराबर) से, जनरेट किए गए थिंकिंग टोकन की कुल संख्या को वापस पाया जा सकता है.

Python

# ...
print("Thoughts tokens:", response.usage_metadata.thoughts_token_count)
print("Output tokens:", response.usage_metadata.candidates_token_count)

JavaScript

// ...
console.log(`Thoughts tokens: ${response.usageMetadata.thoughtsTokenCount}`);
console.log(`Output tokens: ${response.usageMetadata.candidatesTokenCount}`);

ऐप पर जाएं

// ...
fmt.Println("Thoughts tokens:", response.UsageMetadata.ThoughtsTokenCount)
fmt.Println("Output tokens:", response.UsageMetadata.CandidatesTokenCount)

थिंकिंग मॉडल, फ़ाइनल जवाब की क्वालिटी को बेहतर बनाने के लिए पूरी जानकारी जनरेट करते हैं. इसके बाद, वे खास जानकारी देते हैं, ताकि यह पता चल सके कि जवाब जनरेट करने के लिए किस तरह की जानकारी का इस्तेमाल किया गया. इसलिए, एपीआई, खास जानकारी बनाने के लिए मॉडल के जनरेट किए गए सभी थॉट टोकन के आधार पर कीमत तय करता है. भले ही, एपीआई सिर्फ़ खास जानकारी दिखाता हो.

Gemini के सोचने के तरीके से जुड़ी गाइड में, इस बारे में ज़्यादा जानें कि Gemini के सोचने के तरीके को कैसे कॉन्फ़िगर किया जाता है.

कॉन्टेक्स्ट विंडो

Gemini API के ज़रिए उपलब्ध मॉडल में कॉन्टेक्स्ट विंडो होती हैं. इन्हें टोकन में मापा जाता है. कॉन्टेक्स्ट विंडो से यह तय होता है कि कितना इनपुट दिया जा सकता है और मॉडल कितना आउटपुट जनरेट कर सकता है. कॉन्टेक्स्ट विंडो का साइज़ तय करने के लिए, models.get एंडपॉइंट को कॉल करें या मॉडल के दस्तावेज़ देखें.

  • Gemini 4 के मॉडल (gemini-4-argon): इनपुट, सोच-विचार, और आउटपुट टोकन के लिए, 10 लाख टोकन वाली एक ही कॉन्टेक्स्ट विंडो (1,048,576 टोकन) शेयर की जाती है. सिंगल अनुरोधों के लिए, स्ट्रीमिंग (streamGenerateContent) के लिए 65,536 आउटपुट टोकन और नॉन-स्ट्रीमिंग (generateContent) के लिए 32,768 आउटपुट टोकन की सीमा तय की गई है. इसके अलावा, लंबे डिकोड का इस्तेमाल करके, ज़्यादा से ज़्यादा 1,048,576 टोकन जनरेट किए जा सकते हैं. अगर आपके इनपुट टोकन और max_output_tokens की संख्या 10,48,576 से ज़्यादा है, तो एपीआई, आउटपुट की सीमा को कॉन्टेक्स्ट विंडो में बची हुई जगह (1,048,576 माइनस आपके इनपुट टोकन) के हिसाब से अपने-आप तय कर देता है.
  • Gemini 3 और 2.5 मॉडल: इनपुट (1,048,576 टोकन) और आउटपुट (65,536 टोकन) के लिए अलग-अलग बजट इस्तेमाल करें.

Python

from google import genai

client = genai.Client()
model_info = client.models.get(model="gemini-3.8-flash")
print(f"{model_info.input_token_limit=}")
print(f"{model_info.output_token_limit=}")

JavaScript

import { GoogleGenAI } from '@google/genai';

const ai = new GoogleGenAI({});

async function main() {
  const modelInfo = await ai.models.get({model: 'gemini-3.8-flash'});
  console.log(modelInfo.inputTokenLimit);
  console.log(modelInfo.outputTokenLimit);
}

await main();

ऐप पर जाएं

ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
  log.Fatal(err)
}
modelInfo, err := client.ModelInfo(ctx, "models/gemini-3.8-flash")
if err != nil {
  log.Fatal(err)
}
fmt.Println("input token limit:", modelInfo.InputTokenLimit)
fmt.Println("output token limit:", modelInfo.OutputTokenLimit)