জেমিনি লাইভ এপিআই জেমিনি মডেলগুলির সাথে রিয়েল-টাইম, দ্বিমুখী ইন্টারঅ্যাকশনের সুযোগ দেয় এবং এটি অডিও, ভিডিও, ও টেক্সট ইনপুট এবং নেটিভ অডিও আউটপুট সমর্থন করে। এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে আপনার সার্ভারে গুগল জেনএআই এসডিকে ব্যবহার করে এপিআই-এর সাথে ইন্টিগ্রেট করতে হয়।
সংক্ষিপ্ত বিবরণ
জেমিনি লাইভ এপিআই রিয়েল-টাইম যোগাযোগের জন্য ওয়েবসকেট ব্যবহার করে। google-genai এসডিকে এই সংযোগগুলি পরিচালনার জন্য একটি উচ্চ-স্তরের অ্যাসিঙ্ক্রোনাস ইন্টারফেস প্রদান করে।
মূল ধারণা:
- সেশন : মডেলের সাথে একটি স্থায়ী সংযোগ।
- কনফিগারেশন : মোডালিটি (অডিও/টেক্সট), ভয়েস এবং সিস্টেম নির্দেশাবলী সেট আপ করা।
- রিয়েল-টাইম ইনপুট : অডিও এবং ভিডিও ফ্রেমগুলোকে ব্লব হিসেবে পাঠানো।
লাইভ এপিআই-এর সাথে সংযোগ স্থাপন করা হচ্ছে
একটি এপিআই কী ব্যবহার করে লাইভ এপিআই সেশন শুরু করুন:
পাইথন
import asyncio
from google import genai
client = genai.Client(api_key="YOUR_API_KEY")
model = "gemini-3.1-flash-live-preview"
config = {"response_modalities": ["AUDIO"]}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
print("Session started")
# Send content...
if __name__ == "__main__":
asyncio.run(main())
জাভাস্ক্রিপ্ট
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({ apiKey: "YOUR_API_KEY"});
const model = 'gemini-3.1-flash-live-preview';
const config = { responseModalities: [Modality.AUDIO] };
async function main() {
const session = await ai.live.connect({
model: model,
callbacks: {
onopen: function () {
console.debug('Opened');
},
onmessage: function (message) {
console.debug(message);
},
onerror: function (e) {
console.debug('Error:', e.message);
},
onclose: function (e) {
console.debug('Close:', e.reason);
},
},
config: config,
});
console.debug("Session started");
// Send content...
session.close();
}
main();
টেক্সট পাঠানো
send_realtime_input (Python) বা sendRealtimeInput (JavaScript) ব্যবহার করে টেক্সট পাঠানো যায়।
পাইথন
await session.send_realtime_input(text="Hello, how are you?")
জাভাস্ক্রিপ্ট
session.sendRealtimeInput({
text: 'Hello, how are you?'
});
অডিও পাঠানো হচ্ছে
অডিও র PCM ডেটা হিসেবে পাঠাতে হবে (র ১৬-বিট PCM অডিও, ১৬kHz, লিটল-এন্ডিয়ান)।
পাইথন
# 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'
}
});
ক্লায়েন্ট ডিভাইস (যেমন ব্রাউজার) থেকে কীভাবে অডিও পেতে হয় তার একটি উদাহরণের জন্য গিটহাবে থাকা এন্ড-টু-এন্ড উদাহরণটি দেখুন।
ভিডিও পাঠানো
ভিডিও ফ্রেমগুলো একটি নির্দিষ্ট ফ্রেম রেটে (প্রতি সেকেন্ডে সর্বোচ্চ ১ ফ্রেম) স্বতন্ত্র ছবি (যেমন, JPEG বা PNG) হিসেবে পাঠানো হয়।
পাইথন
# Assuming 'frame' is your JPEG-encoded image bytes
await session.send_realtime_input(
video=types.Blob(
data=frame,
mime_type="image/jpeg"
)
)
জাভাস্ক্রিপ্ট
// Assuming 'frame' is a Buffer of JPEG-encoded image data
session.sendRealtimeInput({
video: {
data: frame.toString('base64'),
mimeType: 'image/jpeg'
}
});
ক্লায়েন্ট ডিভাইস (যেমন ব্রাউজার) থেকে কীভাবে ভিডিও পাওয়া যায় তার একটি উদাহরণের জন্য গিটহাবে থাকা এন্ড-টু-এন্ড উদাহরণটি দেখুন।
অডিও গ্রহণ করা
মডেলের অডিও প্রতিক্রিয়াগুলো ডেটার খণ্ড হিসেবে গ্রহণ করা হয়।
পাইথন
async for response in session.receive():
if response.server_content and response.server_content.model_turn:
for part in response.server_content.model_turn.parts:
if part.inline_data:
audio_data = part.inline_data.data
# Process or play the audio data
জাভাস্ক্রিপ্ট
// Inside the onmessage callback
const content = response.serverContent;
if (content?.modelTurn?.parts) {
for (const part of content.modelTurn.parts) {
if (part.inlineData) {
const audioData = part.inlineData.data;
// Process or play audioData (base64 encoded string)
}
}
}
আপনার সার্ভারে কীভাবে অডিও গ্রহণ করে ব্রাউজারে তা প্লে করতে হয় , তা শিখতে গিটহাবে থাকা উদাহরণ অ্যাপটি দেখুন।
টেক্সট গ্রহণ করা
ব্যবহারকারীর ইনপুট এবং মডেল আউটপুট উভয়ের প্রতিলিপি সার্ভার কন্টেন্টে পাওয়া যায়।
পাইথন
async for response in session.receive():
content = response.server_content
if content:
if content.input_transcription:
print(f"User: {content.input_transcription.text}")
if content.output_transcription:
print(f"Gemini: {content.output_transcription.text}")
জাভাস্ক্রিপ্ট
// Inside the onmessage callback
const content = response.serverContent;
if (content?.inputTranscription) {
console.log('User:', content.inputTranscription.text);
}
if (content?.outputTranscription) {
console.log('Gemini:', content.outputTranscription.text);
}
টুল কল পরিচালনা করা
এপিআই টুল কলিং (ফাংশন কলিং) সমর্থন করে। যখন মডেল কোনো টুল কলের অনুরোধ করে, তখন আপনাকে অবশ্যই ফাংশনটি এক্সিকিউট করে রেসপন্সটি ফেরত পাঠাতে হবে।
পাইথন
async for response in session.receive():
if response.tool_call:
function_responses = []
for fc in response.tool_call.function_calls:
# 1. Execute the function locally
result = my_tool_function(**fc.args)
# 2. Prepare the response
function_responses.append(types.FunctionResponse(
name=fc.name,
id=fc.id,
response={"result": result}
))
# 3. Send the tool response back to the session
await session.send_tool_response(function_responses=function_responses)
জাভাস্ক্রিপ্ট
// Inside the onmessage callback
if (response.toolCall) {
const functionResponses = [];
for (const fc of response.toolCall.functionCalls) {
const result = myToolFunction(fc.args);
functionResponses.push({
name: fc.name,
id: fc.id,
response: { result }
});
}
session.sendToolResponse({ functionResponses });
}
এরপর কী?
- ভয়েস অ্যাক্টিভিটি ডিটেকশন এবং নেটিভ অডিও ফিচারসহ মূল কার্যকারিতা ও কনফিগারেশন জানতে সম্পূর্ণ লাইভ এপিআই ক্যাপাবিলিটিজ গাইডটি পড়ুন।
- টুল এবং ফাংশন কলিংয়ের সাথে লাইভ এপিআই কীভাবে ইন্টিগ্রেট করতে হয় তা জানতে টুল ব্যবহারের নির্দেশিকাটি পড়ুন।
- দীর্ঘক্ষণ ধরে চলা কথোপকথন পরিচালনা করার জন্য সেশন ম্যানেজমেন্ট গাইডটি পড়ুন।
- ক্লায়েন্ট-টু-সার্ভার অ্যাপ্লিকেশনগুলিতে নিরাপদ প্রমাণীকরণের জন্য ক্ষণস্থায়ী টোকেন নির্দেশিকাটি পড়ুন।
- অন্তর্নিহিত ওয়েবসকেটস এপিআই সম্পর্কে আরও তথ্যের জন্য, ওয়েবসকেটস এপিআই রেফারেন্স দেখুন।