একটি সাধারণ AI ওয়ার্কফ্লোতে, আপনি একটি মডেলে একই ইনপুট টোকেন বারবার পাস করতে পারেন। Gemini API দুটি ভিন্ন ক্যাশিং প্রক্রিয়া অফার করে:
- অন্তর্নিহিত ক্যাশিং (জেমিনি 2.5 মডেলগুলিতে স্বয়ংক্রিয়ভাবে সক্ষম, কোনও খরচ সাশ্রয়ের গ্যারান্টি নেই)
- স্পষ্ট ক্যাশিং (অধিকাংশ মডেলে ম্যানুয়ালি সক্ষম করা যেতে পারে, খরচ সাশ্রয়ের গ্যারান্টি)
যে ক্ষেত্রে আপনি খরচ সাশ্রয়ের গ্যারান্টি দিতে চান সেখানে স্পষ্ট ক্যাশিং উপযোগী, কিন্তু কিছু যোগ করা ডেভেলপারের কাজ সহ।
অন্তর্নিহিত ক্যাশিং
সমস্ত জেমিনি 2.5 মডেলের জন্য অন্তর্নিহিত ক্যাশিং ডিফল্টরূপে সক্রিয় থাকে৷ আপনার অনুরোধ ক্যাশে আঘাত করলে আমরা স্বয়ংক্রিয়ভাবে খরচ সঞ্চয় পাস করি। এটি সক্ষম করার জন্য আপনাকে কিছু করতে হবে না। এটি 8ই মে, 2025 তারিখ থেকে কার্যকর৷ প্রসঙ্গ ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা 2.5 ফ্ল্যাশের জন্য 1,024 এবং 2.5 প্রো-এর জন্য 2,048৷
একটি অন্তর্নিহিত ক্যাশে আঘাতের সম্ভাবনা বাড়ানোর জন্য:
- আপনার প্রম্পটের শুরুতে বড় এবং সাধারণ বিষয়বস্তু রাখার চেষ্টা করুন
- অল্প সময়ের মধ্যে অনুরূপ উপসর্গ সহ অনুরোধ পাঠানোর চেষ্টা করুন
আপনি প্রতিক্রিয়া অবজেক্টের usage_metadata
ক্ষেত্রে ক্যাশে হিট করা টোকেনের সংখ্যা দেখতে পারেন।
স্পষ্ট ক্যাশিং
Gemini API স্পষ্ট ক্যাশিং বৈশিষ্ট্য ব্যবহার করে, আপনি একবার মডেলে কিছু বিষয়বস্তু প্রেরণ করতে পারেন, ইনপুট টোকেনগুলি ক্যাশে করতে পারেন এবং তারপরে পরবর্তী অনুরোধগুলির জন্য ক্যাশে করা টোকেনগুলি উল্লেখ করতে পারেন৷ নির্দিষ্ট ভলিউমে, ক্যাশে করা টোকেন ব্যবহার করা টোকেনের একই কর্পাসে বারবার পাস করার চেয়ে কম খরচ।
আপনি যখন টোকেনগুলির একটি সেট ক্যাশে করেন, তখন টোকেনগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার আগে আপনি কতক্ষণ ক্যাশে থাকতে চান তা চয়ন করতে পারেন। এই ক্যাশিং সময়কালকে টাইম টু লিভ (TTL) বলা হয়। সেট না থাকলে, TTL ডিফল্ট 1 ঘন্টা। ক্যাশিংয়ের জন্য খরচ নির্ভর করে ইনপুট টোকেনের আকারের উপর এবং আপনি কতক্ষণ টোকেনগুলি বজায় রাখতে চান।
এই বিভাগটি অনুমান করে যে আপনি একটি Gemini SDK ইনস্টল করেছেন (বা কার্ল ইনস্টল করেছেন) এবং আপনি একটি 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
প্রপার্টি ব্যবহার করে স্পষ্ট ক্যাশে সক্ষম করতে পারেন।
কখন সুস্পষ্ট ক্যাশিং ব্যবহার করবেন
প্রসঙ্গ ক্যাশিং এমন পরিস্থিতিতে বিশেষভাবে উপযুক্ত যেখানে একটি উল্লেখযোগ্য প্রারম্ভিক প্রসঙ্গ সংক্ষিপ্ত অনুরোধ দ্বারা বারবার উল্লেখ করা হয়। ব্যবহারের ক্ষেত্রে প্রসঙ্গ ক্যাশিং ব্যবহার করার কথা বিবেচনা করুন যেমন:
- বিস্তৃত সিস্টেম নির্দেশাবলী সহ চ্যাটবট
- দীর্ঘ ভিডিও ফাইলের পুনরাবৃত্তিমূলক বিশ্লেষণ
- বৃহৎ নথি সেটের বিরুদ্ধে পুনরাবৃত্ত প্রশ্ন
- ঘন ঘন কোড সংগ্রহস্থল বিশ্লেষণ বা বাগ ফিক্সিং
কিভাবে সুস্পষ্ট ক্যাশিং খরচ কমায়
কনটেক্সট ক্যাশিং হল একটি প্রদত্ত বৈশিষ্ট্য যা সামগ্রিক অপারেশনাল খরচ কমানোর জন্য ডিজাইন করা হয়েছে। বিলিং নিম্নলিখিত বিষয়গুলির উপর ভিত্তি করে:
- ক্যাশে টোকেন গণনা: ক্যাশ করা ইনপুট টোকেনের সংখ্যা, পরবর্তী প্রম্পটে অন্তর্ভুক্ত করার সময় একটি হ্রাস হারে বিল করা হয়।
- সঞ্চয়স্থানের সময়কাল: ক্যাশ করা টোকেন সংরক্ষিত সময়ের পরিমাণ (TTL), ক্যাশ করা টোকেন গণনার TTL সময়ের উপর ভিত্তি করে বিল করা হয়। TTL-এ কোন সর্বনিম্ন বা সর্বোচ্চ সীমা নেই।
- অন্যান্য কারণ: অন্যান্য চার্জ প্রযোজ্য, যেমন নন-ক্যাশড ইনপুট টোকেন এবং আউটপুট টোকেনগুলির জন্য।
আপ-টু-ডেট মূল্যের বিশদ বিবরণের জন্য, Gemini API মূল্য নির্ধারণ পৃষ্ঠাটি পড়ুন। কিভাবে টোকেন গণনা করতে হয় তা জানতে, টোকেন গাইড দেখুন।
অতিরিক্ত বিবেচনা
প্রসঙ্গ ক্যাশিং ব্যবহার করার সময় নিম্নলিখিত বিবেচনাগুলি মনে রাখবেন:
- প্রসঙ্গ ক্যাশিংয়ের জন্য সর্বনিম্ন ইনপুট টোকেন গণনা 2.5 ফ্ল্যাশের জন্য 1,024 এবং 2.5 প্রো-এর জন্য 2,048। সর্বোচ্চ প্রদত্ত মডেলের জন্য সর্বোচ্চ সমান। (টোকেন গণনা সম্পর্কে আরও জানতে, টোকেন গাইড দেখুন)।
- মডেলটি ক্যাশে করা টোকেন এবং নিয়মিত ইনপুট টোকেনের মধ্যে কোনো পার্থক্য করে না। ক্যাশে কন্টেন্ট হল প্রম্পটের একটি উপসর্গ।
- কনটেক্সট ক্যাশিং-এ কোনো বিশেষ হার বা ব্যবহারের সীমা নেই;
GenerateContent
জন্য আদর্শ হারের সীমা প্রযোজ্য, এবং টোকেন সীমা ক্যাশে করা টোকেন অন্তর্ভুক্ত করে। - ক্যাশে পরিষেবার ক্রিয়েট, গেট এবং লিস্ট ক্রিয়াকলাপ থেকে
usage_metadata
ক্যাশ করা টোকেনের সংখ্যা ফেরত দেওয়া হয়, এবং ক্যাশে ব্যবহার করার সময়GenerateContent
এও।