জেমিনি ফ্লেক্স এপিআই হলো একটি ইনফারেন্স টিয়ার যা ভ্যারিয়েবল ল্যাটেন্সি এবং বেস্ট-এফোর্ট অ্যাভেইলেবিলিটির বিনিময়ে স্ট্যান্ডার্ড রেটের তুলনায় ৫০% খরচ হ্রাস করে। এটি এমন ল্যাটেন্সি-সহনশীল ওয়ার্কলোডের জন্য ডিজাইন করা হয়েছে যেগুলোর সিনক্রোনাস প্রসেসিং প্রয়োজন, কিন্তু স্ট্যান্ডার্ড এপিআই-এর রিয়েল-টাইম পারফরম্যান্সের দরকার নেই।
Flex কীভাবে ব্যবহার করবেন
Flex টিয়ার ব্যবহার করতে, রিকোয়েস্ট বডিতে service_tier হিসেবে flex উল্লেখ করুন। এই ফিল্ডটি উল্লেখ না করা হলে, ডিফল্টরূপে রিকোয়েস্টগুলো স্ট্যান্ডার্ড টিয়ার ব্যবহার করে।
পাইথন
import google.genai as genai
client = genai.Client()
try:
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents="Analyze this dataset for trends...",
config={'service_tier': 'flex'},
)
print(response.text)
except Exception as e:
print(f"Flex request failed: {e}")
জাভাস্ক্রিপ্ট
import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({});
async function main() {
try {
const response = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: "Analyze this dataset for trends...",
config: { serviceTier: "flex" },
});
console.log(response.text);
} catch (e) {
console.log(`Flex request failed: ${e}`);
}
}
await main();
যান
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
result, err := client.Models.GenerateContent(
ctx,
"gemini-3-flash-preview",
genai.Text("Analyze this dataset for trends..."),
&genai.GenerateContentConfig{
ServiceTier: "flex",
},
)
if err != nil {
log.Printf("Flex request failed: %v", err)
return
}
fmt.Println(result.Text())
}
বিশ্রাম
"https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"contents": [{
"parts":[{"text": "Summarize the latest research on quantum computing."}]
}],
"service_tier": "FLEX"
}'
ফ্লেক্স ইনফারেন্স কীভাবে কাজ করে
জেমিনি ফ্লেক্স ইনফারেন্স স্ট্যান্ডার্ড এপিআই এবং ব্যাচ এপিআই- এর ২৪-ঘণ্টার টার্নঅ্যারাউন্টের মধ্যেকার ব্যবধান পূরণ করে। এটি ব্যাকগ্রাউন্ড টাস্ক এবং সিকোয়েনশিয়াল ওয়ার্কফ্লোর জন্য একটি সাশ্রয়ী সমাধান প্রদান করতে অফ-পিক, "শেডেডেবল" কম্পিউট ক্যাপাসিটি ব্যবহার করে।
| বৈশিষ্ট্য | ফ্লেক্স | অগ্রাধিকার | মান | ব্যাচ |
|---|---|---|---|---|
| মূল্য নির্ধারণ | ৫০% ছাড় | স্ট্যান্ডার্ডের চেয়ে ৭৫-১০০% বেশি | সম্পূর্ণ মূল্য | ৫০% ছাড় |
| লেটেন্সি | মিনিট (লক্ষ্যমাত্রা ১-১৫ মিনিট) | নিম্ন (সেকেন্ড) | সেকেন্ড থেকে মিনিট | ২৪ ঘন্টা পর্যন্ত |
| নির্ভরযোগ্যতা | সর্বোত্তম প্রচেষ্টা (বাদ দেওয়া যায়) | উচ্চ (অ-ঝরে পড়া) | উচ্চ / মাঝারি-উচ্চ | উচ্চ (থ্রুপুটের জন্য) |
| ইন্টারফেস | সিঙ্ক্রোনাস | সিঙ্ক্রোনাস | সিঙ্ক্রোনাস | অ্যাসিঙ্ক্রোনাস |
মূল সুবিধাগুলি
- ব্যয় দক্ষতা : নন-প্রোডাকশন ইভ্যালুয়েশন, ব্যাকগ্রাউন্ড এজেন্ট এবং ডেটা এনরিচমেন্টের ক্ষেত্রে উল্লেখযোগ্য সাশ্রয়।
- ঝামেলাহীন : ব্যাচ অবজেক্ট, জব আইডি বা পোলিং পরিচালনা করার কোনো প্রয়োজন নেই; আপনার বিদ্যমান অনুরোধগুলিতে কেবল একটি প্যারামিটার যোগ করুন।
- সিঙ্ক্রোনাস ওয়ার্কফ্লো : এটি এমন অনুক্রমিক এপিআই চেইনের জন্য আদর্শ, যেখানে পরবর্তী অনুরোধটি পূর্ববর্তীটির আউটপুটের উপর নির্ভর করে। ফলে, এটি এজেন্টিক ওয়ার্কফ্লোর ক্ষেত্রে ব্যাচ পদ্ধতির চেয়ে বেশি নমনীয়।
ব্যবহারের ক্ষেত্র
- অফলাইন মূল্যায়ন : "এলএলএম-বিচারক হিসেবে" রিগ্রেশন টেস্ট বা লিডারবোর্ড চালানো।
- ব্যাকগ্রাউন্ড এজেন্ট : সিআরএম আপডেট, প্রোফাইল তৈরি বা কন্টেন্ট মডারেশনের মতো ধারাবাহিক কাজ, যেখানে কয়েক মিনিটের বিলম্ব গ্রহণযোগ্য।
- বাজেট-সীমাবদ্ধ গবেষণা : একাডেমিক পরীক্ষা-নিরীক্ষা, যার জন্য সীমিত বাজেটে বিপুল সংখ্যক অংশগ্রহণকারীর প্রয়োজন হয়।
হারের সীমা
Flex inference ট্র্যাফিক আপনার সাধারণ রেট লিমিটের অন্তর্ভুক্ত হয়; এটি Batch API-এর মতো বর্ধিত রেট লিমিট প্রদান করে না।
শেডযোগ্য ক্ষমতা
ফ্লেক্স ট্র্যাফিককে কম অগ্রাধিকার দেওয়া হয়। যদি স্ট্যান্ডার্ড ট্র্যাফিক হঠাৎ বেড়ে যায়, তাহলে উচ্চ-অগ্রাধিকারপ্রাপ্ত ব্যবহারকারীদের জন্য জায়গা নিশ্চিত করতে ফ্লেক্স অনুরোধগুলি বাতিল বা সরিয়ে দেওয়া হতে পারে। আপনি যদি উচ্চ-অগ্রাধিকার ইনফারেন্স খুঁজছেন, তাহলে 'প্রায়োরিটি ইনফারেন্স' দেখুন।
ত্রুটি কোড
যখন ফ্লেক্স ক্যাপাসিটি অনুপলব্ধ থাকে বা সিস্টেমে অতিরিক্ত চাপ থাকে, তখন API স্ট্যান্ডার্ড এরর কোডগুলো রিটার্ন করবে:
- ৫০৩ পরিষেবা অনুপলব্ধ : সিস্টেমটি বর্তমানে তার ধারণক্ষমতায় পূর্ণ।
- 429 অতিরিক্ত অনুরোধ : হারের সীমা বা সম্পদের নিঃশেষ।
ক্লায়েন্টের দায়িত্ব
- সার্ভার-সাইড ফলব্যাকের ব্যবস্থা নেই : অপ্রত্যাশিত চার্জ এড়ানোর জন্য, ফ্লেক্স ক্যাপাসিটি পূর্ণ হয়ে গেলে সিস্টেম কোনো ফ্লেক্স রিকোয়েস্টকে স্বয়ংক্রিয়ভাবে স্ট্যান্ডার্ড টায়ারে আপগ্রেড করবে না।
- পুনরায় চেষ্টা : আপনাকে অবশ্যই এক্সপোনেনশিয়াল ব্যাকঅফ সহ আপনার নিজস্ব ক্লায়েন্ট-সাইড পুনরায় চেষ্টার লজিক প্রয়োগ করতে হবে।
- টাইমআউট : যেহেতু Flex রিকোয়েস্টগুলো একটি কিউ-তে থাকতে পারে, তাই সংযোগ অকালে বন্ধ হয়ে যাওয়া এড়াতে আমরা ক্লায়েন্ট-সাইড টাইমআউট ১০ মিনিট বা তার বেশি করার পরামর্শ দিই।
টাইমআউট উইন্ডো সামঞ্জস্য করুন
আপনি REST API এবং ক্লায়েন্ট লাইব্রেরিগুলির জন্য প্রতি-অনুরোধ টাইমআউট এবং শুধুমাত্র ক্লায়েন্ট লাইব্রেরি ব্যবহার করার সময় গ্লোবাল টাইমআউট কনফিগার করতে পারেন।
সর্বদা নিশ্চিত করুন যে আপনার ক্লায়েন্ট-সাইড টাইমআউট সার্ভারের উদ্দিষ্ট ধৈর্যের সময়সীমাকে (যেমন, Flex ওয়েট কিউ-এর জন্য ৬০০ সেকেন্ড বা তার বেশি) অন্তর্ভুক্ত করে। SDK-গুলো মিলিসেকেন্ডে টাইমআউটের মান প্রত্যাশা করে।
প্রতি-অনুরোধ টাইমআউট
পাইথন
from google import genai
client = genai.Client()
try:
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents="why is the sky blue?",
config={
"service_tier": "flex",
"http_options": {"timeout": 900000}
},
)
except Exception as e:
print(f"Flex request failed: {e}")
# Example with streaming
try:
response = client.models.generate_content_stream(
model="gemini-3-flash-preview",
contents=["List 5 ideas for a sci-fi movie."],
config={
"service_tier": "flex",
"http_options": {"timeout": 60000}
}
# Per-request timeout for the streaming operation
)
for chunk in response:
print(chunk.text, end="")
except Exception as e:
print(f"An error occurred during streaming: {e}")
জাভাস্ক্রিপ্ট
import {GoogleGenAI} from '@google/genai';
const client = new GoogleGenAI({});
async function main() {
try {
const response = await client.models.generateContent({
model: "gemini-3-flash-preview",
contents: "why is the sky blue?",
config: {
serviceTier: "flex",
httpOptions: {timeout: 900000}
},
});
} catch (e) {
console.log(`Flex request failed: ${e}`);
}
// Example with streaming
try {
const response = await client.models.generateContentStream({
model: "gemini-3-flash-preview",
contents: ["List 5 ideas for a sci-fi movie."],
config: {
serviceTier: "flex",
httpOptions: {timeout: 60000}
},
});
for await (const chunk of response.stream) {
process.stdout.write(chunk.text());
}
} catch (e) {
console.log(`An error occurred during streaming: ${e}`);
}
}
await main();
যান
package main
import (
"context"
"fmt"
"log"
"time"
"google.golang.org/api/iterator"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
defer client.Close()
timeoutCtx, cancel := context.WithTimeout(ctx, 900*time.Second)
defer cancel()
_, err = client.Models.GenerateContent(
timeoutCtx,
"gemini-3-flash-preview",
genai.Text("why is the sky blue?"),
&genai.GenerateContentConfig{
ServiceTier: "flex",
},
)
if err != nil {
fmt.Printf("Flex request failed: %v\n", err)
}
// Example with streaming
streamTimeoutCtx, streamCancel := context.WithTimeout(ctx, 60*time.Second)
defer streamCancel()
iter := client.Models.GenerateContentStream(
streamTimeoutCtx,
"gemini-3-flash-preview",
genai.Text("List 5 ideas for a sci-fi movie."),
&genai.GenerateContentConfig{
ServiceTier: "flex",
},
)
for {
response, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
fmt.Printf("An error occurred during streaming: %v\n", err)
break
}
fmt.Print(response.Candidates[0].Content.Parts[0])
}
}
বিশ্রাম
REST কল করার সময়, আপনি HTTP হেডার এবং curl অপশনের সমন্বয় ব্যবহার করে টাইমআউট নিয়ন্ত্রণ করতে পারেন:
X-Server-Timeoutহেডার (সার্ভার-সাইড টাইমআউট) : এই হেডারটি জেমিনি এপিআই সার্ভারকে একটি পছন্দের টাইমআউট সময়কাল (ডিফল্ট ৬০০ সেকেন্ড) নির্ধারণ করে দেয়। সার্ভার এটি মেনে চলার চেষ্টা করবে, কিন্তু তা নিশ্চিত নয়। মানটি সেকেন্ডে হতে হবে।curlএ--max-time(ক্লায়েন্ট-সাইড টাইমআউট) : `curl --max-time <seconds>অপশনটি একটি নির্দিষ্ট সময়সীমা (সেকেন্ডে) নির্ধারণ করে দেয়, যা পর্যন্তcurlসম্পূর্ণ অপারেশনটি শেষ হওয়ার জন্য অপেক্ষা করবে। এটি একটি ক্লায়েন্ট-সাইড সুরক্ষা ব্যবস্থা।
# Set a server timeout hint of 120 seconds and a client-side curl timeout of 125 seconds.
curl --max-time 125 \
-X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: YOUR_API_KEY" \
-H "X-Server-Timeout: 120" \
-d '{
"contents": [{
"parts":[{"text": "Summarize the latest research on quantum computing."}]
}],
"service_tier": "SERVICE_TIER_FLEX"
}'
গ্লোবাল টাইমআউট
আপনি যদি চান যে একটি নির্দিষ্ট genai.Client ইনস্ট্যান্সের (শুধুমাত্র ক্লায়েন্ট লাইব্রেরির জন্য) মাধ্যমে করা সমস্ত API কলে একটি ডিফল্ট টাইমআউট থাকুক, তাহলে ক্লায়েন্ট ইনিশিয়ালাইজ করার সময় http_options এবং genai.types.HttpOptions ব্যবহার করে আপনি এটি কনফিগার করতে পারেন।
পাইথন
from google import genai
global_timeout_ms = 120000
client_with_global_timeout = genai.Client(
http_options=types.HttpOptions(timeout=global_timeout_ms)
)
try:
# Calling generate_content using global timeout...
response = client_with_global_timeout.models.generate_content(
model="gemini-3-flash-preview",
contents="Summarize the history of AI development since 2000.",
config={"service_tier": "flex"},
)
print(response.text)
# A per-request timeout will *override* the global timeout for that specific call.
shorter_timeout = 30000
response = client_with_global_timeout.models.generate_content(
model="gemini-3-flash-preview",
contents="Provide a very brief definition of machine learning.",
config={
"service_tier": "flex",
"http_options":{"timeout": shorter_timeout}
} # Overrides the global timeout
)
print(response.text)
except TimeoutError:
print(
f"A GenerateContent call timed out. Check if the global or per-request timeout was exceeded."
)
except Exception as e:
print(f"An error occurred: {e}")
জাভাস্ক্রিপ্ট
import {GoogleGenAI} from '@google/genai';
const globalTimeoutMs = 120000;
const clientWithGlobalTimeout = new GoogleGenAI({httpOptions: {timeout: globalTimeoutMs}});
async function main() {
try {
// Calling generate_content using global timeout...
const response1 = await clientWithGlobalTimeout.models.generateContent({
model: "gemini-3-flash-preview",
contents: "Summarize the history of AI development since 2000.",
config: { serviceTier: "flex" },
});
console.log(response1.text());
// A per-request timeout will *override* the global timeout for that specific call.
const shorterTimeout = 30000;
const response2 = await clientWithGlobalTimeout.models.generateContent({
model: "gemini-3-flash-preview",
contents: "Provide a very brief definition of machine learning.",
config: {
serviceTier: "flex",
httpOptions: {timeout: shorterTimeout}
} // Overrides the global timeout
});
console.log(response2.text());
} catch (e) {
if (e.name === 'TimeoutError' || e.message?.includes('timeout')) {
console.log(
"A GenerateContent call timed out. Check if the global or per-request timeout was exceeded."
);
} else {
console.log(`An error occurred: ${e}`);
}
}
}
await main();
যান
package main
import (
"context"
"fmt"
"log"
"time"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
defer client.Close()
model := client.GenerativeModel("gemini-3-flash-preview")
// Go uses context for timeouts, not client options.
// Set a default timeout for requests.
globalTimeout := 120 * time.Second
fmt.Printf("Using default timeout of %v seconds.\n", globalTimeout.Seconds())
fmt.Println("Calling generate_content (using default timeout)...")
ctx1, cancel1 := context.WithTimeout(ctx, globalTimeout)
defer cancel1()
resp1, err := model.GenerateContent(ctx1, genai.Text("Summarize the history of AI development since 2000."), &genai.GenerateContentConfig{ServiceTier: "flex"})
if err != nil {
log.Printf("Request 1 failed: %v", err)
} else {
fmt.Println("GenerateContent 1 successful.")
fmt.Println(resp1.Text())
}
// A different timeout can be used for other requests.
shorterTimeout := 30 * time.Second
fmt.Printf("\nCalling generate_content with a shorter timeout of %v seconds...\n", shorterTimeout.Seconds())
ctx2, cancel2 := context.WithTimeout(ctx, shorterTimeout)
defer cancel2()
resp2, err := model.GenerateContent(ctx2, genai.Text("Provide a very brief definition of machine learning."), &genai.GenerateContentConfig{
ServiceTier: "flex",
})
if err != nil {
log.Printf("Request 2 failed: %v", err)
} else {
fmt.Println("GenerateContent 2 successful.")
fmt.Println(resp2.Text())
}
}
পুনরায় চেষ্টা বাস্তবায়ন করুন
যেহেতু Flex শেড করা যায় এবং 503 এরর দিয়ে ব্যর্থ হয়, তাই ব্যর্থ রিকোয়েস্টগুলো চালিয়ে যাওয়ার জন্য ঐচ্ছিকভাবে রিট্রাই লজিক প্রয়োগ করার একটি উদাহরণ এখানে দেওয়া হলো:
পাইথন
import time
from google import genai
client = genai.Client()
def call_with_retry(max_retries=3, base_delay=5):
for attempt in range(max_retries):
try:
return client.models.generate_content(
model="gemini-3-flash-preview",
contents="Analyze this batch statement.",
config={"service_tier": "flex"},
)
except Exception as e:
# Check for 503 Service Unavailable or 429 Rate Limits
print(e.code)
if attempt < max_retries - 1:
delay = base_delay * (2 ** attempt) # Exponential Backoff
print(f"Flex busy, retrying in {delay}s...")
time.sleep(delay)
else:
# Fallback to standard on last strike (Optional)
print("Flex exhausted, falling back to Standard...")
return client.models.generate_content(
model="gemini-3-flash-preview",
contents="Analyze this batch statement."
)
# Usage
response = call_with_retry()
print(response.text)
জাভাস্ক্রিপ্ট
import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({});
async function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function callWithRetry(maxRetries = 3, baseDelay = 5) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
console.log(`Attempt ${attempt + 1}: Calling Flex tier...`);
const response = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: "Analyze this batch statement.",
config: { serviceTier: 'flex' },
});
return response;
} catch (e) {
if (attempt < maxRetries - 1) {
const delay = baseDelay * (2 ** attempt);
console.log(`Flex busy, retrying in ${delay}s...`);
await sleep(delay * 1000);
} else {
console.log("Flex exhausted, falling back to Standard...");
return await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: "Analyze this batch statement.",
});
}
}
}
}
async function main() {
const response = await callWithRetry();
console.log(response.text);
}
await main();
যান
package main
import (
"context"
"fmt"
"log"
"math"
"time"
"google.golang.org/genai"
)
func callWithRetry(ctx context.Context, client *genai.Client, maxRetries int, baseDelay time.Duration) (*genai.GenerateContentResponse, error) {
modelName := "gemini-3-flash-preview"
content := genai.Text("Analyze this batch statement.")
flexConfig := &genai.GenerateContentConfig{
ServiceTier: "flex",
}
for attempt := 0; attempt < maxRetries; attempt++ {
log.Printf("Attempt %d: Calling Flex tier...", attempt+1)
resp, err := client.Models.GenerateContent(ctx, modelName, content, flexConfig)
if err == nil {
return resp, nil
}
log.Printf("Attempt %d failed: %v", attempt+1, err)
if attempt < maxRetries-1 {
delay := time.Duration(float64(baseDelay) * math.Pow(2, float64(attempt)))
log.Printf("Flex busy, retrying in %v...", delay)
time.Sleep(delay)
} else {
log.Println("Flex exhausted, falling back to Standard...")
return client.Models.GenerateContent(ctx, modelName, content)
}
}
return nil, fmt.Errorf("retries exhausted") // Should not be reached
}
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
defer client.Close()
resp, err := callWithRetry(ctx, client, 3, 5*time.Second)
if err != nil {
log.Fatalf("Failed after retries: %v", err)
}
fmt.Println(resp.Text())
}
মূল্য নির্ধারণ
ফ্লেক্স ইনফারেন্সের মূল্য স্ট্যান্ডার্ড এপিআই- এর ৫০% এবং এটি টোকেন প্রতি বিল করা হয়।
সমর্থিত মডেল
নিম্নলিখিত মডেলগুলি Flex ইনফারেন্স সমর্থন করে:
| মডেল | ফ্লেক্স ইনফারেন্স |
|---|---|
| জেমিনি ৩.১ ফ্ল্যাশ-লাইট প্রিভিউ | ✔️ |
| জেমিনি ৩.১ প্রো প্রিভিউ | ✔️ |
| জেমিনি ৩ ফ্ল্যাশ প্রিভিউ | ✔️ |
| জেমিনি ৩ প্রো ছবির প্রিভিউ | ✔️ |
| জেমিনি ২.৫ প্রো | ✔️ |
| জেমিনি ২.৫ ফ্ল্যাশ | ✔️ |
| জেমিনি ২.৫ ফ্ল্যাশ ইমেজ | ✔️ |
| জেমিনি ২.৫ ফ্ল্যাশ-লাইট | ✔️ |
এরপর কী?
জেমিনির অন্যান্য ইনফারেন্স এবং অপটিমাইজেশন অপশনগুলো সম্পর্কে পড়ুন:
- অত্যন্ত কম লেটেন্সির জন্য প্রায়োরিটি ইনফারেন্স ।
- ২৪ ঘন্টার মধ্যে অ্যাসিঙ্ক্রোনাস প্রক্রিয়াকরণের জন্য ব্যাচ এপিআই ।
- ইনপুট টোকেনের খরচ কমাতে কনটেক্সট ক্যাশিং ।