জেমিনি লাইভ এপিআই, gemini-3.5-live-translate-preview মডেল ব্যবহার করে ৭০টিরও বেশি ভাষার মধ্যে স্বল্প-বিলম্বের (low-latency) রিয়েল-টাইম স্পিচ-টু-স্পিচ অনুবাদ সমর্থন করে। অনুবাদ সেটিংস দিয়ে লাইভ এপিআই কনফিগার করার মাধ্যমে, আপনি একটি ভাষায় অডিও স্ট্রিম করে অন্য ভাষায় অনূদিত অডিও আউটপুট পেতে পারেন, যা নির্বিঘ্ন রিয়েল-টাইম ভয়েস-টু-ভয়েস অনুবাদ সক্ষম করে।
লাইভ এজেন্ট বনাম লাইভ অনুবাদ
যদিও উভয়ই লাইভ এপিআই ব্যবহার করে, লাইভ ট্রান্সলেশনের মানসিক মডেলটি কথোপকথনমূলক রিয়েল-টাইম এজেন্ট ইন্টারঅ্যাকশন থেকে ভিন্ন।
| লাইভ এজেন্ট | সরাসরি অনুবাদ |
|---|---|
| মডেলটি একজন সহকারী হিসেবে কাজ করে। এটি শোনে, যুক্তি দিয়ে বিচার করে এবং আপনার পক্ষ থেকে পদক্ষেপ নেয়। | মডেলটি একজন দোভাষী হিসেবে কাজ করে। এটি একটি রিয়েল-টাইম অনুবাদ পাইপলাইন হিসেবে আচরণ করে। |
| পালাভিত্তিক মিথস্ক্রিয়া ব্যবহার করে। এটি বিরতি, অভিপ্রায় শনাক্তকরণ এবং বাধা সামলানোর ওপর নির্ভর করে। | নিরবচ্ছিন্ন প্রবাহ প্রক্রিয়াকরণ ব্যবহার করে। বক্তা কথা বলার সাথে সাথেই অনুবাদ করে, পালা আসার জন্য অপেক্ষা করে না। |
| টুল এবং এজেন্ট সমর্থন করে। ফাংশন কলিং, গুগল সার্চ এবং নির্দেশাবলীর জন্য নেটিভ সমর্থন রয়েছে। | শুধুমাত্র অনুবাদ সমর্থন করে। বিশুদ্ধ স্বল্প-বিলম্বের অনুবাদ; কোনো টুল বা নির্দেশাবলীর সমর্থন নেই। |
| সম্পূর্ণ মাল্টিমোডাল। টেক্সট, অডিও, ভিডিও এবং ইমেজ ইনপুট সমর্থন করে। | অডিও সীমাবদ্ধ। কঠোর রিয়েল-টাইম ল্যাটেন্সি থ্রেশহোল্ড নিশ্চিত করতে ইনপুট শুধুমাত্র অডিওতে সীমাবদ্ধ। |
| সূক্ষ্ম বিন্যাস। এটি উৎপাদন, বক্তৃতা, সরঞ্জাম এবং সিস্টেম নির্দেশাবলী ব্যবহার করে। | সরলীকৃত কনফিগারেশন। target_language_code সেট করুন এবং echo_target_language মতো টগলগুলো ব্যবহার করুন। |
শুরু করুন
নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কীভাবে একটি ক্লায়েন্ট ইনিশিয়ালাইজ করতে হয় এবং একটি অনুবাদ কনফিগারেশন সহ লাইভ এপিআই-এর সাথে সংযোগ স্থাপন করতে হয়।
পাইথন
import asyncio
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-3.5-live-translate-preview"
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
input_audio_transcription=types.AudioTranscriptionConfig(),
output_audio_transcription=types.AudioTranscriptionConfig(),
translation_config=types.TranslationConfig(
target_language_code="pl",
echo_target_language=True
)
)
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
print("Session started with translation")
# Start receiving the translated audio stream
async for response in session.receive():
if response.server_content:
if response.server_content.input_transcription:
print(f"Input transcript: {response.server_content.input_transcription.text}")
if response.server_content.output_transcription:
print(f"Output transcript: {response.server_content.output_transcription.text}")
if response.server_content.model_turn:
for part in response.server_content.model_turn.parts:
if part.inline_data:
audio_data = part.inline_data.data
# Play or process the translated audio chunk
print(f"Received audio chunk ({len(audio_data)} bytes)")
if __name__ == "__main__":
asyncio.run(main())
জাভাস্ক্রিপ্ট
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({});
const model = 'gemini-3.5-live-translate-preview';
const config = {
responseModalities: [Modality.AUDIO],
inputAudioTranscription: {},
outputAudioTranscription: {},
translationConfig: {
targetLanguageCode: 'pl',
echoTargetLanguage: true
}
};
async function main() {
const session = await ai.live.connect({
model: model,
config: config,
callbacks: {
onopen: () => console.debug('Opened'),
onmessage: (message) => {
const content = message.serverContent;
if (content?.inputTranscription) {
console.log('Input transcript:', content.inputTranscription.text);
}
if (content?.outputTranscription) {
console.log('Output transcript:', content.outputTranscription.text);
}
if (content?.modelTurn?.parts) {
for (const part of content.modelTurn.parts) {
if (part.inlineData) {
const audioData = part.inlineData.data;
// Play or process the translated audio chunk (base64 encoded)
console.debug(`Received audio chunk (${audioData.length} bytes)`);
}
}
}
},
onerror: (e) => console.debug('Error:', e.message),
onclose: (e) => console.debug('Close:', e.reason),
},
});
console.debug("Session started with translation");
}
main();
ওয়েবসকেটস
const API_KEY = "YOUR_API_KEY";
const MODEL_NAME = "gemini-3.5-live-translate-preview";
const WS_URL = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${API_KEY}`;
const websocket = new WebSocket(WS_URL);
websocket.onopen = () => {
console.log('WebSocket Connected');
const setupMessage = {
setup: {
model: `models/${MODEL_NAME}`,
generationConfig: {
responseModalities: ['AUDIO'],
inputAudioTranscription: {},
outputAudioTranscription: {},
translationConfig: {
targetLanguageCode: 'pl',
echoTargetLanguage: true
}
}
}
};
websocket.send(JSON.stringify(setupMessage));
};
websocket.onmessage = (event) => {
const response = JSON.parse(event.data);
if (response.serverContent) {
const content = response.serverContent;
if (content.inputTranscription) {
console.log('Input transcript:', content.inputTranscription.text, `(${content.inputTranscription.languageCode})`);
}
if (content.outputTranscription) {
console.log('Output transcript:', content.outputTranscription.text, `(${content.outputTranscription.languageCode})`);
}
if (content.modelTurn?.parts) {
for (const part of content.modelTurn.parts) {
if (part.inlineData) {
const audioData = part.inlineData.data;
// Play or process the translated audio chunk (base64 encoded)
console.debug(`Received audio chunk (${audioData.length} bytes)`);
}
}
}
}
};
অডিও পাঠানো হচ্ছে
অনুবাদের জন্য ভয়েস ইনপুট স্ট্রিম করতে, আপনাকে র, লিটল-এন্ডিয়ান, ১৬-বিট পিসিএম অডিও পাঠাতে হবে।
- ইনপুট অডিও ফরম্যাট : র 16-বিট PCM, 16kHz-এ (মনো, লিটল-এন্ডিয়ান)।
- আউটপুট অডিও ফরম্যাট : ২৪ কিলোহার্টজে র ১৬-বিট পিসিএম (মোনো, লিটল-এন্ডিয়ান)।
- অডিওর খণ্ডের আকার ও বিলম্ব : অডিও ১০০ মিলিসেকেন্ডের খণ্ডে পাঠান।
নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কীভাবে সেশনে অডিও খণ্ড পাঠাতে হয়।
পাইথন
# Assuming 'chunk' is your raw PCM audio bytes
await session.send_realtime_input(
audio=types.Blob(
data=chunk,
mime_type="audio/pcm;rate=16000"
)
)
জাভাস্ক্রিপ্ট
// Assuming 'chunk' is a Buffer of raw PCM audio
session.sendRealtimeInput({
audio: {
data: chunk.toString('base64'),
mimeType: 'audio/pcm;rate=16000'
}
});
ওয়েবসকেটস
// Assuming 'chunk' is a Buffer of raw PCM audio
function sendAudioChunk(chunk) {
if (websocket.readyState === WebSocket.OPEN) {
const audioMessage = {
realtimeInput: {
audio: {
data: chunk.toString('base64'),
mimeType: 'audio/pcm;rate=16000'
}
}
};
websocket.send(JSON.stringify(audioMessage));
}
}
কনফিগারেশন
অনুবাদ সক্রিয় করতে, সেশন সেটআপের সময় আপনাকে অবশ্যই generationConfig এর মধ্যে translationConfig নির্দিষ্ট করতে হবে।
বার্তা কনফিগারেশন সেটআপ করুন
ট্রান্সক্রিপ্ট সক্রিয় করার জন্য generationConfig নিম্নলিখিত ফিল্ডগুলো সমর্থন করে:
-
inputAudioTranscription: এমন একটি অবজেক্ট, যা উপস্থিত থাকলে মডেল ইনপুট অডিওর টেক্সট ট্রান্সক্রিপ্ট পাঠাতে পারে। -
outputAudioTranscription: এমন একটি অবজেক্ট, যা উপস্থিত থাকলে মডেল আউটপুট (অনূদিত) অডিওর টেক্সট ট্রান্সক্রিপ্ট পাঠাতে পারে।
translationConfig নিম্নলিখিত ক্ষেত্রগুলিকে সমর্থন করে:
-
targetLanguageCode: যে ভাষায় আপনি মডেলটি অনুবাদ করতে চান, সেই ভাষার BCP-47 ল্যাঙ্গুয়েজ কোড (যেমন, পোলিশের জন্য"pl", স্প্যানিশের জন্য"es")। ডিফল্ট হিসেবে"en"ব্যবহৃত হয়। -
echoTargetLanguage: একটি বুলিয়ান যা নির্দেশ করে যে টার্গেট ভাষায় থাকা ইনপুট অডিও কীভাবে পরিচালনা করা হবে। যদি এটি 'trueসেট করা হয়, তাহলে মডেলটি টার্গেট ভাষায় থাকা ইনপুট অডিও প্রতিধ্বনি (পুনরাবৃত্তি) করবে। যদি এটিfalseসেট করা হয়, তাহলে ইনপুট স্পিচ টার্গেট ভাষায় থাকলে মডেলটি নীরব থাকবে। ডিফল্ট মান 'false।
সেটআপ বার্তার কাঠামোর একটি উদাহরণ নিচে দেওয়া হলো:
"setup": {
"model": "models/gemini-3.5-live-translate-preview",
"generationConfig": {
"responseModalities": [
"AUDIO"
],
"inputAudioTranscription": {},
"outputAudioTranscription": {},
"translationConfig": {
"targetLanguageCode": "pl",
"echoTargetLanguage": true
}
}
}
ক্লায়েন্ট-সাইড অ্যাপ্লিকেশনগুলির জন্য ক্ষণস্থায়ী টোকেন
ক্লায়েন্ট-টু-সার্ভার অ্যাপ্লিকেশনগুলির জন্য, আপনি আপনার এপিআই কী প্রকাশ হওয়া এড়াতে ক্ষণস্থায়ী টোকেন (বর্তমানে v1alpha সংস্করণে) ব্যবহার করতে পারেন।
লাইভ ট্রান্সলেশনের সাথে ক্ষণস্থায়ী টোকেন ব্যবহার করার সময়:
- আপনাকে অবশ্যই
v1alphaএন্ডপয়েন্টটি ব্যবহার করতে হবে। - কনফিগারেশন লক করা: ডিফল্টরূপে, আপনার সার্ভারে টোকেন তৈরির সীমাবদ্ধতাগুলিতে
translationConfigউল্লেখ করা উচিত। এটি নিশ্চিত করে যে অনুবাদ কনফিগারেশনটি লক করা আছে এবং ক্লায়েন্ট দ্বারা এতে কোনো পরিবর্তন করা যাবে না। - কনফিগারেশন আনলক করা: আপনি যদি ক্লায়েন্ট-সাইডে
translationConfigসেট করতে চান (উদাহরণস্বরূপ, একজন ব্যবহারকারীকে তার নিজের টার্গেট ভাষা বেছে নিতে দেওয়ার জন্য), তাহলে আপনাকে অবশ্যই টোকেন তৈরির অনুরোধ থেকে এটি বাদ দিতে হবে এবং এর পরিবর্তে"lock_additional_fields": []সেট করতে হবে। এটি ক্লায়েন্ট-সাইডেtranslationConfigসেট করার সুবিধাটি আনলক করে দেবে।
একটি সীমাবদ্ধ ক্ষণস্থায়ী টোকেন তৈরি করা
নিম্নলিখিত উদাহরণগুলিতে অনুবাদ সীমাবদ্ধতা সহ একটি ক্ষণস্থায়ী টোকেন কীভাবে তৈরি করতে হয় তা দেখানো হয়েছে।
পাইথন
import datetime
from google import genai
now = datetime.datetime.now(tz=datetime.timezone.utc)
client = genai.Client(
http_options={'api_version': 'v1alpha'}
)
token = client.auth_tokens.create(
config = {
'uses': 1,
'expire_time': now + datetime.timedelta(minutes=30),
'live_connect_constraints': {
'model': 'gemini-3.5-live-translate-preview',
'config': {
'translation_config': {
'target_language_code': 'pl',
'echo_target_language': True
}
}
},
'http_options': {'api_version': 'v1alpha'},
}
)
জাভাস্ক্রিপ্ট
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const expireTime = new Date(Date.now() + 30 * 60 * 1000).toISOString();
const token = await client.authTokens.create({
config: {
uses: 1,
expireTime: expireTime,
liveConnectConstraints: {
model: 'gemini-3.5-live-translate-preview',
config: {
responseModalities: ['AUDIO'],
inputAudioTranscription: {},
outputAudioTranscription: {},
translationConfig: {
targetLanguageCode: 'pl',
echoTargetLanguage: true
}
}
},
httpOptions: {
apiVersion: 'v1alpha'
}
},
});
সীমাবদ্ধতা
- ইনপুট পদ্ধতি : অনুবাদের জন্য শুধুমাত্র অডিও ইনপুট সমর্থিত। টেক্সট ইনপুট সমর্থিত নয়।
- কণ্ঠস্বর অনুকরণ : কণ্ঠস্বর অনুকরণ অসামঞ্জস্যপূর্ণ হতে পারে। দীর্ঘ বিরতির পর কণ্ঠস্বর বদলে যেতে পারে, কথা বলার শুরুর ধরনের ওপর ভিত্তি করে ভুল লিঙ্গ নির্ধারণ করতে পারে, অথবা দ্রুত একাধিক বক্তার কথোপকথনের সময় একটি নির্দিষ্ট কণ্ঠস্বরে আটকে যেতে পারে।
- ভাষা শনাক্তকরণ : তীব্র উচ্চারণভঙ্গি, প্রায় একই রকম ভাষা (যেমন, স্প্যানিশ বনাম পর্তুগিজ), বা দ্রুত ভাষা পরিবর্তনের ক্ষেত্রে ভাষা শনাক্তকরণে সমস্যা হয়। দ্রষ্টব্য: এটি শুধুমাত্র ইনপুট ট্রান্সক্রিপ্টকে প্রভাবিত করবে। ভাষার কোড এবং চূড়ান্ত অনুবাদ নির্ভুল থাকবে।
- পারিপার্শ্বিক অডিও : মডেলটি কোলাহল এবং সঙ্গীত ফিল্টার করে পরিষ্কার কথা বলার জন্য ডিজাইন করা হয়েছে, কিন্তু সব পারিপার্শ্বিক অডিও উপেক্ষা করা সম্ভব নাও হতে পারে।
- লক্ষ্য ভাষা প্রতিধ্বনি : যখন
echoTargetLanguage: true, তখন ইনপুট অডিও আগে থেকেই লক্ষ্য ভাষায় থাকলে পটভূমির কোলাহল বা সঙ্গীত অনূদিত অডিওতে ত্রুটি সৃষ্টি করতে পারে।
সমর্থিত ভাষা
লাইভ অনুবাদের জন্য নিম্নলিখিত ভাষাগুলো সমর্থিত।
| ভাষা | বিসিপি-৪৭ কোড | ভাষা | বিসিপি-৪৭ কোড |
|---|---|---|---|
| আফ্রিকান | আফ | কাজাখ | কেকে |
| আকান | একে | খেমার | কিমি |
| আলবেনিয়ান | বর্গ | কিনিয়ারওয়ান্ডা | আরডব্লিউ |
| আমহারিক | সকাল | কোরিয়ান | কো |
| আরবি | আর | লাও | লো |
| আর্মেনীয় | হাই | লাতভিয়ান | এলভি |
| আজারবাইজানীয় | আজ | লিথুয়ানিয়ান | এলটি |
| বাস্ক | ইউরোপীয় ইউনিয়ন | ম্যাসিডোনিয়ান | এমকে |
| বেলারুশীয় | হতে | মালয় | এমএস |
| বাংলা | বিএন | মালয়ালম | এমএল |
| বুলগেরীয় | বিজি | মারাঠি | মিঃ |
| বর্মী (মায়ানমার) | আমার | মঙ্গোলীয় | এমএন |
| কাতালান | ca | নেপালি | নে |
| চীনা (সরলীকৃত) | zh-Hans | নরওয়েজিয়ান | না, এনবি |
| চীনা (ঐতিহ্যবাহী) | zh-Hant | ফার্সি | ফা |
| ক্রোয়েশীয় | এইচআর | পোলিশ | পিএল |
| চেক | সিএস | পর্তুগিজ (ব্রাজিল) | পিটি-বিআর |
| ড্যানিশ | দা | পর্তুগিজ (পর্তুগাল) | পিটি-পিটি |
| ডাচ | এনএল | পাঞ্জাবি | পা |
| ইংরেজি | ইংরেজি | রোমানিয়ান | রো |
| এস্তোনিয়ান | এবং | রাশিয়ান | রু |
| ফিলিপিনো | ফিল | সার্বিয়ান | এসআর |
| ফিনিশ | ফি | সিন্ধি | এসডি |
| ফরাসি | ফ্র | সিংহলী | সি |
| গ্যালিসিয়ান | জিএল | স্লোভাক | এসকে |
| জর্জিয়ান | কা | স্লোভেনীয় | এসএল |
| জার্মান | ডি | স্প্যানিশ | ইএস |
| গ্রীক | এল | সুন্দানিজ | সু |
| গুজরাটি | গু | সোয়াহিলি | এসডব্লিউ |
| হাউসা | হা | সুইডিশ | এসভি |
| হিব্রু | সে | তামিল | তা |
| হিন্দি | হাই | তেলুগু | তে |
| হাঙ্গেরীয় | হু | থাই | তম |
| আইসল্যান্ডীয় | হয় | তুর্কি | ট্র |
| ইন্দোনেশিয়ান | আইডি | ইউক্রেনীয় | যুক্তরাজ্য |
| ইতালীয় | এটা | উর্দু | উর |
| জাপানি | জা | উজবেক | উজ |
| জাভানিজ | jv | ভিয়েতনামী | vi |
| কন্নড় | কেএন | জুলু | জু |
এরপর কী?
- সম্পূর্ণ লাইভ এপিআই সক্ষমতা নির্দেশিকাটি পড়ুন।
- এসডিকে দিয়ে শুরু করার নির্দেশিকাটি পড়ুন।
- WebSockets দিয়ে শুরু করার নির্দেশিকাটি পড়ুন।
- ক্লায়েন্ট-টু-সার্ভার অ্যাপ্লিকেশনগুলিতে নিরাপদ প্রমাণীকরণের জন্য ক্ষণস্থায়ী টোকেন নির্দেশিকাটি পড়ুন।
- গিটহাব থেকে লাইভ এপিআই উদাহরণগুলো ক্লোন করুন।