Live API capabilities guide

এটি একটি বিস্তৃত নির্দেশিকা যা লাইভ API-এর সাথে উপলব্ধ ক্ষমতা এবং কনফিগারেশনগুলিকে কভার করে। সাধারণ ব্যবহারের ক্ষেত্রে একটি ওভারভিউ এবং নমুনা কোডের জন্য লাইভ API দিয়ে শুরু করুন পৃষ্ঠাটি দেখুন।

শুরু করার আগে

  • মূল ধারণাগুলির সাথে নিজেকে পরিচিত করুন: যদি আপনি ইতিমধ্যেই এটি না করে থাকেন, তাহলে প্রথমে "Get Started with Live API" পৃষ্ঠাটি পড়ুন। এটি আপনাকে Live API এর মৌলিক নীতিগুলি, এটি কীভাবে কাজ করে এবং বিভিন্ন বাস্তবায়ন পদ্ধতির সাথে পরিচয় করিয়ে দেবে।
  • AI Studio-তে Live API ব্যবহার করে দেখুন: তৈরি শুরু করার আগে Google AI Studio- তে Live API ব্যবহার করে দেখুন। Google AI Studio-তে Live API ব্যবহার করতে, Stream নির্বাচন করুন।

সংযোগ স্থাপন করা হচ্ছে

নিম্নলিখিত উদাহরণে API কী ব্যবহার করে কীভাবে সংযোগ তৈরি করতে হয় তা দেখানো হয়েছে:

পাইথন

import asyncio
from google import genai

client = genai.Client()

model = "gemini-2.5-flash-native-audio-preview-09-2025"
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({});
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
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();

মিথস্ক্রিয়া পদ্ধতি

নিম্নলিখিত বিভাগগুলি লাইভ API-তে উপলব্ধ বিভিন্ন ইনপুট এবং আউটপুট পদ্ধতির উদাহরণ এবং সহায়ক প্রসঙ্গ প্রদান করে।

অডিও পাঠানো এবং গ্রহণ করা

সবচেয়ে সাধারণ অডিও উদাহরণ, অডিও-টু-অডিও , শুরু করার নির্দেশিকাতে আলোচনা করা হয়েছে।

অডিও ফর্ম্যাট

লাইভ API-তে অডিও ডেটা সর্বদা কাঁচা, সামান্য-এন্ডিয়ান, ১৬-বিট PCM হয়। অডিও আউটপুট সর্বদা ২৪kHz এর নমুনা হার ব্যবহার করে। ইনপুট অডিও মূলত ১৬kHz, তবে প্রয়োজনে লাইভ API পুনরায় নমুনা তৈরি করবে যাতে যেকোনো নমুনা হার পাঠানো যায়। ইনপুট অডিওর নমুনা হার বোঝাতে, প্রতিটি অডিও-ধারণকারী Blob- এর MIME প্রকারকে audio/pcm;rate=16000 মতো একটি মানের উপর সেট করুন।

টেক্সট পাঠানো হচ্ছে

আপনি কীভাবে টেক্সট পাঠাতে পারেন তা এখানে:

পাইথন

message = "Hello, how are you?"
await session.send_client_content(turns=message, turn_complete=True)

জাভাস্ক্রিপ্ট

const message = 'Hello, how are you?';
session.sendClientContent({ turns: message, turnComplete: true });

ক্রমবর্ধমান কন্টেন্ট আপডেট

টেক্সট ইনপুট পাঠাতে, সেশনের প্রসঙ্গ স্থাপন করতে, অথবা সেশনের প্রসঙ্গ পুনরুদ্ধার করতে ক্রমবর্ধমান আপডেট ব্যবহার করুন। সংক্ষিপ্ত প্রসঙ্গগুলির জন্য আপনি ইভেন্টের সঠিক ক্রম উপস্থাপনের জন্য পালাক্রমে ইন্টারঅ্যাকশন পাঠাতে পারেন:

পাইথন

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)

জাভাস্ক্রিপ্ট

let inputTurns = [
  { "role": "user", "parts": [{ "text": "What is the capital of France?" }] },
  { "role": "model", "parts": [{ "text": "Paris" }] },
]

session.sendClientContent({ turns: inputTurns, turnComplete: false })

inputTurns = [{ "role": "user", "parts": [{ "text": "What is the capital of Germany?" }] }]

session.sendClientContent({ turns: inputTurns, turnComplete: true })

দীর্ঘ প্রেক্ষাপটের জন্য, পরবর্তী ইন্টারঅ্যাকশনের জন্য প্রেক্ষাপট উইন্ডো খালি করার জন্য একটি একক বার্তার সারাংশ প্রদান করার পরামর্শ দেওয়া হচ্ছে। সেশন প্রেক্ষাপট লোড করার জন্য অন্য পদ্ধতির জন্য সেশন পুনঃসূচনা দেখুন।

অডিও ট্রান্সক্রিপশন

মডেল প্রতিক্রিয়া ছাড়াও, আপনি অডিও আউটপুট এবং অডিও ইনপুট উভয়েরই ট্রান্সক্রিপশনও পেতে পারেন।

মডেলের অডিও আউটপুটের ট্রান্সক্রিপশন সক্ষম করতে, সেটআপ কনফিগারেশনে output_audio_transcription পাঠান। মডেলের প্রতিক্রিয়া থেকে ট্রান্সক্রিপশন ভাষা অনুমান করা হয়।

পাইথন

import asyncio
from google import genai
from google.genai import types

client = genai.Client()
model = "gemini-2.5-flash-native-audio-preview-09-2025"

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())

জাভাস্ক্রিপ্ট

import { GoogleGenAI, Modality } from '@google/genai';

const ai = new GoogleGenAI({});
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';

const config = {
  responseModalities: [Modality.AUDIO],
  outputAudioTranscription: {}
};

async function live() {
  const responseQueue = [];

  async function waitMessage() {
    let done = false;
    let message = undefined;
    while (!done) {
      message = responseQueue.shift();
      if (message) {
        done = true;
      } else {
        await new Promise((resolve) => setTimeout(resolve, 100));
      }
    }
    return message;
  }

  async function handleTurn() {
    const turns = [];
    let done = false;
    while (!done) {
      const message = await waitMessage();
      turns.push(message);
      if (message.serverContent && message.serverContent.turnComplete) {
        done = true;
      }
    }
    return turns;
  }

  const session = await ai.live.connect({
    model: model,
    callbacks: {
      onopen: function () {
        console.debug('Opened');
      },
      onmessage: function (message) {
        responseQueue.push(message);
      },
      onerror: function (e) {
        console.debug('Error:', e.message);
      },
      onclose: function (e) {
        console.debug('Close:', e.reason);
      },
    },
    config: config,
  });

  const inputTurns = 'Hello how are you?';
  session.sendClientContent({ turns: inputTurns });

  const turns = await handleTurn();

  for (const turn of turns) {
    if (turn.serverContent && turn.serverContent.outputTranscription) {
      console.debug('Received output transcription: %s\n', turn.serverContent.outputTranscription.text);
    }
  }

  session.close();
}

async function main() {
  await live().catch((e) => console.error('got error', e));
}

main();

মডেলের অডিও ইনপুটের ট্রান্সক্রিপশন সক্ষম করতে, সেটআপ কনফিগারেশনে input_audio_transcription পাঠান।

পাইথন

import asyncio
from pathlib import Path
from google import genai
from google.genai import types

client = genai.Client()
model = "gemini-2.5-flash-native-audio-preview-09-2025"

config = {
    "response_modalities": ["AUDIO"],
    "input_audio_transcription": {},
}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        audio_data = Path("16000.pcm").read_bytes()

        await session.send_realtime_input(
            audio=types.Blob(data=audio_data, mime_type='audio/pcm;rate=16000')
        )

        async for msg in session.receive():
            if msg.server_content.input_transcription:
                print('Transcript:', msg.server_content.input_transcription.text)

if __name__ == "__main__":
    asyncio.run(main())

জাভাস্ক্রিপ্ট

import { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";
import pkg from 'wavefile';
const { WaveFile } = pkg;

const ai = new GoogleGenAI({});
const model = 'gemini-2.5-flash-native-audio-preview-09-2025';

const config = {
  responseModalities: [Modality.AUDIO],
  inputAudioTranscription: {}
};

async function live() {
  const responseQueue = [];

  async function waitMessage() {
    let done = false;
    let message = undefined;
    while (!done) {
      message = responseQueue.shift();
      if (message) {
        done = true;
      } else {
        await new Promise((resolve) => setTimeout(resolve, 100));
      }
    }
    return message;
  }

  async function handleTurn() {
    const turns = [];
    let done = false;
    while (!done) {
      const message = await waitMessage();
      turns.push(message);
      if (message.serverContent && message.serverContent.turnComplete) {
        done = true;
      }
    }
    return turns;
  }

  const session = await ai.live.connect({
    model: model,
    callbacks: {
      onopen: function () {
        console.debug('Opened');
      },
      onmessage: function (message) {
        responseQueue.push(message);
      },
      onerror: function (e) {
        console.debug('Error:', e.message);
      },
      onclose: function (e) {
        console.debug('Close:', e.reason);
      },
    },
    config: config,
  });

  // Send Audio Chunk
  const fileBuffer = fs.readFileSync("16000.wav");

  // Ensure audio conforms to API requirements (16-bit PCM, 16kHz, mono)
  const wav = new WaveFile();
  wav.fromBuffer(fileBuffer);
  wav.toSampleRate(16000);
  wav.toBitDepth("16");
  const base64Audio = wav.toBase64();

  // If already in correct format, you can use this:
  // const fileBuffer = fs.readFileSync("sample.pcm");
  // const base64Audio = Buffer.from(fileBuffer).toString('base64');

  session.sendRealtimeInput(
    {
      audio: {
        data: base64Audio,
        mimeType: "audio/pcm;rate=16000"
      }
    }
  );

  const turns = await handleTurn();
  for (const turn of turns) {
    if (turn.text) {
      console.debug('Received text: %s\n', turn.text);
    }
    else if (turn.data) {
      console.debug('Received inline data: %s\n', turn.data);
    }
    else if (turn.serverContent && turn.serverContent.inputTranscription) {
      console.debug('Received input transcription: %s\n', turn.serverContent.inputTranscription.text);
    }
  }

  session.close();
}

async function main() {
  await live().catch((e) => console.error('got error', e));
}

main();

অডিও এবং ভিডিও স্ট্রিম করুন

ভয়েস এবং ভাষা পরিবর্তন করুন

নেটিভ অডিও আউটপুট মডেলগুলি আমাদের টেক্সট-টু-স্পিচ (TTS) মডেলগুলির জন্য উপলব্ধ যেকোনো ভয়েস সমর্থন করে। আপনি AI স্টুডিওতে সমস্ত ভয়েস শুনতে পারেন।

একটি ভয়েস নির্দিষ্ট করতে, সেশন কনফিগারেশনের অংশ হিসেবে speechConfig অবজেক্টের মধ্যে ভয়েস নাম সেট করুন:

পাইথন

config = {
    "response_modalities": ["AUDIO"],
    "speech_config": {
        "voice_config": {"prebuilt_voice_config": {"voice_name": "Kore"}}
    },
}

জাভাস্ক্রিপ্ট

const config = {
  responseModalities: [Modality.AUDIO],
  speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } }
};

লাইভ API একাধিক ভাষা সমর্থন করে। নেটিভ অডিও আউটপুট মডেলগুলি স্বয়ংক্রিয়ভাবে উপযুক্ত ভাষা বেছে নেয় এবং স্পষ্টভাবে ভাষা কোড সেট করা সমর্থন করে না।

নেটিভ অডিও ক্ষমতা

আমাদের সর্বশেষ মডেলগুলিতে নেটিভ অডিও আউটপুট রয়েছে, যা প্রাকৃতিক, বাস্তবসম্মত-শব্দযুক্ত বক্তৃতা এবং উন্নত বহুভাষিক কর্মক্ষমতা প্রদান করে। নেটিভ অডিওতে আবেগপূর্ণ (আবেগ-সচেতন) সংলাপ , সক্রিয় অডিও (যেখানে মডেল বুদ্ধিমত্তার সাথে সিদ্ধান্ত নেয় কখন ইনপুটের প্রতিক্রিয়া জানাতে হবে), এবং "চিন্তাভাবনা" এর মতো উন্নত বৈশিষ্ট্যগুলিও সক্ষম করা হয়েছে।

আবেগপূর্ণ সংলাপ

এই বৈশিষ্ট্যটি জেমিনিকে তার প্রতিক্রিয়া শৈলীকে ইনপুট এক্সপ্রেশন এবং সুরের সাথে খাপ খাইয়ে নিতে দেয়।

অ্যাফেকটিভ ডায়ালগ ব্যবহার করতে, সেটআপ বার্তায় api সংস্করণটিকে v1alpha তে সেট করুন এবং enable_affective_dialog true তে সেট করুন:

পাইথন

client = genai.Client(http_options={"api_version": "v1alpha"})

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"],
    enable_affective_dialog=True
)

জাভাস্ক্রিপ্ট

const ai = new GoogleGenAI({ httpOptions: {"apiVersion": "v1alpha"} });

const config = {
  responseModalities: [Modality.AUDIO],
  enableAffectiveDialog: true
};

সক্রিয় অডিও

যখন এই বৈশিষ্ট্যটি সক্রিয় থাকে, তখন জেমিনি সক্রিয়ভাবে সিদ্ধান্ত নিতে পারে যে বিষয়বস্তুটি প্রাসঙ্গিক না হলে প্রতিক্রিয়া জানাবে না।

এটি ব্যবহার করতে, api সংস্করণটিকে v1alpha তে সেট করুন এবং সেটআপ বার্তায় proactivity ক্ষেত্রটি কনফিগার করুন এবং proactive_audio কে true তে সেট করুন:

পাইথন

client = genai.Client(http_options={"api_version": "v1alpha"})

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"],
    proactivity={'proactive_audio': True}
)

জাভাস্ক্রিপ্ট

const ai = new GoogleGenAI({ httpOptions: {"apiVersion": "v1alpha"} });

const config = {
  responseModalities: [Modality.AUDIO],
  proactivity: { proactiveAudio: true }
}

ভাবছি

সর্বশেষ নেটিভ অডিও আউটপুট মডেল gemini-2.5-flash-native-audio-preview-09-2025 চিন্তা করার ক্ষমতা সমর্থন করে, ডিফল্টরূপে গতিশীল চিন্তাভাবনা সক্ষম করে।

thinkingBudget প্যারামিটারটি মডেলটিকে প্রতিক্রিয়া তৈরি করার সময় কতগুলি চিন্তাভাবনা টোকেন ব্যবহার করতে হবে তা নির্দেশ করে। আপনি thinkingBudget কে 0 এ সেট করে চিন্তাভাবনা বন্ধ করতে পারেন। মডেলের thinkingBudget কনফিগারেশনের বিশদ সম্পর্কে আরও তথ্যের জন্য, thinking budgets ডকুমেন্টেশন দেখুন।

পাইথন

model = "gemini-2.5-flash-native-audio-preview-09-2025"

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"]
    thinking_config=types.ThinkingConfig(
        thinking_budget=1024,
    )
)

async with client.aio.live.connect(model=model, config=config) as session:
    # Send audio input and receive audio

জাভাস্ক্রিপ্ট

const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
const config = {
  responseModalities: [Modality.AUDIO],
  thinkingConfig: {
    thinkingBudget: 1024,
  },
};

async function main() {

  const session = await ai.live.connect({
    model: model,
    config: config,
    callbacks: ...,
  });

  // Send audio input and receive audio

  session.close();
}

main();

অতিরিক্তভাবে, আপনি আপনার কনফিগারেশনে includeThoughts কে true হিসেবে সেট করে চিন্তার সারাংশ সক্ষম করতে পারেন। আরও তথ্যের জন্য চিন্তার সারাংশ দেখুন:

পাইথন

model = "gemini-2.5-flash-native-audio-preview-09-2025"

config = types.LiveConnectConfig(
    response_modalities=["AUDIO"]
    thinking_config=types.ThinkingConfig(
        thinking_budget=1024,
        include_thoughts=True
    )
)

জাভাস্ক্রিপ্ট

const model = 'gemini-2.5-flash-native-audio-preview-09-2025';
const config = {
  responseModalities: [Modality.AUDIO],
  thinkingConfig: {
    thinkingBudget: 1024,
    includeThoughts: true,
  },
};

ভয়েস অ্যাক্টিভিটি ডিটেকশন (VAD)

ভয়েস অ্যাক্টিভিটি ডিটেকশন (VAD) মডেলটিকে একজন ব্যক্তি কখন কথা বলছেন তা সনাক্ত করতে সাহায্য করে। এটি স্বাভাবিক কথোপকথন তৈরির জন্য অপরিহার্য, কারণ এটি ব্যবহারকারীকে যেকোনো সময় মডেলটিকে বাধাগ্রস্ত করতে দেয়।

যখন VAD কোনও বাধা শনাক্ত করে, তখন চলমান জেনারেশন বাতিল করে বাতিল করা হয়। শুধুমাত্র ক্লায়েন্টের কাছে ইতিমধ্যে প্রেরিত তথ্য সেশন ইতিহাসে সংরক্ষণ করা হয়। এরপর সার্ভারটি বাধা সম্পর্কে রিপোর্ট করার জন্য একটি BidiGenerateContentServerContent বার্তা পাঠায়।

এরপর জেমিনি সার্ভার যেকোনো মুলতুবি থাকা ফাংশন কল বাতিল করে এবং বাতিল করা কলগুলির আইডি সহ একটি BidiGenerateContentServerContent বার্তা পাঠায়।

পাইথন

async for response in session.receive():
    if response.server_content.interrupted is True:
        # The generation was interrupted

        # If realtime playback is implemented in your application,
        # you should stop playing audio and clear queued playback here.

জাভাস্ক্রিপ্ট

const turns = await handleTurn();

for (const turn of turns) {
  if (turn.serverContent && turn.serverContent.interrupted) {
    // The generation was interrupted

    // If realtime playback is implemented in your application,
    // you should stop playing audio and clear queued playback here.
  }
}

স্বয়ংক্রিয় ভিএডি

ডিফল্টরূপে, মডেলটি স্বয়ংক্রিয়ভাবে একটি অবিচ্ছিন্ন অডিও ইনপুট স্ট্রিমে 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
from google.genai import types

client = genai.Client()
model = "gemini-live-2.5-flash-preview"

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())

জাভাস্ক্রিপ্ট

// 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 { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";

const ai = new GoogleGenAI({});
const model = 'gemini-live-2.5-flash-preview';
const config = { responseModalities: [Modality.TEXT] };

async function live() {
  const responseQueue = [];

  async function waitMessage() {
    let done = false;
    let message = undefined;
    while (!done) {
      message = responseQueue.shift();
      if (message) {
        done = true;
      } else {
        await new Promise((resolve) => setTimeout(resolve, 100));
      }
    }
    return message;
  }

  async function handleTurn() {
    const turns = [];
    let done = false;
    while (!done) {
      const message = await waitMessage();
      turns.push(message);
      if (message.serverContent && message.serverContent.turnComplete) {
        done = true;
      }
    }
    return turns;
  }

  const session = await ai.live.connect({
    model: model,
    callbacks: {
      onopen: function () {
        console.debug('Opened');
      },
      onmessage: function (message) {
        responseQueue.push(message);
      },
      onerror: function (e) {
        console.debug('Error:', e.message);
      },
      onclose: function (e) {
        console.debug('Close:', e.reason);
      },
    },
    config: config,
  });

  // Send Audio Chunk
  const fileBuffer = fs.readFileSync("sample.pcm");
  const base64Audio = Buffer.from(fileBuffer).toString('base64');

  session.sendRealtimeInput(
    {
      audio: {
        data: base64Audio,
        mimeType: "audio/pcm;rate=16000"
      }
    }

  );

  // if stream gets paused, send:
  // session.sendRealtimeInput({ audioStreamEnd: true })

  const turns = await handleTurn();
  for (const turn of turns) {
    if (turn.text) {
      console.debug('Received text: %s\n', turn.text);
    }
    else if (turn.data) {
      console.debug('Received inline data: %s\n', turn.data);
    }
  }

  session.close();
}

async function main() {
  await live().catch((e) => console.error('got error', e));
}

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,
        }
    }
}

জাভাস্ক্রিপ্ট

import { GoogleGenAI, Modality, StartSensitivity, EndSensitivity } from '@google/genai';

const config = {
  responseModalities: [Modality.TEXT],
  realtimeInputConfig: {
    automaticActivityDetection: {
      disabled: false, // default
      startOfSpeechSensitivity: StartSensitivity.START_SENSITIVITY_LOW,
      endOfSpeechSensitivity: EndSensitivity.END_SENSITIVITY_LOW,
      prefixPaddingMs: 20,
      silenceDurationMs: 100,
    }
  }
};

স্বয়ংক্রিয় VAD অক্ষম করুন

বিকল্পভাবে, সেটআপ বার্তায় realtimeInputConfig.automaticActivityDetection.disabled কে true এ সেট করে স্বয়ংক্রিয় VAD নিষ্ক্রিয় করা যেতে পারে। এই কনফিগারেশনে ক্লায়েন্ট ব্যবহারকারীর বক্তৃতা সনাক্ত করার এবং উপযুক্ত সময়ে 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())
    # ...

জাভাস্ক্রিপ্ট

const config = {
  responseModalities: [Modality.TEXT],
  realtimeInputConfig: {
    automaticActivityDetection: {
      disabled: true,
    }
  }
};

session.sendRealtimeInput({ activityStart: {} })

session.sendRealtimeInput(
  {
    audio: {
      data: base64Audio,
      mimeType: "audio/pcm;rate=16000"
    }
  }

);

session.sendRealtimeInput({ activityEnd: {} })

টোকেন সংখ্যা

আপনি ফিরে আসা সার্ভার বার্তার usageMetadata ক্ষেত্রের মধ্যে মোট ব্যবহৃত টোকেনের সংখ্যা খুঁজে পেতে পারেন।

পাইথন

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}")

জাভাস্ক্রিপ্ট

const turns = await handleTurn();

for (const turn of turns) {
  if (turn.usageMetadata) {
    console.debug('Used %s tokens in total. Response token breakdown:\n', turn.usageMetadata.totalTokenCount);

    for (const detail of turn.usageMetadata.responseTokensDetails) {
      console.debug('%s\n', detail);
    }
  }
}

মিডিয়া রেজোলিউশন

সেশন কনফিগারেশনের অংশ হিসেবে mediaResolution ফিল্ড সেট করে আপনি ইনপুট মিডিয়ার জন্য মিডিয়া রেজোলিউশন নির্দিষ্ট করতে পারেন:

পাইথন

from google.genai import types

config = {
    "response_modalities": ["AUDIO"],
    "media_resolution": types.MediaResolution.MEDIA_RESOLUTION_LOW,
}

জাভাস্ক্রিপ্ট

import { GoogleGenAI, Modality, MediaResolution } from '@google/genai';

const config = {
    responseModalities: [Modality.TEXT],
    mediaResolution: MediaResolution.MEDIA_RESOLUTION_LOW,
};

সীমাবদ্ধতা

আপনার প্রকল্প পরিকল্পনা করার সময় লাইভ API-এর নিম্নলিখিত সীমাবদ্ধতাগুলি বিবেচনা করুন।

প্রতিক্রিয়া পদ্ধতি

সেশন কনফিগারেশনে আপনি প্রতি সেশনে শুধুমাত্র একটি রেসপন্স মোডালিটি ( TEXT অথবা AUDIO ) সেট করতে পারবেন। উভয় সেট করলে একটি কনফিগারেশন ত্রুটি বার্তা আসবে। এর অর্থ হল আপনি মডেলটিকে টেক্সট বা অডিও দিয়ে রেসপন্স করার জন্য কনফিগার করতে পারবেন, কিন্তু একই সেশনে উভয়ই নয়।

ক্লায়েন্ট প্রমাণীকরণ

লাইভ API শুধুমাত্র ডিফল্টরূপে সার্ভার-টু-সার্ভার প্রমাণীকরণ প্রদান করে। যদি আপনি আপনার লাইভ API অ্যাপ্লিকেশনটি ক্লায়েন্ট-টু-সার্ভার পদ্ধতি ব্যবহার করে বাস্তবায়ন করেন, তাহলে নিরাপত্তা ঝুঁকি কমাতে আপনাকে ক্ষণস্থায়ী টোকেন ব্যবহার করতে হবে।

সেশনের সময়কাল

শুধুমাত্র অডিও-সেশনের সময়সীমা ১৫ মিনিট এবং অডিও প্লাস ভিডিও সেশনের সময়সীমা ২ মিনিট। তবে, আপনি সেশনের সময়কালের উপর সীমাহীন এক্সটেনশনের জন্য বিভিন্ন সেশন পরিচালনার কৌশল কনফিগার করতে পারেন।

প্রসঙ্গ উইন্ডো

একটি সেশনের একটি প্রসঙ্গ উইন্ডো সীমা থাকে:

সমর্থিত ভাষা

লাইভ API নিম্নলিখিত ভাষাগুলিকে সমর্থন করে।

ভাষা BCP-47 কোড ভাষা BCP-47 কোড
জার্মান (জার্মানি) de-DE ইংরেজি (অস্ট্রেলিয়া)* en-AU
ইংরেজি (যুক্তরাজ্য)* en-GB ইংরেজি (ভারত) en-IN
ইংরেজি (মার্কিন) en-US স্প্যানিশ (মার্কিন) es-US
ফরাসি (ফ্রান্স) fr-FR হিন্দি (ভারত) hi-IN
পর্তুগিজ (ব্রাজিল) pt-BR আরবি (জেনেরিক) ar-XA
স্প্যানিশ (স্পেন)* es-ES ফরাসি (কানাডা)* fr-CA
ইন্দোনেশিয়ান (ইন্দোনেশিয়া) id-ID ইতালীয় (ইতালি) it-IT
জাপানি (জাপান) ja-JP তুর্কি (তুরস্ক) tr-TR
ভিয়েতনামী (ভিয়েতনাম) vi-VN বাংলা (ভারত) bn-IN
গুজরাটি (ভারত)* gu-IN কন্নড় (ভারত)* kn-IN
মারাঠি (ভারত) mr-IN মালায়লাম (ভারত)* ml-IN
তামিল (ভারত) ta-IN তেলেগু (ভারত) te-IN
ডাচ (নেদারল্যান্ডস) nl-NL কোরিয়ান (দক্ষিণ কোরিয়া) ko-KR
ম্যান্ডারিন চাইনিজ (চীন)* cmn-CN পোলিশ (পোল্যান্ড) pl-PL
রাশিয়ান (রাশিয়া) ru-RU থাই (থাইল্যান্ড) th-TH

তারকাচিহ্ন (*) দিয়ে চিহ্নিত ভাষাগুলি নেটিভ অডিওর জন্য উপলব্ধ নয়

এরপর কি?