টোকেন বোঝা ও গণনা করা

Gemini এবং অন্যান্য জেনারেটিভ AI মডেল, টোকেন নামক গ্র্যানুলারিটিতে ইনপুট ও আউটপুট প্রসেস করে।

Gemini মডেলের ক্ষেত্রে, একটি টোকেন প্রায় ৪টি অক্ষরের সমান। ১০০টি টোকেন প্রায় ৬০-৮০টি ইংরেজি শব্দের সমান।

টোকেন সম্পর্কে

টোকেন z-এর মতো একটি অক্ষর বা cat-এর মতো সম্পূর্ণ শব্দ হতে পারে। দীর্ঘ শব্দ একাধিক টোকেনে ভেঙে যায়। মডেলের ব্যবহার করা সব টোকেনের সেটকে শব্দভাণ্ডার বলা হয় এবং টেক্সটকে টোকেনে ভাগ করার প্রসেসকে টোকেনাইজেশন বলা হয়।

বিলিং চালু করা থাকলে, Gemini API-তে কল করার খরচ ইনপুট ও আউটপুট টোকেনের সংখ্যার উপর আংশিকভাবে নির্ভর করে, তাই টোকেন কীভাবে গণনা করতে হয় তা জানা থাকলে সুবিধা হয়।

আপনি আমাদের Colab-এ টোকেন গণনা করে দেখতে পারেন।

ai.google.dev লিঙ্কে দেখুন Colab নোটবুক ব্যবহার করে দেখুন 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)

জাভাস্ক্রিপ্ট

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

জাভাস্ক্রিপ্ট

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-এর মাধ্যমে প্রসেস করার সময় মাল্টিমোডাল ইনপুটের টোকেনাইজেশন সম্পর্কে নিম্নলিখিত হাই-লেভেল মূল পয়েন্টগুলি নোট করুন:

  • দুটি ডাইমেনশনই <=৩৮৪ পিক্সেল সহ ইনপুট ছবিকে ২৫৮টি টোকেন হিসেবে গণনা করা হয়। এক বা দুটি ডাইমেনশনেই বড় ছবি ক্রপ করা হয় এবং প্রয়োজন অনুযায়ী ৭৬৮x৭৬৮ পিক্সেলের টাইল হিসেবে স্কেল করা হয়, প্রতিটি ২৫৮ টোকেন হিসেবে গণনা করা হয়।

  • ভিডিও এবং অডিও ফাইল নিম্নলিখিত নির্দিষ্ট হারে টোকেনে কনভার্ট করা হয়: ভিডিও প্রতি সেকেন্ডে ২৬৩টি টোকেন এবং অডিও প্রতি সেকেন্ডে ৩২টি টোকেন। এই রেট স্ট্যাটিক প্রসেসিংয়ের (ডিফল্ট) ক্ষেত্রে প্রযোজ্য। এজেন্টিক প্রসেসিংয়ের ক্ষেত্রে, টোকেন ব্যবহার আলাদা আলাদা হয়। প্রসেসিং মোড অনুযায়ী ভিডিও টোকেন ব্যবহার দেখুন।

মিডিয়া রেজোলিউশন

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)

জাভাস্ক্রিপ্ট

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)

জাভাস্ক্রিপ্ট

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

ভিডিও বা অডিও ফাইল

অডিও এবং ভিডিওর প্রতিটি নিম্নলিখিত নির্দিষ্ট রেটে টোকেনে কনভার্ট করা হয়:

  • ভিডিও: প্রতি সেকেন্ডে ২৬৩টি টোকেন
  • অডিও: প্রতি সেকেন্ডে ৩২টি টোকেন

আপনি যদি টেক্সট-ও-ভিডিও/অডিও ইনপুট সহ 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)

জাভাস্ক্রিপ্ট

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

প্রসেসিং মোড অনুযায়ী ভিডিও টোকেন ব্যবহার

ভিডিওর জন্য টোকেন ব্যবহার প্রসেসিং মোডের উপর নির্ভর করে:

প্রসেসিং মোড টোকেন গণনা সাধারণ ব্যবহার
স্ট্যাটিক (ডিফল্ট) ডিফল্ট হিসেবে ~১০০ টোকেন/সেকেন্ড (কম রেজোলিউশন) বা ~৩০০ টোকেন/সেকেন্ড (হাই রেজোলিউশন)। ১ FPS-এ সব ফ্রেমের নমুনা নেওয়া হয়েছে। ভিডিওর সময়সীমার সাথে সামঞ্জস্যপূর্ণ।
Agentic কন্টেন্টের জটিলতার উপর নির্ভর করে। প্রম্পটের উত্তর দেওয়ার জন্য প্রয়োজনীয় ট্রান্সক্রিপ্ট এবং/অথবা ফ্রেম এবং/অথবা অডিওই মডেল লোড করে। লং-ফর্ম কন্টেন্টের জন্য ৮৮% পর্যন্ত কম টোকেন।

এজেন্টিক প্রসেসিংয়ের মাধ্যমে, ১ ঘণ্টার লেকচার যা স্ট্যাটিক মোডে ~১.০৮M টোকেন ব্যবহার করে, তা প্রম্পট ও কন্টেন্টের উপর নির্ভর করে ~১০৮K টোকেন ব্যবহার করতে পারে।

কোনও অনুরোধের জন্য টোকেনের প্রকৃত ব্যবহার চেক করতে, উত্তরে usage_metadata ফিল্ড ব্যবহার করুন। UsageMetadata-এ, নিম্নলিখিত ফিল্ড জুড়ে এজেন্টিক ভিডিও টোকেন সম্পর্কে রিপোর্ট করা হয়:

  • প্রাথমিক প্রম্পট (ভিডিও রেফারেন্স + ব্যবহারকারীর প্রম্পট): prompt_token_count
  • নেভিগেশন সংক্রান্ত চিন্তাভাবনা: thoughts_token_count
  • চাহিদা অনুযায়ী ট্রান্সস্ক্রিপ্ট, ফ্রেম ও অডিও লোড করা হয়েছে: tool_use_prompt_token_count
  • চূড়ান্ত উত্তর: candidates_token_count

থট টোকেন গণনা করুন

আপনি 'থিঙ্কিং' চালু করলে, উত্তরের দাম হল আউটপুট টোকেন ও থিঙ্কিং টোকেনের যোগফল। আপনি thoughtsTokenCount ফিল্ড (বা SDK সমতুল্য) থেকে তৈরি থিঙ্কিং টোকেনের মোট সংখ্যা পুনরুদ্ধার করতে পারবেন।

Python

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

জাভাস্ক্রিপ্ট

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

চূড়ান্ত উত্তরের কোয়ালিটি উন্নত করতে থিঙ্কিং মডেল সম্পূর্ণ চিন্তাভাবনা জেনারেট করে এবং তারপরে চিন্তাভাবনা প্রসেস সম্পর্কে ইনসাইট প্রদান করতে সারসংক্ষেপ আউটপুট করে। তাই, API শুধুমাত্র সারসংক্ষেপ আউটপুট হিসেবে দেখালেও, সারসংক্ষেপ তৈরি করার জন্য মডেলের জেনারেট করা সম্পূর্ণ থট টোকেনের উপর ভিত্তি করে API দাম নির্ধারণ করে।

Gemini-র চিন্তাভাবনা সংক্রান্ত নির্দেশিকা থেকে আপনি চিন্তাভাবনা কনফিগার করার ব্যাপারে আরও জানতে পারবেন।

কন্টেক্সট উইন্ডো

Gemini API-এর মাধ্যমে উপলভ্য মডেলগুলিতে কন্টেক্সট উইন্ডো আছে যা টোকেনে পরিমাপ করা হয়। কন্টেক্সট উইন্ডো থেকে আপনি কতটা ইনপুট দিতে পারবেন এবং মডেল কতটা আউটপুট জেনারেট করতে পারবে তা নির্ধারণ করা হয়। আপনি models.get এন্ডপয়েন্ট কল করে অথবা মডেল ডকুমেন্টেশন দেখে কন্টেক্সট উইন্ডোর সাইজ নির্ধারণ করতে পারবেন।

  • Gemini 4 মডেল (gemini-4-argon): ইনপুট, থিঙ্কিং ও আউটপুট টোকেন জুড়ে একটি ১ মিলিয়ন টোকেন কনটেক্সট উইন্ডো (1,048,576 টোকেন) শেয়ার করে। সিঙ্গেল অনুরোধের ক্ষেত্রে স্ট্রিমিংয়ের জন্য (streamGenerateContent) সর্বাধিক 65,536 আউটপুট টোকেন এবং নন-স্ট্রিমিংয়ের জন্য (generateContent) সর্বাধিক 32,768 আউটপুট টোকেন ব্যবহার করা যায় অথবা আপনি লং ডিকোড ব্যবহার করে সর্বাধিক 1,048,576 টোকেন জেনারেট করতে পারেন। আপনার ইনপুট টোকেন এবং max_output_tokens-এর যোগফল 1,048,576 টোকেনের বেশি হলে, API অটোমেটিক আউটপুট সীমা কন্টেক্সট উইন্ডোর বাকি স্পেসে (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=}")

জাভাস্ক্রিপ্ট

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)