প্রসঙ্গ ক্যাশিং

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

আপনি যখন টোকেনগুলির একটি সেট ক্যাশে করেন, তখন টোকেনগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার আগে আপনি কতক্ষণ ক্যাশে থাকতে চান তা চয়ন করতে পারেন। এই ক্যাশিং সময়কালকে টাইম টু লিভ (TTL) বলা হয়। সেট না থাকলে, TTL ডিফল্ট 1 ঘন্টা। ক্যাশিংয়ের জন্য খরচ নির্ভর করে ইনপুট টোকেনের আকারের উপর এবং আপনি কতক্ষণ টোকেনগুলি বজায় রাখতে চান।

কনটেক্সট ক্যাশিং জেমিনি 1.5 প্রো এবং জেমিনি 1.5 ফ্ল্যাশ উভয়কেই সমর্থন করে।

কখন প্রসঙ্গ ক্যাশিং ব্যবহার করবেন

প্রসঙ্গ ক্যাশিং এমন পরিস্থিতিতে বিশেষভাবে উপযুক্ত যেখানে একটি উল্লেখযোগ্য প্রারম্ভিক প্রসঙ্গ সংক্ষিপ্ত অনুরোধ দ্বারা বারবার উল্লেখ করা হয়। ব্যবহারের ক্ষেত্রে প্রসঙ্গ ক্যাশিং ব্যবহার করার কথা বিবেচনা করুন যেমন:

  • বিস্তৃত সিস্টেম নির্দেশাবলী সহ চ্যাটবট
  • দীর্ঘ ভিডিও ফাইলের পুনরাবৃত্তিমূলক বিশ্লেষণ
  • বৃহৎ নথি সেটের বিরুদ্ধে পুনরাবৃত্ত প্রশ্ন
  • ঘন ঘন কোড সংগ্রহস্থল বিশ্লেষণ বা বাগ ফিক্সিং

কিভাবে ক্যাশিং খরচ কমায়

কনটেক্সট ক্যাশিং হল একটি প্রদত্ত বৈশিষ্ট্য যা সামগ্রিক অপারেশনাল খরচ কমানোর জন্য ডিজাইন করা হয়েছে। বিলিং নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করে:

  1. ক্যাশে টোকেন গণনা: ক্যাশ করা ইনপুট টোকেনের সংখ্যা, পরবর্তী প্রম্পটে অন্তর্ভুক্ত করার সময় একটি হ্রাস হারে বিল করা হয়।
  2. সঞ্চয়স্থানের সময়কাল: ক্যাশ করা টোকেন সংরক্ষিত সময়ের পরিমাণ (TTL), ক্যাশ করা টোকেন গণনার TTL সময়ের উপর ভিত্তি করে বিল করা হয়। TTL-এ কোন সর্বনিম্ন বা সর্বোচ্চ সীমা নেই।
  3. অন্যান্য কারণ: অন্যান্য চার্জ প্রযোজ্য, যেমন নন-ক্যাশড ইনপুট টোকেন এবং আউটপুট টোকেনগুলির জন্য।

আপ-টু-ডেট মূল্যের বিশদ বিবরণের জন্য, Gemini API মূল্য নির্ধারণ পৃষ্ঠাটি পড়ুন। কিভাবে টোকেন গণনা করতে হয় তা জানতে, টোকেন গাইড দেখুন।

প্রসঙ্গ ক্যাশিং কিভাবে ব্যবহার করবেন

এই বিভাগটি অনুমান করে যে আপনি একটি Gemini SDK ইনস্টল করেছেন (বা কার্ল ইনস্টল করেছেন) এবং আপনি একটি API কী কনফিগার করেছেন, যেমন quickstart এ দেখানো হয়েছে।

একটি ক্যাশে ব্যবহার করে সামগ্রী তৈরি করুন

নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি ক্যাশে সিস্টেম নির্দেশনা এবং ভিডিও ফাইল ব্যবহার করে বিষয়বস্তু তৈরি করতে হয়।

import { GoogleGenerativeAI } from '@google/generative-ai';
import {
  FileState,
  GoogleAICacheManager,
  GoogleAIFileManager,
} from '@google/generative-ai/server';

// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
  const fileManager = new GoogleAIFileManager(process.env.API_KEY);
  const fileResult = await fileManager.uploadFile(filePath, {
    displayName,
    mimeType: 'video/mp4',
  });

  const { name, uri } = fileResult.file;

  // Poll getFile() on a set interval (2 seconds here) to check file state.
  let file = await fileManager.getFile(name);
  while (file.state === FileState.PROCESSING) {
    console.log('Waiting for video to be processed.');
    // Sleep for 2 seconds
    await new Promise((resolve) => setTimeout(resolve, 2_000));
    file = await fileManager.getFile(name);
  }

  console.log(`Video processing complete: ${uri}`);

  return fileResult;
}

// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';

// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');

// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);

// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
  'You are an expert video analyzer, and your job is to answer ' +
  "the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
  model,
  displayName,
  systemInstruction,
  contents: [
    {
      role: 'user',
      parts: [
        {
          fileData: {
            mimeType: fileResult.file.mimeType,
            fileUri: fileResult.file.uri,
          },
        },
      ],
    },
  ],
  ttlSeconds,
});

// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);

// Query the model.
const result = await genModel.generateContent({
  contents: [
    {
      role: 'user',
      parts: [
        {
          text:
            'Introduce different characters in the movie by describing ' +
            'their personality, looks, and names. Also list the ' +
            'timestamps they were introduced for the first time.',
        },
      ],
    },
  ],
});

console.log(result.response.usageMetadata);

// The output should look something like this:
//
// {
//   promptTokenCount: 696220,
//   candidatesTokenCount: 270,
//   totalTokenCount: 696490,
//   cachedContentTokenCount: 696191
// }

console.log(result.response.text());

তালিকা ক্যাশে

ক্যাশে করা বিষয়বস্তু পুনরুদ্ধার করা বা দেখা সম্ভব নয়, তবে আপনি ক্যাশে মেটাডেটা ( name , model , displayName , usageMetadata , createTime , updateTime , এবং expireTime ) পুনরুদ্ধার করতে পারেন।

সমস্ত আপলোড করা ক্যাশে মেটাডেটা তালিকাভুক্ত করতে, GoogleAICacheManager.list() ব্যবহার করুন :

const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
  console.log(cache);
});

একটি ক্যাশে আপডেট করুন

আপনি একটি ক্যাশের জন্য একটি নতুন ttl বা expireTime সেট করতে পারেন। ক্যাশে সম্পর্কে অন্য কিছু পরিবর্তন করা সমর্থিত নয়।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে GoogleAICacheManager.update() ব্যবহার করে একটি ক্যাশের ttl আপডেট করতে হয়।

const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);

একটি ক্যাশে মুছুন

ক্যাশিং পরিষেবা ক্যাশে থেকে ম্যানুয়ালি বিষয়বস্তু অপসারণের জন্য একটি মুছে ফেলার অপারেশন প্রদান করে। GoogleAICacheManager.delete() ব্যবহার করে কীভাবে একটি ক্যাশে মুছে ফেলা যায় তা নিম্নলিখিত উদাহরণটি দেখায়।

await cacheManager.delete(cacheName);

অতিরিক্ত বিবেচনা

প্রসঙ্গ ক্যাশিং ব্যবহার করার সময় নিম্নলিখিত বিবেচনাগুলি মনে রাখবেন:

  • প্রসঙ্গ ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা হল 32,768, এবং সর্বাধিক প্রদত্ত মডেলের জন্য সর্বাধিকের সমান। (টোকেন গণনা সম্পর্কে আরও জানতে, টোকেন গাইড দেখুন)।
  • মডেলটি ক্যাশে করা টোকেন এবং নিয়মিত ইনপুট টোকেনের মধ্যে কোনো পার্থক্য করে না। ক্যাশে করা বিষয়বস্তু হল প্রম্পটের একটি উপসর্গ।
  • কনটেক্সট ক্যাশিং-এ কোনো বিশেষ হার বা ব্যবহারের সীমা নেই; GenerateContent জন্য আদর্শ হারের সীমা প্রযোজ্য, এবং টোকেন সীমা ক্যাশে করা টোকেন অন্তর্ভুক্ত করে।
  • ক্যাশে পরিষেবার ক্রিয়েট, গেট এবং লিস্ট ক্রিয়াকলাপ থেকে usage_metadata ক্যাশ করা টোকেনের সংখ্যা ফেরত দেওয়া হয়, এবং ক্যাশে ব্যবহার করার সময় GenerateContent এও।
,

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

আপনি যখন টোকেনগুলির একটি সেট ক্যাশে করেন, তখন টোকেনগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার আগে আপনি কতক্ষণ ক্যাশে থাকতে চান তা চয়ন করতে পারেন। এই ক্যাশিং সময়কালকে টাইম টু লিভ (TTL) বলা হয়। সেট না থাকলে, TTL ডিফল্ট 1 ঘন্টা। ক্যাশিংয়ের জন্য খরচ নির্ভর করে ইনপুট টোকেনের আকারের উপর এবং আপনি কতক্ষণ টোকেনগুলি বজায় রাখতে চান।

প্রসঙ্গ ক্যাশিং জেমিনি 1.5 প্রো এবং জেমিনি 1.5 ফ্ল্যাশ উভয়ই সমর্থন করে।

কখন প্রসঙ্গ ক্যাশিং ব্যবহার করবেন

প্রসঙ্গ ক্যাশিং এমন পরিস্থিতিতে বিশেষভাবে উপযুক্ত যেখানে একটি উল্লেখযোগ্য প্রারম্ভিক প্রসঙ্গ সংক্ষিপ্ত অনুরোধ দ্বারা বারবার উল্লেখ করা হয়। ব্যবহারের ক্ষেত্রে প্রসঙ্গ ক্যাশিং ব্যবহার করার কথা বিবেচনা করুন যেমন:

  • বিস্তৃত সিস্টেম নির্দেশাবলী সহ চ্যাটবট
  • দীর্ঘ ভিডিও ফাইলের পুনরাবৃত্তিমূলক বিশ্লেষণ
  • বৃহৎ নথি সেটের বিরুদ্ধে পুনরাবৃত্ত প্রশ্ন
  • ঘন ঘন কোড সংগ্রহস্থল বিশ্লেষণ বা বাগ ফিক্সিং

কিভাবে ক্যাশিং খরচ কমায়

কনটেক্সট ক্যাশিং হল একটি প্রদত্ত বৈশিষ্ট্য যা সামগ্রিক অপারেশনাল খরচ কমানোর জন্য ডিজাইন করা হয়েছে। বিলিং নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করে:

  1. ক্যাশে টোকেন গণনা: ক্যাশ করা ইনপুট টোকেনের সংখ্যা, পরবর্তী প্রম্পটে অন্তর্ভুক্ত করার সময় একটি হ্রাস হারে বিল করা হয়।
  2. সঞ্চয়স্থানের সময়কাল: ক্যাশ করা টোকেন সংরক্ষিত সময়ের পরিমাণ (TTL), ক্যাশ করা টোকেন গণনার TTL সময়ের উপর ভিত্তি করে বিল করা হয়। TTL-এ কোন সর্বনিম্ন বা সর্বোচ্চ সীমা নেই।
  3. অন্যান্য কারণ: অন্যান্য চার্জ প্রযোজ্য, যেমন নন-ক্যাশড ইনপুট টোকেন এবং আউটপুট টোকেনগুলির জন্য।

আপ-টু-ডেট মূল্যের বিশদ বিবরণের জন্য, Gemini API মূল্য নির্ধারণ পৃষ্ঠাটি পড়ুন। কিভাবে টোকেন গণনা করতে হয় তা জানতে, টোকেন গাইড দেখুন।

প্রসঙ্গ ক্যাশিং কিভাবে ব্যবহার করবেন

এই বিভাগটি অনুমান করে যে আপনি একটি Gemini SDK ইনস্টল করেছেন (বা কার্ল ইনস্টল করেছেন) এবং আপনি একটি API কী কনফিগার করেছেন, যেমন quickstart এ দেখানো হয়েছে।

একটি ক্যাশে ব্যবহার করে সামগ্রী তৈরি করুন

নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি ক্যাশে সিস্টেম নির্দেশনা এবং ভিডিও ফাইল ব্যবহার করে বিষয়বস্তু তৈরি করতে হয়।

import { GoogleGenerativeAI } from '@google/generative-ai';
import {
  FileState,
  GoogleAICacheManager,
  GoogleAIFileManager,
} from '@google/generative-ai/server';

// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
  const fileManager = new GoogleAIFileManager(process.env.API_KEY);
  const fileResult = await fileManager.uploadFile(filePath, {
    displayName,
    mimeType: 'video/mp4',
  });

  const { name, uri } = fileResult.file;

  // Poll getFile() on a set interval (2 seconds here) to check file state.
  let file = await fileManager.getFile(name);
  while (file.state === FileState.PROCESSING) {
    console.log('Waiting for video to be processed.');
    // Sleep for 2 seconds
    await new Promise((resolve) => setTimeout(resolve, 2_000));
    file = await fileManager.getFile(name);
  }

  console.log(`Video processing complete: ${uri}`);

  return fileResult;
}

// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';

// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');

// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);

// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
  'You are an expert video analyzer, and your job is to answer ' +
  "the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
  model,
  displayName,
  systemInstruction,
  contents: [
    {
      role: 'user',
      parts: [
        {
          fileData: {
            mimeType: fileResult.file.mimeType,
            fileUri: fileResult.file.uri,
          },
        },
      ],
    },
  ],
  ttlSeconds,
});

// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);

// Query the model.
const result = await genModel.generateContent({
  contents: [
    {
      role: 'user',
      parts: [
        {
          text:
            'Introduce different characters in the movie by describing ' +
            'their personality, looks, and names. Also list the ' +
            'timestamps they were introduced for the first time.',
        },
      ],
    },
  ],
});

console.log(result.response.usageMetadata);

// The output should look something like this:
//
// {
//   promptTokenCount: 696220,
//   candidatesTokenCount: 270,
//   totalTokenCount: 696490,
//   cachedContentTokenCount: 696191
// }

console.log(result.response.text());

তালিকা ক্যাশে

ক্যাশে করা বিষয়বস্তু পুনরুদ্ধার করা বা দেখা সম্ভব নয়, তবে আপনি ক্যাশে মেটাডেটা ( name , model , displayName , usageMetadata , createTime , updateTime , এবং expireTime ) পুনরুদ্ধার করতে পারেন।

সমস্ত আপলোড করা ক্যাশে মেটাডেটা তালিকাভুক্ত করতে, GoogleAICacheManager.list() ব্যবহার করুন :

const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
  console.log(cache);
});

একটি ক্যাশে আপডেট করুন

আপনি একটি ক্যাশের জন্য একটি নতুন ttl বা expireTime সেট করতে পারেন। ক্যাশে সম্পর্কে অন্য কিছু পরিবর্তন করা সমর্থিত নয়।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে GoogleAICacheManager.update() ব্যবহার করে একটি ক্যাশের ttl আপডেট করতে হয়।

const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);

একটি ক্যাশে মুছুন

ক্যাশিং পরিষেবা ক্যাশে থেকে ম্যানুয়ালি বিষয়বস্তু অপসারণের জন্য একটি মুছে ফেলার অপারেশন প্রদান করে। GoogleAICacheManager.delete() ব্যবহার করে কীভাবে একটি ক্যাশে মুছে ফেলা যায় তা নিম্নলিখিত উদাহরণটি দেখায়।

await cacheManager.delete(cacheName);

অতিরিক্ত বিবেচনা

প্রসঙ্গ ক্যাশিং ব্যবহার করার সময় নিম্নলিখিত বিবেচনাগুলি মনে রাখবেন:

  • প্রসঙ্গ ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা হল 32,768, এবং সর্বাধিক প্রদত্ত মডেলের জন্য সর্বাধিকের সমান। (টোকেন গণনা সম্পর্কে আরও জানতে, টোকেন গাইড দেখুন)।
  • মডেলটি ক্যাশে করা টোকেন এবং নিয়মিত ইনপুট টোকেনের মধ্যে কোনো পার্থক্য করে না। ক্যাশে করা বিষয়বস্তু হল প্রম্পটের একটি উপসর্গ।
  • কনটেক্সট ক্যাশিং-এ কোনো বিশেষ হার বা ব্যবহারের সীমা নেই; GenerateContent জন্য আদর্শ হারের সীমা প্রযোজ্য, এবং টোকেন সীমা ক্যাশে করা টোকেন অন্তর্ভুক্ত করে।
  • ক্যাশে পরিষেবার ক্রিয়েট, গেট এবং লিস্ট ক্রিয়াকলাপ থেকে usage_metadata ক্যাশ করা টোকেনের সংখ্যা ফেরত দেওয়া হয়, এবং ক্যাশে ব্যবহার করার সময় GenerateContent এও।
,

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

আপনি যখন টোকেনগুলির একটি সেট ক্যাশে করেন, তখন টোকেনগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার আগে আপনি কতক্ষণ ক্যাশে থাকতে চান তা চয়ন করতে পারেন। এই ক্যাশিং সময়কালকে টাইম টু লিভ (TTL) বলা হয়। সেট না থাকলে, TTL ডিফল্ট 1 ঘন্টা। ক্যাশিংয়ের জন্য খরচ নির্ভর করে ইনপুট টোকেনের আকারের উপর এবং আপনি কতক্ষণ টোকেনগুলি বজায় রাখতে চান।

প্রসঙ্গ ক্যাশিং জেমিনি 1.5 প্রো এবং জেমিনি 1.5 ফ্ল্যাশ উভয়ই সমর্থন করে।

কখন প্রসঙ্গ ক্যাশিং ব্যবহার করবেন

প্রসঙ্গ ক্যাশিং এমন পরিস্থিতিতে বিশেষভাবে উপযুক্ত যেখানে একটি উল্লেখযোগ্য প্রারম্ভিক প্রসঙ্গ সংক্ষিপ্ত অনুরোধ দ্বারা বারবার উল্লেখ করা হয়। ব্যবহারের ক্ষেত্রে প্রসঙ্গ ক্যাশিং ব্যবহার করার কথা বিবেচনা করুন যেমন:

  • বিস্তৃত সিস্টেম নির্দেশাবলী সহ চ্যাটবট
  • দীর্ঘ ভিডিও ফাইলের পুনরাবৃত্তিমূলক বিশ্লেষণ
  • বৃহৎ নথি সেটের বিরুদ্ধে পুনরাবৃত্ত প্রশ্ন
  • ঘন ঘন কোড সংগ্রহস্থল বিশ্লেষণ বা বাগ ফিক্সিং

কিভাবে ক্যাশিং খরচ কমায়

কনটেক্সট ক্যাশিং হল একটি প্রদত্ত বৈশিষ্ট্য যা সামগ্রিক অপারেশনাল খরচ কমানোর জন্য ডিজাইন করা হয়েছে। বিলিং নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করে:

  1. ক্যাশে টোকেন গণনা: ক্যাশ করা ইনপুট টোকেনের সংখ্যা, পরবর্তী প্রম্পটে অন্তর্ভুক্ত করার সময় একটি হ্রাস হারে বিল করা হয়।
  2. সঞ্চয়স্থানের সময়কাল: ক্যাশ করা টোকেন সংরক্ষিত সময়ের পরিমাণ (TTL), ক্যাশ করা টোকেন গণনার TTL সময়ের উপর ভিত্তি করে বিল করা হয়। TTL-এ কোন সর্বনিম্ন বা সর্বোচ্চ সীমা নেই।
  3. অন্যান্য কারণ: অন্যান্য চার্জ প্রযোজ্য, যেমন নন-ক্যাশড ইনপুট টোকেন এবং আউটপুট টোকেনগুলির জন্য।

আপ-টু-ডেট মূল্যের বিশদ বিবরণের জন্য, Gemini API মূল্য নির্ধারণ পৃষ্ঠাটি পড়ুন। কিভাবে টোকেন গণনা করতে হয় তা জানতে, টোকেন গাইড দেখুন।

প্রসঙ্গ ক্যাশিং কিভাবে ব্যবহার করবেন

এই বিভাগটি অনুমান করে যে আপনি একটি Gemini SDK ইনস্টল করেছেন (বা কার্ল ইনস্টল করেছেন) এবং আপনি একটি API কী কনফিগার করেছেন, যেমন quickstart এ দেখানো হয়েছে।

একটি ক্যাশে ব্যবহার করে সামগ্রী তৈরি করুন

নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি ক্যাশে সিস্টেম নির্দেশনা এবং ভিডিও ফাইল ব্যবহার করে বিষয়বস্তু তৈরি করতে হয়।

import { GoogleGenerativeAI } from '@google/generative-ai';
import {
  FileState,
  GoogleAICacheManager,
  GoogleAIFileManager,
} from '@google/generative-ai/server';

// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
  const fileManager = new GoogleAIFileManager(process.env.API_KEY);
  const fileResult = await fileManager.uploadFile(filePath, {
    displayName,
    mimeType: 'video/mp4',
  });

  const { name, uri } = fileResult.file;

  // Poll getFile() on a set interval (2 seconds here) to check file state.
  let file = await fileManager.getFile(name);
  while (file.state === FileState.PROCESSING) {
    console.log('Waiting for video to be processed.');
    // Sleep for 2 seconds
    await new Promise((resolve) => setTimeout(resolve, 2_000));
    file = await fileManager.getFile(name);
  }

  console.log(`Video processing complete: ${uri}`);

  return fileResult;
}

// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';

// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');

// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);

// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
  'You are an expert video analyzer, and your job is to answer ' +
  "the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
  model,
  displayName,
  systemInstruction,
  contents: [
    {
      role: 'user',
      parts: [
        {
          fileData: {
            mimeType: fileResult.file.mimeType,
            fileUri: fileResult.file.uri,
          },
        },
      ],
    },
  ],
  ttlSeconds,
});

// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);

// Query the model.
const result = await genModel.generateContent({
  contents: [
    {
      role: 'user',
      parts: [
        {
          text:
            'Introduce different characters in the movie by describing ' +
            'their personality, looks, and names. Also list the ' +
            'timestamps they were introduced for the first time.',
        },
      ],
    },
  ],
});

console.log(result.response.usageMetadata);

// The output should look something like this:
//
// {
//   promptTokenCount: 696220,
//   candidatesTokenCount: 270,
//   totalTokenCount: 696490,
//   cachedContentTokenCount: 696191
// }

console.log(result.response.text());

তালিকা ক্যাশে

ক্যাশে করা বিষয়বস্তু পুনরুদ্ধার করা বা দেখা সম্ভব নয়, তবে আপনি ক্যাশে মেটাডেটা ( name , model , displayName , usageMetadata , createTime , updateTime , এবং expireTime ) পুনরুদ্ধার করতে পারেন।

সমস্ত আপলোড করা ক্যাশে মেটাডেটা তালিকাভুক্ত করতে, GoogleAICacheManager.list() ব্যবহার করুন :

const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
  console.log(cache);
});

একটি ক্যাশে আপডেট করুন

আপনি একটি ক্যাশের জন্য একটি নতুন ttl বা expireTime সেট করতে পারেন। ক্যাশে সম্পর্কে অন্য কিছু পরিবর্তন করা সমর্থিত নয়।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে GoogleAICacheManager.update() ব্যবহার করে একটি ক্যাশের ttl আপডেট করতে হয়।

const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);

একটি ক্যাশে মুছুন

ক্যাশিং পরিষেবা ক্যাশে থেকে ম্যানুয়ালি বিষয়বস্তু অপসারণের জন্য একটি মুছে ফেলার অপারেশন প্রদান করে। GoogleAICacheManager.delete() ব্যবহার করে কীভাবে একটি ক্যাশে মুছে ফেলা যায় তা নিম্নলিখিত উদাহরণটি দেখায়।

await cacheManager.delete(cacheName);

অতিরিক্ত বিবেচনা

প্রসঙ্গ ক্যাশিং ব্যবহার করার সময় নিম্নলিখিত বিবেচনাগুলি মনে রাখবেন:

  • প্রসঙ্গ ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা হল 32,768, এবং সর্বাধিক প্রদত্ত মডেলের জন্য সর্বাধিকের সমান। (টোকেন গণনা সম্পর্কে আরও জানতে, টোকেন গাইড দেখুন)।
  • মডেলটি ক্যাশে করা টোকেন এবং নিয়মিত ইনপুট টোকেনের মধ্যে কোনো পার্থক্য করে না। ক্যাশে করা বিষয়বস্তু হল প্রম্পটের একটি উপসর্গ।
  • কনটেক্সট ক্যাশিং-এ কোনো বিশেষ হার বা ব্যবহারের সীমা নেই; GenerateContent জন্য আদর্শ হারের সীমা প্রযোজ্য, এবং টোকেন সীমা ক্যাশে করা টোকেন অন্তর্ভুক্ত করে।
  • ক্যাশে পরিষেবার ক্রিয়েট, গেট এবং লিস্ট ক্রিয়াকলাপ থেকে usage_metadata ক্যাশ করা টোকেনের সংখ্যা ফেরত দেওয়া হয়, এবং ক্যাশে ব্যবহার করার সময় GenerateContent এও।
,

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

আপনি যখন টোকেনগুলির একটি সেট ক্যাশে করেন, তখন টোকেনগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার আগে আপনি কতক্ষণ ক্যাশে থাকতে চান তা চয়ন করতে পারেন। এই ক্যাশিং সময়কালকে টাইম টু লিভ (TTL) বলা হয়। সেট না থাকলে, TTL ডিফল্ট 1 ঘন্টা। ক্যাশিংয়ের জন্য খরচ নির্ভর করে ইনপুট টোকেনের আকারের উপর এবং আপনি কতক্ষণ টোকেনগুলি বজায় রাখতে চান।

প্রসঙ্গ ক্যাশিং জেমিনি 1.5 প্রো এবং জেমিনি 1.5 ফ্ল্যাশ উভয়ই সমর্থন করে।

কখন প্রসঙ্গ ক্যাশিং ব্যবহার করবেন

প্রসঙ্গ ক্যাশিং এমন পরিস্থিতিতে বিশেষভাবে উপযুক্ত যেখানে একটি উল্লেখযোগ্য প্রারম্ভিক প্রসঙ্গ সংক্ষিপ্ত অনুরোধ দ্বারা বারবার উল্লেখ করা হয়। ব্যবহারের ক্ষেত্রে প্রসঙ্গ ক্যাশিং ব্যবহার করার কথা বিবেচনা করুন যেমন:

  • বিস্তৃত সিস্টেম নির্দেশাবলী সহ চ্যাটবট
  • দীর্ঘ ভিডিও ফাইলের পুনরাবৃত্তিমূলক বিশ্লেষণ
  • বৃহৎ নথি সেটের বিরুদ্ধে পুনরাবৃত্ত প্রশ্ন
  • ঘন ঘন কোড সংগ্রহস্থল বিশ্লেষণ বা বাগ ফিক্সিং

কিভাবে ক্যাশিং খরচ কমায়

কনটেক্সট ক্যাশিং হল একটি প্রদত্ত বৈশিষ্ট্য যা সামগ্রিক অপারেশনাল খরচ কমানোর জন্য ডিজাইন করা হয়েছে। বিলিং নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করে:

  1. ক্যাশে টোকেন গণনা: ক্যাশ করা ইনপুট টোকেনের সংখ্যা, পরবর্তী প্রম্পটে অন্তর্ভুক্ত করার সময় একটি হ্রাস হারে বিল করা হয়।
  2. সঞ্চয়স্থানের সময়কাল: ক্যাশ করা টোকেন সংরক্ষিত সময়ের পরিমাণ (TTL), ক্যাশ করা টোকেন গণনার TTL সময়ের উপর ভিত্তি করে বিল করা হয়। TTL-এ কোন সর্বনিম্ন বা সর্বোচ্চ সীমা নেই।
  3. অন্যান্য কারণ: অন্যান্য চার্জ প্রযোজ্য, যেমন নন-ক্যাশড ইনপুট টোকেন এবং আউটপুট টোকেনগুলির জন্য।

আপ-টু-ডেট মূল্যের বিশদ বিবরণের জন্য, Gemini API মূল্য নির্ধারণ পৃষ্ঠাটি পড়ুন। কিভাবে টোকেন গণনা করতে হয় তা জানতে, টোকেন গাইড দেখুন।

প্রসঙ্গ ক্যাশিং কিভাবে ব্যবহার করবেন

এই বিভাগটি অনুমান করে যে আপনি একটি Gemini SDK ইনস্টল করেছেন (বা কার্ল ইনস্টল করেছেন) এবং আপনি একটি API কী কনফিগার করেছেন, যেমন quickstart এ দেখানো হয়েছে।

একটি ক্যাশে ব্যবহার করে সামগ্রী তৈরি করুন

নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি ক্যাশে সিস্টেম নির্দেশনা এবং ভিডিও ফাইল ব্যবহার করে বিষয়বস্তু তৈরি করতে হয়।

import { GoogleGenerativeAI } from '@google/generative-ai';
import {
  FileState,
  GoogleAICacheManager,
  GoogleAIFileManager,
} from '@google/generative-ai/server';

// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
  const fileManager = new GoogleAIFileManager(process.env.API_KEY);
  const fileResult = await fileManager.uploadFile(filePath, {
    displayName,
    mimeType: 'video/mp4',
  });

  const { name, uri } = fileResult.file;

  // Poll getFile() on a set interval (2 seconds here) to check file state.
  let file = await fileManager.getFile(name);
  while (file.state === FileState.PROCESSING) {
    console.log('Waiting for video to be processed.');
    // Sleep for 2 seconds
    await new Promise((resolve) => setTimeout(resolve, 2_000));
    file = await fileManager.getFile(name);
  }

  console.log(`Video processing complete: ${uri}`);

  return fileResult;
}

// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';

// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');

// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);

// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
  'You are an expert video analyzer, and your job is to answer ' +
  "the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
  model,
  displayName,
  systemInstruction,
  contents: [
    {
      role: 'user',
      parts: [
        {
          fileData: {
            mimeType: fileResult.file.mimeType,
            fileUri: fileResult.file.uri,
          },
        },
      ],
    },
  ],
  ttlSeconds,
});

// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);

// Query the model.
const result = await genModel.generateContent({
  contents: [
    {
      role: 'user',
      parts: [
        {
          text:
            'Introduce different characters in the movie by describing ' +
            'their personality, looks, and names. Also list the ' +
            'timestamps they were introduced for the first time.',
        },
      ],
    },
  ],
});

console.log(result.response.usageMetadata);

// The output should look something like this:
//
// {
//   promptTokenCount: 696220,
//   candidatesTokenCount: 270,
//   totalTokenCount: 696490,
//   cachedContentTokenCount: 696191
// }

console.log(result.response.text());

তালিকা ক্যাশে

ক্যাশে করা বিষয়বস্তু পুনরুদ্ধার করা বা দেখা সম্ভব নয়, তবে আপনি ক্যাশে মেটাডেটা ( name , model , displayName , usageMetadata , createTime , updateTime , এবং expireTime ) পুনরুদ্ধার করতে পারেন।

সমস্ত আপলোড করা ক্যাশে মেটাডেটা তালিকাভুক্ত করতে, GoogleAICacheManager.list() ব্যবহার করুন :

const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
  console.log(cache);
});

একটি ক্যাশে আপডেট করুন

আপনি একটি ক্যাশের জন্য একটি নতুন ttl বা expireTime সেট করতে পারেন। ক্যাশে সম্পর্কে অন্য কিছু পরিবর্তন করা সমর্থিত নয়।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে GoogleAICacheManager.update() ব্যবহার করে একটি ক্যাশের ttl আপডেট করতে হয়।

const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);

একটি ক্যাশে মুছুন

ক্যাশিং পরিষেবা ক্যাশে থেকে ম্যানুয়ালি বিষয়বস্তু অপসারণের জন্য একটি মুছে ফেলার অপারেশন প্রদান করে। GoogleAICacheManager.delete() ব্যবহার করে কীভাবে একটি ক্যাশে মুছে ফেলা যায় তা নিম্নলিখিত উদাহরণটি দেখায়।

await cacheManager.delete(cacheName);

অতিরিক্ত বিবেচনা

প্রসঙ্গ ক্যাশিং ব্যবহার করার সময় নিম্নলিখিত বিবেচনাগুলি মনে রাখবেন:

  • প্রসঙ্গ ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা হল 32,768, এবং সর্বাধিক প্রদত্ত মডেলের জন্য সর্বাধিকের সমান। (টোকেন গণনা সম্পর্কে আরও জানতে, টোকেন গাইড দেখুন)।
  • মডেলটি ক্যাশে করা টোকেন এবং নিয়মিত ইনপুট টোকেনের মধ্যে কোনো পার্থক্য করে না। ক্যাশে করা বিষয়বস্তু হল প্রম্পটের একটি উপসর্গ।
  • কনটেক্সট ক্যাশিং-এ কোনো বিশেষ হার বা ব্যবহারের সীমা নেই; GenerateContent জন্য আদর্শ হারের সীমা প্রযোজ্য, এবং টোকেন সীমা ক্যাশে করা টোকেন অন্তর্ভুক্ত করে।
  • ক্যাশে পরিষেবার ক্রিয়েট, গেট এবং লিস্ট ক্রিয়াকলাপ থেকে usage_metadata ক্যাশ করা টোকেনের সংখ্যা ফেরত দেওয়া হয়, এবং ক্যাশে ব্যবহার করার সময় GenerateContent এও।