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

একটি সাধারণ AI ওয়ার্কফ্লোতে, আপনি একই ইনপুট টোকেন বারবার একটি মডেলে পাঠাতে পারেন। জেমিনি API দুটি ভিন্ন ক্যাশিং প্রক্রিয়া অফার করে:

  • অন্তর্নিহিত ক্যাশিং (জেমিনি ২.৫ মডেলে স্বয়ংক্রিয়ভাবে সক্ষম, খরচ সাশ্রয়ের কোনও গ্যারান্টি নেই)
  • স্পষ্ট ক্যাশিং (বেশিরভাগ মডেলে ম্যানুয়ালি সক্ষম করা যেতে পারে, খরচ সাশ্রয়ের গ্যারান্টি)

যেখানে আপনি খরচ সাশ্রয়ের নিশ্চয়তা দিতে চান, সেখানে স্পষ্ট ক্যাশিং কার্যকর, তবে কিছু অতিরিক্ত ডেভেলপার কাজের সাথে।

অন্তর্নিহিত ক্যাশিং

সমস্ত জেমিনি ২.৫ মডেলের জন্য ইমপ্লিসিট ক্যাশিং ডিফল্টরূপে সক্ষম। আপনার অনুরোধ ক্যাশে পৌঁছালে আমরা স্বয়ংক্রিয়ভাবে খরচ সাশ্রয় প্রদান করি। এটি সক্ষম করার জন্য আপনাকে কিছুই করতে হবে না। এটি ৮ই মে, ২০২৫ থেকে কার্যকর। কনটেক্সট ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা ২.৫ ফ্ল্যাশের জন্য ১,০২৪ এবং ২.৫ প্রো এর জন্য ৪,০৯৬।

অন্তর্নিহিত ক্যাশে আঘাতের সম্ভাবনা বাড়ানোর জন্য:

  • আপনার প্রম্পটের শুরুতে বড় এবং সাধারণ বিষয়বস্তু রাখার চেষ্টা করুন।
  • অল্প সময়ের মধ্যে একই রকম প্রিফিক্স সহ অনুরোধ পাঠানোর চেষ্টা করুন।

রেসপন্স অবজেক্টের usage_metadata ফিল্ডে আপনি ক্যাশে হিট হওয়া টোকেনের সংখ্যা দেখতে পাবেন।

স্পষ্ট ক্যাশিং

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

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

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

ক্যাশে ব্যবহার করে কন্টেন্ট তৈরি করুন

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

ভিডিও

import os
import pathlib
import requests
import time

from google import genai
from google.genai import types

client = genai.Client()

# Download video file
url = 'https://storage.googleapis.com/generativeai-downloads/data/SherlockJr._10min.mp4'
path_to_video_file = pathlib.Path('SherlockJr._10min.mp4')
if not path_to_video_file.exists():
  with path_to_video_file.open('wb') as wf:
    response = requests.get(url, stream=True)
    for chunk in response.iter_content(chunk_size=32768):
      wf.write(chunk)

# Upload the video using the Files API
video_file = client.files.upload(file=path_to_video_file)

# Wait for the file to finish processing
while video_file.state.name == 'PROCESSING':
  print('Waiting for video to be processed.')
  time.sleep(2)
  video_file = client.files.get(name=video_file.name)

print(f'Video processing complete: {video_file.uri}')

# You must use an explicit version suffix: "-flash-001", not just "-flash".
model='models/gemini-2.0-flash-001'

# Create a cache with a 5 minute TTL
cache = client.caches.create(
    model=model,
    config=types.CreateCachedContentConfig(
      display_name='sherlock jr movie', # used to identify the cache
      system_instruction=(
          '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.'
      ),
      contents=[video_file],
      ttl="300s",
  )
)

# Construct a GenerativeModel which uses the created cache.
response = client.models.generate_content(
  model = model,
  contents= (
    'Introduce different characters in the movie by describing '
    'their personality, looks, and names. Also list the timestamps '
    'they were introduced for the first time.'),
  config=types.GenerateContentConfig(cached_content=cache.name)
)

print(response.usage_metadata)

# The output should look something like this:
#
# prompt_token_count: 696219
# cached_content_token_count: 696190
# candidates_token_count: 214
# total_token_count: 696433

print(response.text)

পিডিএফ

from google import genai
from google.genai import types
import io
import httpx

client = genai.Client()

long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"

# Retrieve and upload the PDF using the File API
doc_io = io.BytesIO(httpx.get(long_context_pdf_path).content)

document = client.files.upload(
  file=doc_io,
  config=dict(mime_type='application/pdf')
)

model_name = "gemini-2.0-flash-001"
system_instruction = "You are an expert analyzing transcripts."

# Create a cached content object
cache = client.caches.create(
    model=model_name,
    config=types.CreateCachedContentConfig(
      system_instruction=system_instruction,
      contents=[document],
    )
)

# Display the cache details
print(f'{cache=}')

# Generate content using the cached prompt and document
response = client.models.generate_content(
  model=model_name,
  contents="Please summarize this transcript",
  config=types.GenerateContentConfig(
    cached_content=cache.name
  ))

# (Optional) Print usage metadata for insights into the API call
print(f'{response.usage_metadata=}')

# Print the generated text
print('\n\n', response.text)

ক্যাশে তালিকাভুক্ত করুন

ক্যাশে করা কন্টেন্ট পুনরুদ্ধার করা বা দেখা সম্ভব নয়, তবে আপনি ক্যাশে মেটাডেটা ( name , model , display_name , usage_metadata , create_time , update_time , এবং expire_time ) পুনরুদ্ধার করতে পারেন।

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

for cache in client.caches.list():
  print(cache)

একটি ক্যাশে অবজেক্টের মেটাডেটা আনতে, যদি আপনি এর নাম জানেন, তাহলে get ব্যবহার করুন:

client.caches.get(name=name)

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

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

নিম্নলিখিত উদাহরণে client.caches.update() ব্যবহার করে ক্যাশের ttl আপডেট করার পদ্ধতি দেখানো হয়েছে।

from google import genai
from google.genai import types

client.caches.update(
  name = cache.name,
  config  = types.UpdateCachedContentConfig(
      ttl='300s'
  )
)

মেয়াদ শেষ হওয়ার সময় নির্ধারণ করার জন্য, এটি একটি datetime অবজেক্ট অথবা একটি ISO-ফরম্যাটেড datetime স্ট্রিং ( dt.isoformat() গ্রহণ করবে, যেমন 2025-01-27T16:02:36.473528+00:00 )। আপনার সময়ের মধ্যে একটি সময় অঞ্চল অন্তর্ভুক্ত থাকতে হবে ( datetime.utcnow() একটি সময় অঞ্চল সংযুক্ত করে না, datetime.now(datetime.timezone.utc) একটি সময় অঞ্চল সংযুক্ত করে)।

from google import genai
from google.genai import types
import datetime

# You must use a time zone-aware time.
in10min = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=10)

client.caches.update(
  name = cache.name,
  config  = types.UpdateCachedContentConfig(
      expire_time=in10min
  )
)

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

ক্যাশিং পরিষেবা ক্যাশ থেকে ম্যানুয়ালি কন্টেন্ট মুছে ফেলার জন্য একটি ডিলিট অপারেশন প্রদান করে। নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি ক্যাশ মুছে ফেলা যায়:

client.caches.delete(cache.name)

OpenAI লাইব্রেরি ব্যবহার করে স্পষ্ট ক্যাশিং

যদি আপনি একটি OpenAI লাইব্রেরি ব্যবহার করেন, তাহলে extra_body তে cached_content প্রপার্টি ব্যবহার করে স্পষ্ট ক্যাশিং সক্ষম করতে পারেন।

কখন স্পষ্ট ক্যাশিং ব্যবহার করবেন

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

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

স্পষ্ট ক্যাশিং কীভাবে খরচ কমায়

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

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

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

অতিরিক্ত বিবেচ্য বিষয়

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

  • কনটেক্সট ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা হল 2.5 ফ্ল্যাশের জন্য 1,024 এবং 2.5 প্রো এর জন্য 4,096। সর্বোচ্চটি প্রদত্ত মডেলের জন্য সর্বোচ্চের সমান। (টোকেন গণনা সম্পর্কে আরও জানতে, টোকেন নির্দেশিকা দেখুন)।
  • মডেলটি ক্যাশেড টোকেন এবং নিয়মিত ইনপুট টোকেনের মধ্যে কোনও পার্থক্য করে না। ক্যাশেড কন্টেন্ট হল প্রম্পটের একটি উপসর্গ।
  • কনটেক্সট ক্যাশিংয়ের ক্ষেত্রে কোনও বিশেষ হার বা ব্যবহারের সীমা নেই; GenerateContent জন্য স্ট্যান্ডার্ড হার সীমা প্রযোজ্য, এবং টোকেন সীমাতে ক্যাশেড টোকেন অন্তর্ভুক্ত।
  • ক্যাশেড টোকেনের সংখ্যা ক্যাশ পরিষেবার create, get, এবং list অপারেশন থেকে usage_metadata তে এবং ক্যাশ ব্যবহার করার সময় GenerateContent তেও ফেরত পাঠানো হয়।