লাইভ এপিআই মিথুনের সাথে কম লেটেন্সি দ্বিমুখী ভয়েস এবং ভিডিও ইন্টারঅ্যাকশন সক্ষম করে। লাইভ API ব্যবহার করে, আপনি শেষ ব্যবহারকারীদের প্রাকৃতিক, মানুষের মতো ভয়েস কথোপকথনের অভিজ্ঞতা এবং ভয়েস কমান্ড ব্যবহার করে মডেলের প্রতিক্রিয়াগুলিকে বাধা দেওয়ার ক্ষমতা প্রদান করতে পারেন। মডেলটি পাঠ্য, অডিও এবং ভিডিও ইনপুট প্রক্রিয়া করতে পারে এবং এটি পাঠ্য এবং অডিও আউটপুট সরবরাহ করতে পারে।
আপনি Google AI স্টুডিওতে লাইভ API ব্যবহার করে দেখতে পারেন।
নতুন কি
লাইভ এপিআই-তে সর্বশেষ নতুন বৈশিষ্ট্য এবং ক্ষমতার জন্য চেঞ্জলগ দেখুন!
লাইভ এপিআই ব্যবহার করুন
এই বিভাগটি বর্ণনা করে যে কীভাবে আমাদের SDK-এর সাথে লাইভ API ব্যবহার করতে হয়। অন্তর্নিহিত WebSockets API সম্পর্কে আরও তথ্যের জন্য, WebSockets API রেফারেন্স দেখুন।
সমস্ত বৈশিষ্ট্য ব্যবহার করতে, সর্বশেষ SDK সংস্করণ ইনস্টল করতে ভুলবেন না, যেমন, pip install -U google-genai
।
পাঠান এবং টেক্সট গ্রহণ
import asyncio
from google import genai
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
config = {"response_modalities": ["TEXT"]}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
while True:
message = input("User> ")
if message.lower() == "exit":
break
await session.send_client_content(
turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
)
async for response in session.receive():
if response.text is not None:
print(response.text, end="")
if __name__ == "__main__":
asyncio.run(main())
অডিও গ্রহণ
নিচের উদাহরণটি দেখায় কিভাবে অডিও ডেটা গ্রহণ করতে হয় এবং এটি একটি .wav
ফাইলে লিখতে হয়।
import asyncio
import wave
from google import genai
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
config = {"response_modalities": ["AUDIO"]}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
wf = wave.open("audio.wav", "wb")
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(24000)
message = "Hello? Gemini are you there?"
await session.send_client_content(
turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
)
async for idx,response in async_enumerate(session.receive()):
if response.data is not None:
wf.writeframes(response.data)
# Un-comment this code to print audio data info
# if response.server_content.model_turn is not None:
# print(response.server_content.model_turn.parts[0].inline_data.mime_type)
wf.close()
if __name__ == "__main__":
asyncio.run(main())
অডিও ফরম্যাট
লাইভ API-এ অডিও ডেটা সবসময় কাঁচা, সামান্য-এন্ডিয়ান, 16-বিট পিসিএম। অডিও আউটপুট সর্বদা 24kHz নমুনা হার ব্যবহার করে। ইনপুট অডিও নেটিভভাবে 16kHz, কিন্তু প্রয়োজন হলে লাইভ API পুনরায় নমুনা তৈরি করবে যাতে যেকোন নমুনা হার পাঠানো যায়। ইনপুট অডিওর নমুনা হার জানাতে, প্রতিটি অডিও-ধারণকারী ব্লবের MIME প্রকারকে audio/pcm;rate=16000
এর মতো একটি মান সেট করুন।
অডিও এবং ভিডিও স্ট্রিম করুন
সিস্টেম নির্দেশাবলী
সিস্টেম নির্দেশাবলী আপনাকে আপনার নির্দিষ্ট প্রয়োজন এবং ব্যবহারের ক্ষেত্রের উপর ভিত্তি করে একটি মডেলের আচরণ পরিচালনা করতে দেয়। সিস্টেম নির্দেশাবলী সেটআপ কনফিগারেশনে সেট করা যেতে পারে এবং পুরো সেশনের জন্য কার্যকর থাকবে।
from google.genai import types
config = {
"system_instruction": types.Content(
parts=[
types.Part(
text="You are a helpful assistant and answer in a friendly tone."
)
]
),
"response_modalities": ["TEXT"],
}
ইনক্রিমেন্টাল কন্টেন্ট আপডেট
টেক্সট ইনপুট পাঠাতে, সেশন প্রসঙ্গ স্থাপন বা সেশন প্রসঙ্গ পুনরুদ্ধার করতে ক্রমবর্ধমান আপডেট ব্যবহার করুন। সংক্ষিপ্ত প্রসঙ্গের জন্য আপনি ঘটনার সঠিক ক্রম উপস্থাপন করতে পালাক্রমে মিথস্ক্রিয়া পাঠাতে পারেন:
turns = [
{"role": "user", "parts": [{"text": "What is the capital of France?"}]},
{"role": "model", "parts": [{"text": "Paris"}]},
]
await session.send_client_content(turns=turns, turn_complete=False)
turns = [{"role": "user", "parts": [{"text": "What is the capital of Germany?"}]}]
await session.send_client_content(turns=turns, turn_complete=True)
{
"clientContent": {
"turns": [
{
"parts":[
{
"text": ""
}
],
"role":"user"
},
{
"parts":[
{
"text": ""
}
],
"role":"model"
}
],
"turnComplete": true
}
}
দীর্ঘ প্রসঙ্গগুলির জন্য পরবর্তী মিথস্ক্রিয়াগুলির জন্য প্রসঙ্গ উইন্ডোটি মুক্ত করতে একটি একক বার্তা সারাংশ প্রদান করার পরামর্শ দেওয়া হয়।
কণ্ঠস্বর পরিবর্তন করুন
লাইভ এপিআই নিম্নলিখিত ভয়েসগুলিকে সমর্থন করে: পাক, চ্যারন, কোর, ফেনরির, এওডি, লেডা, ওরাস এবং জেফির।
একটি ভয়েস নির্দিষ্ট করতে, সেশন কনফিগারেশনের অংশ হিসাবে speechConfig
অবজেক্টের মধ্যে ভয়েস নাম সেট করুন:
from google.genai import types
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(voice_name="Kore")
)
)
)
{
"voiceConfig": {
"prebuiltVoiceConfig": {
"voiceName": "Kore"
}
}
}
ভাষা পরিবর্তন করুন
লাইভ API একাধিক ভাষা সমর্থন করে।
ভাষা পরিবর্তন করতে, সেশন কনফিগারেশনের অংশ হিসাবে speechConfig
অবজেক্টের মধ্যে ভাষা কোড সেট করুন:
from google.genai import types
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
language_code="de-DE",
)
)
সরঞ্জাম ব্যবহার করুন
আপনি লাইভ API এর সাথে ফাংশন কলিং , কোড এক্সিকিউশন এবং Google অনুসন্ধানের মতো সরঞ্জামগুলি সংজ্ঞায়িত করতে পারেন।
ফাংশন কলিং ব্যবহার করুন
আপনি সেশন কনফিগারেশনের অংশ হিসাবে ফাংশন ঘোষণা সংজ্ঞায়িত করতে পারেন। আরও জানতে ফাংশন কলিং টিউটোরিয়াল দেখুন।
টুল কল পাওয়ার পর, ক্লায়েন্টকে session.send_tool_response
পদ্ধতি ব্যবহার করে FunctionResponse
অবজেক্টের একটি তালিকা দিয়ে সাড়া দেওয়া উচিত।
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
# Simple function definitions
turn_on_the_lights = {"name": "turn_on_the_lights"}
turn_off_the_lights = {"name": "turn_off_the_lights"}
tools = [{"function_declarations": [turn_on_the_lights, turn_off_the_lights]}]
config = {"response_modalities": ["TEXT"], "tools": tools}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
prompt = "Turn on the lights please"
await session.send_client_content(turns={"parts": [{"text": prompt}]})
async for chunk in session.receive():
if chunk.server_content:
if chunk.text is not None:
print(chunk.text)
elif chunk.tool_call:
function_responses = []
for fc in tool_call.function_calls:
function_response = types.FunctionResponse(
id=fc.id,
name=fc.name,
response={ "result": "ok" } # simple, hard-coded function response
)
function_responses.append(function_response)
await session.send_tool_response(function_responses=function_responses)
if __name__ == "__main__":
asyncio.run(main())
একটি একক প্রম্পট থেকে, মডেলটি একাধিক ফাংশন কল এবং তাদের আউটপুট চেইন করার জন্য প্রয়োজনীয় কোড তৈরি করতে পারে। এই কোডটি একটি স্যান্ডবক্স পরিবেশে কার্যকর করে, পরবর্তী BidiGenerateContentToolCall বার্তা তৈরি করে। প্রতিটি ফাংশন কলের ফলাফল উপলব্ধ না হওয়া পর্যন্ত এক্সিকিউশন বিরতি দেয়, যা ক্রমিক প্রক্রিয়াকরণ নিশ্চিত করে।
অডিও ইনপুট এবং অডিও আউটপুট নেতিবাচকভাবে মডেলের ফাংশন কলিং ব্যবহার করার ক্ষমতাকে প্রভাবিত করে।
কোড এক্সিকিউশন ব্যবহার করুন
আপনি সেশন কনফিগারেশনের অংশ হিসাবে কোড এক্সিকিউশন সংজ্ঞায়িত করতে পারেন। আরও জানতে কোড এক্সিকিউশন টিউটোরিয়াল দেখুন।
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
tools = [{'code_execution': {}}]
config = {"response_modalities": ["TEXT"], "tools": tools}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
prompt = "Compute the largest prime palindrome under 100000."
await session.send_client_content(turns={"parts": [{"text": prompt}]})
async for chunk in session.receive():
if chunk.server_content:
if chunk.text is not None:
print(chunk.text)
model_turn = chunk.server_content.model_turn
if model_turn:
for part in model_turn.parts:
if part.executable_code is not None:
print(part.executable_code.code)
if part.code_execution_result is not None:
print(part.code_execution_result.output)
if __name__ == "__main__":
asyncio.run(main())
Google অনুসন্ধানের সাথে গ্রাউন্ডিং ব্যবহার করুন
আপনি সেশন কনফিগারেশনের অংশ হিসাবে Google অনুসন্ধানের সাথে গ্রাউন্ডিং সক্ষম করতে পারেন। আরও জানতে গ্রাউন্ডিং টিউটোরিয়াল দেখুন।
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
tools = [{'google_search': {}}]
config = {"response_modalities": ["TEXT"], "tools": tools}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
prompt = "When did the last Brazil vs. Argentina soccer match happen?"
await session.send_client_content(turns={"parts": [{"text": prompt}]})
async for chunk in session.receive():
if chunk.server_content:
if chunk.text is not None:
print(chunk.text)
# The model might generate and execute Python code to use Search
model_turn = chunk.server_content.model_turn
if model_turn:
for part in model_turn.parts:
if part.executable_code is not None:
print(part.executable_code.code)
if part.code_execution_result is not None:
print(part.code_execution_result.output)
if __name__ == "__main__":
asyncio.run(main())
একাধিক টুল একত্রিত করুন
আপনি লাইভ API-এর মধ্যে একাধিক টুল একত্রিত করতে পারেন:
prompt = """
Hey, I need you to do three things for me.
1. Compute the largest prime palindrome under 100000.
2. Then use Google Search to look up information about the largest earthquake in California the week of Dec 5 2024?
3. Turn on the lights
Thanks!
"""
tools = [
{"google_search": {}},
{"code_execution": {}},
{"function_declarations": [turn_on_the_lights, turn_off_the_lights]},
]
config = {"response_modalities": ["TEXT"], "tools": tools}
বাধা হ্যান্ডেল
ব্যবহারকারীরা যে কোনো সময় মডেলের আউটপুট ব্যাহত করতে পারেন. যখন ভয়েস অ্যাক্টিভিটি ডিটেকশন (VAD) কোনো বাধা শনাক্ত করে, তখন চলমান জেনারেশন বাতিল করা হয় এবং বাতিল করা হয়। শুধুমাত্র ক্লায়েন্টকে ইতিমধ্যে পাঠানো তথ্য সেশন ইতিহাসে রাখা হয়। সার্ভার তখন বিডিজেনারেট কনটেন্টসার্ভার কনটেন্ট বার্তা পাঠায় বিঘ্নের রিপোর্ট করতে।
এছাড়াও, জেমিনি সার্ভার কোনো মুলতুবি থাকা ফাংশন কল বাতিল করে এবং বাতিল করা কলগুলির আইডি সহ একটি BidiGenerateContentServerContent
বার্তা পাঠায়।
async for response in session.receive():
if response.server_content.interrupted is True:
# The generation was interrupted
ভয়েস কার্যকলাপ সনাক্তকরণ কনফিগার করুন (VAD)
আপনি ভয়েস কার্যকলাপ সনাক্তকরণ (VAD) কনফিগার বা অক্ষম করতে পারেন।
স্বয়ংক্রিয় VAD ব্যবহার করুন
ডিফল্টরূপে, মডেলটি স্বয়ংক্রিয়ভাবে একটি ক্রমাগত অডিও ইনপুট স্ট্রীমে VAD সম্পাদন করে। VAD সেটআপ কনফিগারেশনের realtimeInputConfig.automaticActivityDetection
ক্ষেত্রের সাথে কনফিগার করা যেতে পারে।
যখন অডিও স্ট্রীমটি এক সেকেন্ডের বেশি সময়ের জন্য বিরাম দেওয়া হয় (উদাহরণস্বরূপ, কারণ ব্যবহারকারী মাইক্রোফোনটি বন্ধ করে দিয়েছে), তখন কোনও ক্যাশে করা অডিও ফ্লাশ করার জন্য একটি audioStreamEnd
ইভেন্ট পাঠানো উচিত। ক্লায়েন্ট যেকোনো সময় অডিও ডেটা পাঠানো আবার শুরু করতে পারে।
# example audio file to try:
# URL = "https://storage.googleapis.com/generativeai-downloads/data/hello_are_you_there.pcm"
# !wget -q $URL -O sample.pcm
import asyncio
from pathlib import Path
from google import genai
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
config = {"response_modalities": ["TEXT"]}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
audio_bytes = Path("sample.pcm").read_bytes()
await session.send_realtime_input(
audio=types.Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000")
)
# if stream gets paused, send:
# await session.send_realtime_input(audio_stream_end=True)
async for response in session.receive():
if response.text is not None:
print(response.text)
if __name__ == "__main__":
asyncio.run(main())
send_realtime_input
এর সাথে, API VAD এর উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে অডিওতে সাড়া দেবে। যখন send_client_content
ক্রমানুসারে মডেল প্রসঙ্গে বার্তা যোগ করে, তখন send_realtime_input
নির্ধারণমূলক অর্ডারের খরচে প্রতিক্রিয়াশীলতার জন্য অপ্টিমাইজ করা হয়।
স্বয়ংক্রিয় VAD কনফিগার করুন
VAD কার্যকলাপের উপর আরো নিয়ন্ত্রণের জন্য, আপনি নিম্নলিখিত পরামিতিগুলি কনফিগার করতে পারেন। আরও তথ্যের জন্য API রেফারেন্স দেখুন।
from google.genai import types
config = {
"response_modalities": ["TEXT"],
"realtime_input_config": {
"automatic_activity_detection": {
"disabled": False, # default
"start_of_speech_sensitivity": types.StartSensitivity.START_SENSITIVITY_LOW,
"end_of_speech_sensitivity": types.EndSensitivity.END_SENSITIVITY_LOW,
"prefix_padding_ms": 20,
"silence_duration_ms": 100,
}
}
}
স্বয়ংক্রিয় VAD অক্ষম করুন
বিকল্পভাবে, সেটআপ মেসেজে realtimeInputConfig.automaticActivityDetection.disabled
সেট করে স্বয়ংক্রিয় VAD অক্ষম করা যেতে পারে true
এই কনফিগারেশনে ক্লায়েন্ট ব্যবহারকারীর বক্তৃতা শনাক্ত করার জন্য এবং যথাযথ সময়ে activityStart
এবং activityEnd
বার্তা পাঠানোর জন্য দায়ী। এই কনফিগারেশনে একটি audioStreamEnd
পাঠানো হয় না। পরিবর্তে, স্ট্রীমের কোনো বাধা একটি activityEnd
বার্তা দ্বারা চিহ্নিত করা হয়।
config = {
"response_modalities": ["TEXT"],
"realtime_input_config": {"automatic_activity_detection": {"disabled": True}},
}
async with client.aio.live.connect(model=model, config=config) as session:
# ...
await session.send_realtime_input(activity_start=types.ActivityStart())
await session.send_realtime_input(
audio=types.Blob(data=audio_bytes, mime_type="audio/pcm;rate=16000")
)
await session.send_realtime_input(activity_end=types.ActivityEnd())
# ...
টোকেন গণনা পান
প্রত্যাবর্তিত সার্ভার বার্তার মেটাডেটা ক্ষেত্রে আপনি মোট ভোক্ত টোকেনের সংখ্যা খুঁজে পেতে পারেন।
async for message in session.receive():
# The server will periodically send messages that include UsageMetadata.
if message.usage_metadata:
usage = message.usage_metadata
print(
f"Used {usage.total_token_count} tokens in total. Response token breakdown:"
)
for detail in usage.response_tokens_details:
match detail:
case types.ModalityTokenCount(modality=modality, token_count=count):
print(f"{modality}: {count}")
সেশনের সময়কাল বাড়ান
সর্বাধিক সেশনের সময়কাল দুটি প্রক্রিয়ার সাথে সীমাহীন পর্যন্ত বাড়ানো যেতে পারে:
উপরন্তু, সেশন শেষ হওয়ার আগে আপনি একটি GoAway বার্তা পাবেন, যা আপনাকে আরও পদক্ষেপ নিতে অনুমতি দেবে।
প্রসঙ্গ উইন্ডো কম্প্রেশন সক্ষম করুন
দীর্ঘতর সেশনগুলি সক্ষম করতে এবং আকস্মিক সংযোগ বন্ধ হওয়া এড়াতে, আপনি সেশন কনফিগারেশনের অংশ হিসাবে প্রসঙ্গ উইন্ডো কম্প্রেশন ক্ষেত্র সেট করে প্রসঙ্গ উইন্ডো কম্প্রেশন সক্ষম করতে পারেন।
ContextWindowCompressionConfig- এ, আপনি একটি স্লাইডিং-উইন্ডো মেকানিজম এবং কম্প্রেশন ট্রিগার করে এমন টোকেনের সংখ্যা কনফিগার করতে পারেন।
from google.genai import types
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
context_window_compression=(
# Configures compression with default parameters.
types.ContextWindowCompressionConfig(
sliding_window=types.SlidingWindow(),
)
),
)
সেশন পুনঃসূচনা কনফিগার করুন
সার্ভার যখন পর্যায়ক্রমে WebSocket সংযোগ পুনরায় সেট করে তখন সেশন সমাপ্তি প্রতিরোধ করতে, সেটআপ কনফিগারেশনের মধ্যে সেশন রিজাম্পশন ক্ষেত্রটি কনফিগার করুন।
এই কনফিগারেশনটি পাস করার ফলে সার্ভারটি SessionResumptionUpdate বার্তা পাঠাতে পারে, যা পরবর্তী সংযোগের SessionResumptionConfig.handle
হিসাবে শেষ পুনঃসূচনা টোকেনটি পাস করে সেশন পুনরায় শুরু করতে ব্যবহার করা যেতে পারে।
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
async def main():
print(f"Connecting to the service with handle {previous_session_handle}...")
async with client.aio.live.connect(
model=model,
config=types.LiveConnectConfig(
response_modalities=["AUDIO"],
session_resumption=types.SessionResumptionConfig(
# The handle of the session to resume is passed here,
# or else None to start a new session.
handle=previous_session_handle
),
),
) as session:
while True:
await session.send_client_content(
turns=types.Content(
role="user", parts=[types.Part(text="Hello world!")]
)
)
async for message in session.receive():
# Periodically, the server will send update messages that may
# contain a handle for the current state of the session.
if message.session_resumption_update:
update = message.session_resumption_update
if update.resumable and update.new_handle:
# The handle should be retained and linked to the session.
return update.new_handle
# For the purposes of this example, placeholder input is continually fed
# to the model. In non-sample code, the model inputs would come from
# the user.
if message.server_content and message.server_content.turn_complete:
break
if __name__ == "__main__":
asyncio.run(main())
সেশন সংযোগ বিচ্ছিন্ন হওয়ার আগে একটি বার্তা পান
সার্ভার একটি GoAway বার্তা পাঠায় যা সংকেত দেয় যে বর্তমান সংযোগটি শীঘ্রই বন্ধ হয়ে যাবে। এই বার্তাটিতে টাইমলেফ্ট অন্তর্ভুক্ত রয়েছে, বাকি সময় নির্দেশ করে এবং সংযোগটি বন্ধ হয়ে যাওয়ার আগে আপনাকে আরও পদক্ষেপ নিতে দেয়।
async for response in session.receive():
if response.go_away is not None:
# The connection will soon be terminated
print(response.go_away.time_left)
প্রজন্ম সম্পূর্ণ হলে একটি বার্তা পান
সার্ভার একটি জেনারেশন কমপ্লিট মেসেজ পাঠায় যা ইঙ্গিত দেয় যে মডেলটি প্রতিক্রিয়া তৈরি করা শেষ করেছে।
async for response in session.receive():
if response.server_content.generation_complete is True:
# The generation is complete
মিডিয়া রেজোলিউশন পরিবর্তন করুন
আপনি সেশন কনফিগারেশনের অংশ হিসাবে mediaResolution
ক্ষেত্র সেট করে ইনপুট মিডিয়ার জন্য মিডিয়া রেজোলিউশন নির্দিষ্ট করতে পারেন:
from google.genai import types
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
media_resolution=types.MediaResolution.MEDIA_RESOLUTION_LOW,
)
অডিও প্রতিলিপি গ্রহণ
আপনি মডেলের অডিও আউটপুট প্রতিলিপি সক্রিয় করতে পারেন. প্রতিলিপি ভাষা মডেলের প্রতিক্রিয়া থেকে অনুমান করা হয়.
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key="GEMINI_API_KEY")
model = "gemini-2.0-flash-live-001"
config = {"response_modalities": ["AUDIO"],
"output_audio_transcription": {}
}
async def main():
async with client.aio.live.connect(model=model, config=config) as session:
message = "Hello? Gemini are you there?"
await session.send_client_content(
turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
)
async for response in session.receive():
if response.server_content.model_turn:
print("Model turn:", response.server_content.model_turn)
if response.server_content.output_transcription:
print("Transcript:", response.server_content.output_transcription.text)
if __name__ == "__main__":
asyncio.run(main())
সীমাবদ্ধতা
আপনি যখন আপনার প্রকল্পের পরিকল্পনা করবেন তখন লাইভ API এবং জেমিনি 2.0 এর নিম্নলিখিত সীমাবদ্ধতাগুলি বিবেচনা করুন৷
প্রতিক্রিয়া পদ্ধতি
আপনি সেশন কনফিগারেশনে প্রতি সেশনে শুধুমাত্র একটি রেসপন্স মোডালিটি ( TEXT
বা AUDIO
) সেট করতে পারেন। উভয় সেট করার চেষ্টা করার ফলে একটি কনফিগার ত্রুটি বার্তা হবে। এর মানে হল যে আপনি মডেলটিকে টেক্সট বা অডিওর সাথে প্রতিক্রিয়া জানাতে কনফিগার করতে পারেন, কিন্তু একই সেশনে উভয়ই নয়।
ক্লায়েন্ট প্রমাণীকরণ
লাইভ API শুধুমাত্র সার্ভারকে সার্ভার প্রমাণীকরণ প্রদান করে এবং সরাসরি ক্লায়েন্ট ব্যবহারের জন্য সুপারিশ করা হয় না। লাইভ API-এর সাথে নিরাপদ প্রমাণীকরণের জন্য ক্লায়েন্ট ইনপুট একটি মধ্যবর্তী অ্যাপ্লিকেশন সার্ভারের মাধ্যমে রুট করা উচিত।
সেশনের সময়কাল
সেশন কম্প্রেশন সক্ষম করে সেশনের সময়সীমা সীমাহীন পর্যন্ত বাড়ানো যেতে পারে। কম্প্রেশন ছাড়া, শুধুমাত্র অডিও সেশন 15 মিনিটের মধ্যে সীমাবদ্ধ, এবং অডিও প্লাস ভিডিও সেশন 2 মিনিটের মধ্যে সীমাবদ্ধ। কম্প্রেশন ছাড়াই এই সীমা অতিক্রম করলে সংযোগটি বন্ধ হয়ে যাবে।
অতিরিক্তভাবে, আপনি ক্লায়েন্টকে বন্ধ করা সেশন পুনরায় শুরু করার অনুমতি দেওয়ার জন্য সেশন পুনঃসূচনা কনফিগার করতে পারেন।
প্রসঙ্গ উইন্ডো
একটি সেশনের একটি প্রসঙ্গ উইন্ডো সীমা 32k টোকেন রয়েছে৷
সমর্থিত ভাষা
লাইভ API নিম্নলিখিত ভাষা সমর্থন করে:
ভাষা | BCP-47 কোড |
---|---|
জার্মান (জার্মানি) | ডি-ডিই |
ইংরেজি (অস্ট্রেলিয়া) | en-AU |
ইংরেজি (যুক্তরাজ্য) | en-GB |
ইংরেজি (ভারত) | en-IN |
ইংরেজি (মার্কিন) | en-US |
স্প্যানিশ (মার্কিন যুক্তরাষ্ট্র) | es-মার্কিন |
ফরাসি (ফ্রান্স) | fr-FR |
হিন্দি (ভারত) | হাই-ইন |
পর্তুগিজ (ব্রাজিল) | pt-BR |
আরবি (জেনারিক) | ar-XA |
স্প্যানিশ (স্পেন) | es-ES |
ফরাসি (কানাডা) | fr-CA |
ইন্দোনেশিয়া (ইন্দোনেশিয়া) | আইডি-আইডি |
ইতালীয় (ইতালি) | এটা-আইটি |
জাপানিজ (জাপান) | ja-জেপি |
তুর্কি (তুরস্ক) | tr-TR |
ভিয়েতনামী (ভিয়েতনাম) | vi-VN |
বাংলা (ভারত) | bn-IN |
গুজরাটি (ভারত) | gu-IN |
কন্নড় (ভারত) | kn-IN |
মালায়লাম (ভারত) | ml-IN |
মারাঠি (ভারত) | মিস্টার-আইএন |
তামিল (ভারত) | ta-IN |
তেলেগু (ভারত) | te-IN |
ডাচ (নেদারল্যান্ডস) | nl-NL |
কোরিয়ান (দক্ষিণ কোরিয়া) | ko-KR |
ম্যান্ডারিন চাইনিজ (চীন) | cmn-CN |
পোলিশ (পোল্যান্ড) | pl-PL |
রাশিয়ান (রাশিয়া) | ru-RU |
থাই (থাইল্যান্ড) | th-TH |
তৃতীয় পক্ষের ইন্টিগ্রেশন
ওয়েব এবং মোবাইল অ্যাপ স্থাপনার জন্য, আপনি এখান থেকে বিকল্পগুলি অন্বেষণ করতে পারেন: