Gemini और अन्य जनरेटिव एआई मॉडल, इनपुट और आउटपुट को टोकन नाम की एक यूनिट में प्रोसेस करते हैं.
Gemini मॉडल के लिए, एक टोकन का मतलब करीब चार वर्ण होता है. 100 टोकन, अंग्रेज़ी के करीब 60 से 80 शब्दों के बराबर होते हैं.
टोकन के बारे में जानकारी
टोकन, z जैसे सिंगल वर्ण या cat जैसे पूरे शब्द हो सकते हैं. लंबे शब्दों को कई टोकन में
तोड़ा जाता है. मॉडल में इस्तेमाल किए गए सभी टोकन के सेट को शब्दावली कहा जाता है. साथ ही, टेक्स्ट को टोकन में बांटने की प्रोसेस को टोकनाइज़ेशन कहा जाता है.
बिलिंग की सुविधा चालू होने पर, Gemini API को किए गए कॉल की लागत का कुछ हिस्सा, इनपुट और आउटपुट टोकन की संख्या के हिसाब से तय होता है. इसलिए, टोकन की गिनती करने का तरीका जानना आपके लिए फ़ायदेमंद हो सकता है.
हमारे Colab में जाकर, टोकन की गिनती की जा सकती है.
|
|
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-flash-preview", contents=prompt
)
print("total_tokens: ", total_tokens)
response = client.models.generate_content(
model="gemini-3-flash-preview", 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-flash-preview",
contents: prompt,
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-3-flash-preview",
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-flash-preview", contents, nil)
if err != nil {
return err
}
fmt.Println("total_tokens:", countResp.TotalTokens)
response, err := client.Models.GenerateContent(ctx, "gemini-3-flash-preview", 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-flash-preview",
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-flash-preview", 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-flash-preview", 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-flash-preview",
history: history,
});
const countTokensResponse = await ai.models.countTokens({
model: "gemini-3-flash-preview",
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-flash-preview",
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-flash-preview", nil, history)
if err != nil {
log.Fatal(err)
}
firstTokenResp, err := client.Models.CountTokens(ctx, "gemini-3-flash-preview", 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-flash-preview", hist, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(secondTokenResp.TotalTokens)
मल्टीमॉडल टोकन की गिनती करना
Gemini API को दिए गए सभी इनपुट को टोकन में बदला जाता है. इनमें टेक्स्ट, इमेज फ़ाइलें, और टेक्स्ट के अलावा अन्य मोडेलिटी शामिल हैं. Gemini API की मदद से प्रोसेस करते समय, मल्टीमॉडल इनपुट के टोकनाइज़ेशन के बारे में यहां कुछ खास बातें दी गई हैं:
डाइमेंशन और <=384 पिक्सल, दोनों के साथ इमेज इनपुट को 258 टोकन के तौर पर गिना जाता है. अगर इमेज का कोई एक या दोनों डाइमेंशन तय सीमा से ज़्यादा है, तो उन्हें काटकर और ज़रूरत के हिसाब से स्केल करके 768x768 पिक्सल के टाइल में बदल दिया जाता है. हर टाइल को 258 टोकन के तौर पर गिना जाता है.
वीडियो और ऑडियो फ़ाइलों को इन तय दरों पर टोकन में बदला जाता है: वीडियो को 263 टोकन प्रति सेकंड और ऑडियो को 32 टोकन प्रति सेकंड.
मीडिया रिज़ॉल्यूशन
Gemini 3 Pro और 3 Flash Preview मॉडल में, 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)
यहां फ़ाइल एपीआई से अपलोड की गई इमेज का इस्तेमाल करने का उदाहरण दिया गया है:
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-flash-preview", contents=[prompt, your_image_file]
)
)
response = client.models.generate_content(
model="gemini-3-flash-preview", 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-flash-preview",
contents: createUserContent([
prompt,
createPartFromUri(organ.uri, organ.mimeType),
]),
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-3-flash-preview",
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-flash-preview", contents, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("Multimodal image token count:", tokenResp.TotalTokens)
response, err := client.Models.GenerateContent(ctx, "gemini-3-flash-preview", 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-flash-preview", contents=[prompt, your_image_file]
)
)
response = client.models.generate_content(
model="gemini-3-flash-preview", 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-flash-preview",
contents: contents,
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-3-flash-preview",
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-flash-preview", contents, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("Multimodal image token count:", tokenResp.TotalTokens)
response, err := client.Models.GenerateContent(ctx, "gemini-3-flash-preview", 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-flash-preview", contents=[prompt, your_file]
)
)
response = client.models.generate_content(
model="gemini-3-flash-preview", 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-flash-preview",
contents: createUserContent([
prompt,
createPartFromUri(videoFile.uri, videoFile.mimeType),
]),
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-3-flash-preview",
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-flash-preview", 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-flash-preview", contents, nil)
if err != nil {
log.Fatal(err)
}
usageMetadata, err := json.MarshalIndent(response.UsageMetadata, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(usageMetadata))
कॉन्टेक्स्ट विंडो
Gemini API के ज़रिए उपलब्ध मॉडल में कॉन्टेक्स्ट विंडो होती हैं. इन्हें टोकन में मापा जाता है. कॉन्टेक्स्ट विंडो से यह तय होता है कि कितना इनपुट दिया जा सकता है और मॉडल कितना आउटपुट जनरेट कर सकता है. models.get एंडपॉइंट को कॉल करके या मॉडल के दस्तावेज़ में जाकर, कॉन्टेक्स्ट विंडो के साइज़ का पता लगाया जा सकता है.
Python
from google import genai
client = genai.Client()
model_info = client.models.get(model="gemini-3-flash-preview")
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-flash-preview'});
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-flash-preview")
if err != nil {
log.Fatal(err)
}
fmt.Println("input token limit:", modelInfo.InputTokenLimit)
fmt.Println("output token limit:", modelInfo.OutputTokenLimit)
Colab notebook आज़माएं
GitHub पर नोटबुक देखें