Get started with Live API

লাইভ এপিআই জেমিনির সাথে কম-বিলম্বিত, রিয়েল-টাইম ভয়েস এবং ভিডিও ইন্টারঅ্যাকশন সক্ষম করে। এটি তাৎক্ষণিক, মানুষের মতো কথ্য প্রতিক্রিয়া প্রদানের জন্য অডিও, ভিডিও বা টেক্সটের ক্রমাগত স্ট্রিম প্রক্রিয়া করে, যা আপনার ব্যবহারকারীদের জন্য একটি স্বাভাবিক কথোপকথনের অভিজ্ঞতা তৈরি করে।

লাইভ এপিআই ওভারভিউ

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

এই পৃষ্ঠাটি আপনাকে উদাহরণ এবং মৌলিক কোড নমুনা দিয়ে কাজ শুরু করতে সাহায্য করবে।

গুগল এআই স্টুডিও লাইভ এপিআই ব্যবহার করে দেখুন

উদাহরণ অ্যাপ্লিকেশন

এন্ড-টু-এন্ড ব্যবহারের ক্ষেত্রে লাইভ API কীভাবে ব্যবহার করতে হয় তা ব্যাখ্যা করে নিম্নলিখিত উদাহরণ অ্যাপ্লিকেশনগুলি দেখুন:

  • AI Studio-তে লাইভ অডিও স্টার্টার অ্যাপ , JavaScript লাইব্রেরি ব্যবহার করে লাইভ API-এর সাথে সংযোগ স্থাপন করে এবং আপনার মাইক্রোফোন এবং স্পিকারের মাধ্যমে দ্বিমুখী অডিও স্ট্রিম করে।
  • লাইভ API পাইথন কুকবুক, যা পাইঅডিও ব্যবহার করে, যা লাইভ API-এর সাথে সংযুক্ত।

পার্টনার ইন্টিগ্রেশন

যদি আপনি আরও সহজ ডেভেলপমেন্ট প্রক্রিয়া পছন্দ করেন, তাহলে আপনি Daily , LiveKit অথবা Voximplant ব্যবহার করতে পারেন। এগুলি হল তৃতীয় পক্ষের অংশীদার প্ল্যাটফর্ম যারা ইতিমধ্যেই WebRTC প্রোটোকলের মাধ্যমে Gemini Live API-কে একীভূত করেছে যাতে রিয়েল-টাইম অডিও এবং ভিডিও অ্যাপ্লিকেশনগুলির ডেভেলপমেন্টকে সহজতর করা যায়।

নির্মাণ শুরু করার আগে

লাইভ এপিআই তৈরি শুরু করার আগে দুটি গুরুত্বপূর্ণ সিদ্ধান্ত নিতে হবে: একটি মডেল নির্বাচন করা এবং একটি বাস্তবায়ন পদ্ধতি নির্বাচন করা।

একটি অডিও জেনারেশন আর্কিটেকচার বেছে নিন

যদি আপনি একটি অডিও-ভিত্তিক ব্যবহারের কেস তৈরি করেন, তাহলে আপনার মডেলের পছন্দ অডিও প্রতিক্রিয়া তৈরি করতে ব্যবহৃত অডিও জেনারেশন আর্কিটেকচার নির্ধারণ করে:

  • নেটিভ অডিও : এই বিকল্পটি সবচেয়ে স্বাভাবিক এবং বাস্তবসম্মত-শব্দযুক্ত বক্তৃতা এবং আরও ভাল বহুভাষিক কর্মক্ষমতা প্রদান করে। এটি আবেগপূর্ণ (আবেগ-সচেতন) সংলাপ , সক্রিয় অডিও (যেখানে মডেল নির্দিষ্ট ইনপুট উপেক্ষা করার বা প্রতিক্রিয়া জানানোর সিদ্ধান্ত নিতে পারে), এবং "চিন্তাভাবনা" এর মতো উন্নত বৈশিষ্ট্যগুলিও সক্ষম করে। নেটিভ অডিও নিম্নলিখিত নেটিভ অডিও মডেলগুলি দ্বারা সমর্থিত:
    • gemini-2.5-flash-native-audio-preview-09-2025
  • হাফ-ক্যাসকেড অডিও : এই বিকল্পটি একটি ক্যাসকেডেড মডেল আর্কিটেকচার (নেটিভ অডিও ইনপুট এবং টেক্সট-টু-স্পিচ আউটপুট) ব্যবহার করে। এটি উৎপাদন পরিবেশে, বিশেষ করে টুল ব্যবহারের ক্ষেত্রে, আরও ভালো কর্মক্ষমতা এবং নির্ভরযোগ্যতা প্রদান করে। হাফ-ক্যাসকেডেড অডিও নিম্নলিখিত মডেলগুলি দ্বারা সমর্থিত:
    • gemini-live-2.5-flash-preview
    • gemini-2.0-flash-live-001

একটি বাস্তবায়ন পদ্ধতি বেছে নিন

লাইভ এপিআই-এর সাথে ইন্টিগ্রেট করার সময়, আপনাকে নিম্নলিখিত বাস্তবায়ন পদ্ধতিগুলির মধ্যে একটি বেছে নিতে হবে:

  • সার্ভার-টু-সার্ভার : আপনার ব্যাকএন্ড WebSockets ব্যবহার করে লাইভ API-এর সাথে সংযুক্ত হয়। সাধারণত, আপনার ক্লায়েন্ট আপনার সার্ভারে স্ট্রিম ডেটা (অডিও, ভিডিও, টেক্সট) পাঠায়, যা পরে এটি লাইভ API-তে ফরোয়ার্ড করে।
  • ক্লায়েন্ট-টু-সার্ভার : আপনার ফ্রন্টএন্ড কোডটি আপনার ব্যাকএন্ডকে বাইপাস করে ডেটা স্ট্রিম করার জন্য ওয়েবসকেট ব্যবহার করে সরাসরি লাইভ API-এর সাথে সংযুক্ত হয়।

শুরু করুন

এই উদাহরণটি একটি WAV ফাইল পড়ে , সঠিক বিন্যাসে পাঠায় এবং প্রাপ্ত ডেটা WAV ফাইল হিসেবে সংরক্ষণ করে।

আপনি ১৬-বিট PCM, ১৬kHz, মনো ফর্ম্যাটে রূপান্তর করে অডিও পাঠাতে পারেন এবং AUDIO রেসপন্স মোডালিটি হিসেবে সেট করে অডিও গ্রহণ করতে পারেন। আউটপুটটি ২৪kHz এর নমুনা হার ব্যবহার করে।

পাইথন

# Test file: https://storage.googleapis.com/generativeai-downloads/data/16000.wav
# Install helpers for converting files: pip install librosa soundfile
import asyncio
import io
from pathlib import Path
import wave
from google import genai
from google.genai import types
import soundfile as sf
import librosa

client = genai.Client()

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

config = {
  "response_modalities": ["AUDIO"],
  "system_instruction": "You are a helpful assistant and answer in a friendly tone.",
}

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:

        buffer = io.BytesIO()
        y, sr = librosa.load("sample.wav", sr=16000)
        sf.write(buffer, y, sr, format='RAW', subtype='PCM_16')
        buffer.seek(0)
        audio_bytes = buffer.read()

        # If already in correct format, you can use this:
        # audio_bytes = Path("sample.pcm").read_bytes()

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

        wf = wave.open("audio.wav", "wb")
        wf.setnchannels(1)
        wf.setsampwidth(2)
        wf.setframerate(24000)  # Output is 24kHz

        async for response in 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())

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

// Test file: https://storage.googleapis.com/generativeai-downloads/data/16000.wav
import { GoogleGenAI, Modality } from '@google/genai';
import * as fs from "node:fs";
import pkg from 'wavefile';  // npm install wavefile
const { WaveFile } = pkg;

const ai = new GoogleGenAI({});
// WARNING: Do not use API keys in client-side (browser based) applications
// Consider using Ephemeral Tokens instead
// More information at: https://ai.google.dev/gemini-api/docs/ephemeral-tokens

// New native audio model:
const model = "gemini-2.5-flash-native-audio-preview-09-2025"

const config = {
  responseModalities: [Modality.AUDIO],
  systemInstruction: "You are a helpful assistant and answer in a friendly tone."
};

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

    // Combine audio data strings and save as wave file
    const combinedAudio = turns.reduce((acc, turn) => {
        if (turn.data) {
            const buffer = Buffer.from(turn.data, 'base64');
            const intArray = new Int16Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / Int16Array.BYTES_PER_ELEMENT);
            return acc.concat(Array.from(intArray));
        }
        return acc;
    }, []);

    const audioBuffer = new Int16Array(combinedAudio);

    const wf = new WaveFile();
    wf.fromScratch(1, 24000, '16', audioBuffer);  // output is 24kHz
    fs.writeFileSync('audio.wav', wf.toBuffer());

    session.close();
}

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

main();

এরপর কি?

  • ভয়েস অ্যাক্টিভিটি ডিটেকশন এবং নেটিভ অডিও বৈশিষ্ট্য সহ মূল ক্ষমতা এবং কনফিগারেশনের জন্য সম্পূর্ণ লাইভ এপিআই সক্ষমতা নির্দেশিকাটি পড়ুন।
  • টুল এবং ফাংশন কলিংয়ের সাথে লাইভ API কীভাবে সংহত করতে হয় তা শিখতে টুল ব্যবহারের নির্দেশিকাটি পড়ুন।
  • দীর্ঘমেয়াদী কথোপকথন পরিচালনার জন্য সেশন ব্যবস্থাপনা নির্দেশিকাটি পড়ুন।
  • ক্লায়েন্ট-টু-সার্ভার অ্যাপ্লিকেশনগুলিতে নিরাপদ প্রমাণীকরণের জন্য এফেমেরাল টোকেন নির্দেশিকাটি পড়ুন।
  • অন্তর্নিহিত WebSockets API সম্পর্কে আরও তথ্যের জন্য, WebSockets API রেফারেন্স দেখুন।