Gemini और अन्य जनरेटिव एआई मॉडल, इनपुट और आउटपुट को ज़्यादा बारीक तरीके से प्रोसेस करते हैं. इसे टोकन कहा जाता है.
टोकन के बारे में जानकारी
टोकन, z
जैसे एक वर्ण या cat
जैसे पूरे शब्द हो सकते हैं. लंबे शब्दों को कई टोकन में बांटा जाता है. मॉडल में इस्तेमाल किए गए सभी टोकन के सेट को वॉकेबलरी कहा जाता है. साथ ही, टेक्स्ट को टोकन में बांटने की प्रोसेस को टोकनाइज़ेशन कहा जाता है.
Gemini मॉडल के लिए, एक टोकन चार वर्णों के बराबर होता है. 100 टोकन, अंग्रेज़ी के करीब 60 से 80 शब्दों के बराबर होते हैं.
बिलिंग की सुविधा चालू होने पर, Gemini API को कॉल करने की लागत, इनपुट और आउटपुट टोकन की संख्या के हिसाब से तय होती है. इसलिए, टोकन की गिनती करने का तरीका जानना मददगार हो सकता है.
टोकन की गिनती करना
Gemini API में भेजे गए और उससे मिले सभी इनपुट और आउटपुट को टोकन में बदल दिया जाता है. इनमें टेक्स्ट, इमेज फ़ाइलें, और बिना टेक्स्ट वाले अन्य मोड भी शामिल हैं.
टोकन की गिनती इन तरीकों से की जा सकती है:
अनुरोध के इनपुट के साथ
countTokens
को कॉल करें.
यह सिर्फ़ इनपुट में मौजूद टोकन की कुल संख्या दिखाता है. अपने अनुरोधों का साइज़ देखने के लिए, मॉडल में इनपुट भेजने से पहले यह कॉल किया जा सकता है.generate_content
को कॉल करने के बाद,response
ऑब्जेक्ट परusageMetadata
एट्रिब्यूट का इस्तेमाल करें.
यह इनपुट और आउटपुट, दोनों में मौजूद टोकन की कुल संख्या दिखाता है:totalTokenCount
.
यह इनपुट और आउटपुट के टोकन की संख्या को अलग-अलग दिखाता है:promptTokenCount
(इनपुट टोकन) औरcandidatesTokenCount
(आउटपुट टोकन).
टेक्स्ट टोकन की गिनती करना
अगर सिर्फ़ टेक्स्ट वाले इनपुट के साथ countTokens
को कॉल किया जाता है, तो यह सिर्फ़ इनपुट (totalTokens
) में टेक्स्ट के टोकन की संख्या दिखाता है. अपने अनुरोधों का साइज़ देखने के लिए, generateContent
को कॉल करने से पहले यह कॉल किया जा सकता है.
generateContent
को कॉल करने के बाद, response
ऑब्जेक्ट पर usageMetadata
एट्रिब्यूट का इस्तेमाल करके, ये चीज़ें देखी जा सकती हैं:
- इनपुट (
promptTokenCount
) और आउटपुट (candidatesTokenCount
) के अलग-अलग टोकन की संख्या - इनपुट और आउटपुट, दोनों में टोकन की कुल संख्या
(
totalTokenCount
)
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const prompt = "The quick brown fox jumps over the lazy dog.";
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: prompt,
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: prompt,
});
console.log(generateResponse.usageMetadata);
एक से ज़्यादा बार बोले गए वाक्यों (चैट) के टोकन की गिनती करना
चैट के इतिहास के साथ countTokens
को कॉल करने पर, यह चैट (totalTokens
) में हर भूमिका के टेक्स्ट के टोकन की कुल संख्या दिखाता है.
sendMessage
को कॉल करने के बाद, response
ऑब्जेक्ट पर usageMetadata
एट्रिब्यूट का इस्तेमाल करके, ये चीज़ें देखी जा सकती हैं:
- इनपुट (
promptTokenCount
) और आउटपुट (candidatesTokenCount
) के अलग-अलग टोकन की संख्या - इनपुट और आउटपुट, दोनों में टोकन की कुल संख्या
(
totalTokenCount
)
यह समझने के लिए कि बातचीत का अगला चरण कितना लंबा होगा, आपको countTokens
को कॉल करते समय उसे इतिहास में जोड़ना होगा.
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
// Initial chat history.
const history = [
{ role: "user", parts: [{ text: "Hi my name is Bob" }] },
{ role: "model", parts: [{ text: "Hi Bob!" }] },
];
const chat = ai.chats.create({
model: "gemini-2.0-flash",
history: history,
});
// Count tokens for the current chat history.
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-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);
// Add an extra user message to the history.
const extraMessage = {
role: "user",
parts: [{ text: "What is the meaning of life?" }],
};
const combinedHistory = chat.getHistory();
combinedHistory.push(extraMessage);
const combinedCountTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: combinedHistory,
});
console.log(
"Combined history token count:",
combinedCountTokensResponse.totalTokens,
);
मल्टीमोडल टोकन की गिनती करना
Gemini API में मिलने वाले सभी इनपुट को टोकन में बदल दिया जाता है. इनमें टेक्स्ट, इमेज फ़ाइलें, और टेक्स्ट के अलावा अन्य मोड शामिल हैं. Gemini API की प्रोसेसिंग के दौरान, कई मोड वाले इनपुट को टोकन में बदलने के बारे में ये अहम बातें ध्यान में रखें:
Gemini 2.0 में, ऐसे इमेज इनपुट जिनके दोनों डाइमेंशन 384 पिक्सल से कम हों उन्हें 258 टोकन के तौर पर गिना जाता है. एक या दोनों डाइमेंशन में बड़ी इमेज को ज़रूरत के हिसाब से काटा जाता है और 768x768 पिक्सल की टाइल में स्केल किया जाता है. हर टाइल को 258 टोकन के तौर पर गिना जाता है. Gemini के 2.0 वर्शन से पहले, इमेज में 258 टोकन का इस्तेमाल किया जाता था.
वीडियो और ऑडियो फ़ाइलों को टोकन में बदलने के लिए, ये तय दरें लागू होती हैं: वीडियो के लिए हर सेकंड 263 टोकन और ऑडियो के लिए हर सेकंड 32 टोकन.
इमेज फ़ाइलें
अगर countTokens
को टेक्स्ट और इमेज वाले इनपुट के साथ कॉल किया जाता है, तो यह सिर्फ़ इनपुट (totalTokens
) में टेक्स्ट और इमेज के टोकन की कुल संख्या दिखाता है. अपने अनुरोधों का साइज़ देखने के लिए, generateContent
को कॉल करने से पहले यह कॉल किया जा सकता है. आपके पास टेक्स्ट और फ़ाइल पर countTokens
को अलग-अलग कॉल करने का विकल्प भी है.
generateContent
को कॉल करने के बाद, response
ऑब्जेक्ट पर usageMetadata
एट्रिब्यूट का इस्तेमाल करके, ये चीज़ें देखी जा सकती हैं:
- इनपुट (
promptTokenCount
) और आउटपुट (candidatesTokenCount
) के अलग-अलग टोकन की संख्या - इनपुट और आउटपुट, दोनों में टोकन की कुल संख्या
(
totalTokenCount
)
File API से अपलोड की गई इमेज का इस्तेमाल करने वाला उदाहरण:
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const prompt = "Tell me about this image";
const organ = await ai.files.upload({
file: path.join(media, "organ.jpg"),
config: { mimeType: "image/jpeg" },
});
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: createUserContent([
prompt,
createPartFromUri(organ.uri, organ.mimeType),
]),
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: createUserContent([
prompt,
createPartFromUri(organ.uri, organ.mimeType),
]),
});
console.log(generateResponse.usageMetadata);
इमेज को इनलाइन डेटा के तौर पर दिखाने का उदाहरण:
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const prompt = "Tell me about this image";
const imageBuffer = fs.readFileSync(path.join(media, "organ.jpg"));
// Convert buffer to base64 string.
const imageBase64 = imageBuffer.toString("base64");
// Build contents using createUserContent and createPartFromBase64.
const contents = createUserContent([
prompt,
createPartFromBase64(imageBase64, "image/jpeg"),
]);
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: contents,
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: contents,
});
console.log(generateResponse.usageMetadata);
वीडियो या ऑडियो फ़ाइलें
ऑडियो और वीडियो, दोनों को इन तय दरों पर टोकन में बदला जाता है:
- वीडियो: हर सेकंड 263 टोकन
- ऑडियो: हर सेकंड 32 टोकन
अगर countTokens
को टेक्स्ट और वीडियो/ऑडियो इनपुट के साथ कॉल किया जाता है, तो यह सिर्फ़ इनपुट (totalTokens
) में टेक्स्ट और वीडियो/ऑडियो फ़ाइल के टोकन की कुल संख्या दिखाता है. अपने अनुरोधों का साइज़ देखने के लिए, generateContent
को कॉल करने से पहले यह कॉल किया जा सकता है. इसके अलावा, आपके पास टेक्स्ट और फ़ाइल पर countTokens
को अलग-अलग कॉल करने का विकल्प भी है.
generateContent
को कॉल करने के बाद, response
ऑब्जेक्ट पर usageMetadata
एट्रिब्यूट का इस्तेमाल करके, ये चीज़ें देखी जा सकती हैं:
- इनपुट (
promptTokenCount
) और आउटपुट (candidatesTokenCount
) के अलग-अलग टोकन की संख्या - इनपुट और आउटपुट, दोनों में टोकन की कुल संख्या
(
totalTokenCount
)
// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const prompt = "Tell me about this video";
let videoFile = await ai.files.upload({
file: path.join(media, "Big_Buck_Bunny.mp4"),
config: { mimeType: "video/mp4" },
});
// Poll until the video file is completely processed (state becomes ACTIVE).
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-2.0-flash",
contents: createUserContent([
prompt,
createPartFromUri(videoFile.uri, videoFile.mimeType),
]),
});
console.log(countTokensResponse.totalTokens);
const generateResponse = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: createUserContent([
prompt,
createPartFromUri(videoFile.uri, videoFile.mimeType),
]),
});
console.log(generateResponse.usageMetadata);
सिस्टम के निर्देश और टूल
सिस्टम के निर्देशों और टूल को भी इनपुट के लिए टोकन की कुल संख्या में गिना जाता है.
सिस्टम के निर्देशों का इस्तेमाल करने पर, totalTokens
की संख्या बढ़ जाती है, ताकि totalTokens
के जुड़ने की जानकारी दिख सके.systemInstruction
फ़ंक्शन कॉल का इस्तेमाल करने पर, tools
के जुड़ने को दिखाने के लिए totalTokens
की गिनती बढ़ जाती है.