মিথুন এবং অন্যান্য জেনারেটিভ এআই মডেলগুলি টোকেন নামক গ্রানুলিটিতে ইনপুট এবং আউটপুট প্রক্রিয়া করে।
টোকেন সম্পর্কে
টোকেন z
মত একক অক্ষর বা cat
মত পুরো শব্দ হতে পারে। দীর্ঘ শব্দগুলিকে কয়েকটি টোকেনে বিভক্ত করা হয়েছে। মডেল দ্বারা ব্যবহৃত সমস্ত টোকেনের সেটকে শব্দভাণ্ডার বলা হয় এবং টোকেনে পাঠ্য বিভক্ত করার প্রক্রিয়াটিকে টোকেনাইজেশন বলা হয়।
মিথুন মডেলের জন্য, একটি টোকেন প্রায় 4টি অক্ষরের সমতুল্য। 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,
);
মাল্টিমডাল টোকেন গণনা করুন
টেক্সট, ইমেজ ফাইল এবং অন্যান্য নন-টেক্সট মোডালিটি সহ জেমিনি API-তে সমস্ত ইনপুট টোকেনাইজড। জেমিনি API দ্বারা প্রক্রিয়াকরণের সময় মাল্টিমোডাল ইনপুটের টোকেনাইজেশন সম্পর্কে নিম্নলিখিত উচ্চ-স্তরের মূল পয়েন্টগুলি নোট করুন:
Gemini 2.0 এর সাথে, উভয় মাত্রা <=384 পিক্সেল সহ ইমেজ ইনপুট 258 টোকেন হিসাবে গণনা করা হয়। এক বা উভয় মাত্রার বড় চিত্রগুলিকে প্রয়োজন অনুসারে 768x768 পিক্সেলের টাইলগুলিতে ক্রপ করা হয় এবং স্কেল করা হয়, প্রতিটি 258 টোকেন হিসাবে গণনা করা হয়। জেমিনি 2.0-এর আগে, ছবিগুলি একটি নির্দিষ্ট 258 টোকেন ব্যবহার করত।
ভিডিও এবং অডিও ফাইলগুলি নিম্নলিখিত নির্দিষ্ট হারে টোকেনে রূপান্তরিত হয়: ভিডিও প্রতি সেকেন্ডে 263 টোকেন এবং অডিও প্রতি সেকেন্ডে 32 টোকেন।
ইমেজ ফাইল
আপনি যদি টেক্সট-এবং-ইমেজ ইনপুট দিয়ে countTokens
কল করেন, তাহলে এটি শুধুমাত্র ইনপুটে থাকা টেক্সট এবং ইমেজের সম্মিলিত টোকেন কাউন্ট ফেরত দেয় ( totalTokens
)। আপনার অনুরোধের আকার পরীক্ষা করতে generateContent
কল করার আগে আপনি এই কল করতে পারেন। আপনি ঐচ্ছিকভাবে টেক্সট এবং ফাইলে countTokens
আলাদাভাবে কল করতে পারেন।
আরেকটি বিকল্প হল generateContent
কল করা এবং তারপর নিম্নলিখিতগুলি পেতে response
অবজেক্টে usageMetadata
বৈশিষ্ট্য ব্যবহার করা:
- ইনপুট (
promptTokenCount
) এবং আউটপুট (candidatesTokenCount
কাউন্ট ) এর পৃথক টোকেন সংখ্যা - ইনপুট এবং আউটপুট উভয় ক্ষেত্রেই মোট টোকেনের সংখ্যা (
totalTokenCount
)
ফাইল 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);
সিস্টেম নির্দেশাবলী এবং সরঞ্জাম
সিস্টেম নির্দেশাবলী এবং সরঞ্জামগুলি ইনপুটের জন্য মোট টোকেন গণনার দিকেও গণনা করে।
আপনি যদি সিস্টেম নির্দেশাবলী ব্যবহার করেন, তাহলে systemInstruction
এর সংযোজন প্রতিফলিত করতে totalTokens
সংখ্যা বৃদ্ধি পায়।
আপনি যদি ফাংশন কলিং ব্যবহার করেন, তাহলে tools
সংযোজন প্রতিফলিত করতে totalTokens
সংখ্যা বৃদ্ধি পায়।