यह एक पूरी गाइड है. इसमें लाइव एपीआई के साथ उपलब्ध सुविधाओं और कॉन्फ़िगरेशन के बारे में बताया गया है. लाइव एपीआई के बारे में खास जानकारी और इस्तेमाल के सामान्य उदाहरणों के लिए सैंपल कोड देखने के लिए, लाइव एपीआई का इस्तेमाल शुरू करना पेज पर जाएं.
शुरू करने से पहले
- बुनियादी कॉन्सेप्ट के बारे में जानें: अगर आपने अब तक ऐसा नहीं किया है, तो सबसे पहले Live API का इस्तेमाल शुरू करना पेज पढ़ें. इससे आपको Live API के बुनियादी सिद्धांतों के बारे में पता चलेगा. साथ ही, यह भी पता चलेगा कि यह कैसे काम करता है. इसके अलावा, आपको अलग-अलग मॉडल और ऑडियो जनरेट करने के उनके तरीकों (नेटिव ऑडियो या हाफ़-कैस्केड) के बीच का अंतर भी पता चलेगा.
- AI Studio में Live API आज़माएं: ऐप्लिकेशन बनाना शुरू करने से पहले, Google AI Studio में Live API आज़माएं. इससे आपको मदद मिल सकती है. Google AI Studio में Live API का इस्तेमाल करने के लिए, स्ट्रीम करें को चुनें.
कनेक्शन सेट अप करना
यहां दिए गए उदाहरण में, एपीआई पासकोड की मदद से कनेक्शन बनाने का तरीका बताया गया है:
Python
import asyncio
from google import genai
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:
print("Session started")
if __name__ == "__main__":
asyncio.run(main())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({});
const model = 'gemini-live-2.5-flash-preview';
const config = { responseModalities: [Modality.TEXT] };
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,
});
// Send content...
session.close();
}
main();
इंटरैक्शन के तरीके
यहां दिए गए सेक्शन में, Live API में उपलब्ध अलग-अलग इनपुट और आउटपुट मोड के उदाहरण और उनसे जुड़ी जानकारी दी गई है.
मैसेज भेजना और पाना
मैसेज भेजने और पाने का तरीका यहां बताया गया है:
Python
import asyncio
from google import genai
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:
message = "Hello, how are you?"
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())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
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,
});
const inputTurns = 'Hello how are you?';
session.sendClientContent({ turns: inputTurns });
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();
कॉन्टेंट में धीरे-धीरे किए जाने वाले अपडेट
टेक्स्ट इनपुट भेजने, सेशन का कॉन्टेक्स्ट सेट अप करने या सेशन का कॉन्टेक्स्ट वापस लाने के लिए, इंक्रीमेंटल अपडेट का इस्तेमाल करें. छोटे कॉन्टेक्स्ट के लिए, इवेंट के सटीक क्रम को दिखाने के लिए, बारी-बारी से इंटरैक्शन भेजे जा सकते हैं:
Python
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)
JavaScript
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 })
बड़े कॉन्टेक्स्ट के लिए, यह सुझाव दिया जाता है कि एक मैसेज की खास जानकारी दी जाए, ताकि बाद की बातचीत के लिए कॉन्टेक्स्ट विंडो खाली हो जाए. सेशन के कॉन्टेक्स्ट को लोड करने के दूसरे तरीके के लिए, सेशन फिर से शुरू करना देखें.
ऑडियो भेजना और पाना
सबसे आम ऑडियो उदाहरण, ऑडियो-टू-ऑडियो, शुरुआत करने से जुड़ी गाइड में शामिल है.
यहां ऑडियो से टेक्स्ट में बदलने का एक उदाहरण दिया गया है. इसमें WAV फ़ाइल को पढ़ा जाता है, उसे सही फ़ॉर्मैट में भेजा जाता है, और टेक्स्ट आउटपुट मिलता है:
Python
# 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
from google import genai
from google.genai import types
import soundfile as sf
import librosa
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:
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")
)
async for response in session.receive():
if response.text is not None:
print(response.text)
if __name__ == "__main__":
asyncio.run(main())
JavaScript
// Test file: https://storage.googleapis.com/generativeai-downloads/data/16000.wav
// Install helpers for converting files: npm install wavefile
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-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.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);
}
}
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
यहां टेक्स्ट को ऑडियो में बदलने का एक उदाहरण दिया गया है.
जवाब देने के तरीके के तौर पर AUDIO
को सेट करके, ऑडियो सुना जा सकता है. इस उदाहरण में, मिले हुए डेटा को WAV फ़ाइल के तौर पर सेव किया गया है:
Python
import asyncio
import wave
from google import genai
client = genai.Client()
model = "gemini-live-2.5-flash-preview"
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 how are you?"
await session.send_client_content(
turns={"role": "user", "parts": [{"text": message}]}, turn_complete=True
)
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())
JavaScript
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-live-2.5-flash-preview';
const config = { responseModalities: [Modality.AUDIO] };
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();
// 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);
fs.writeFileSync('output.wav', wf.toBuffer());
session.close();
}
async function main() {
await live().catch((e) => console.error('got error', e));
}
main();
ऑडियो फ़ॉर्मैट
लाइव एपीआई में ऑडियो डेटा हमेशा रॉ, लिटिल-एंडियन, और 16-बिट पीसीएम होता है. ऑडियो आउटपुट के लिए, हमेशा 24 किलोहर्ट्ज़ का सैंपल रेट इस्तेमाल किया जाता है. इनपुट ऑडियो मूल रूप से 16 किलोहर्ट्ज़ का होता है. हालांकि, Live API ज़रूरत पड़ने पर इसे फिर से सैंपल करेगा. इसलिए, कोई भी सैंपल रेट भेजा जा सकता है. इनपुट ऑडियो की सैंपल दर बताने के लिए, ऑडियो वाले हर Blob का MIME टाइप, audio/pcm;rate=16000
जैसे किसी वैल्यू पर सेट करें.
ऑडियो ट्रांसक्रिप्शन
सेटअप कॉन्फ़िगरेशन में output_audio_transcription
भेजकर, मॉडल के ऑडियो आउटपुट को टेक्स्ट में बदलने की सुविधा चालू की जा सकती है. बोले जा रहे शब्दों को टेक्स्ट में बदलने के लिए, भाषा का अनुमान मॉडल के जवाब से लगाया जाता है.
Python
import asyncio
from google import genai
from google.genai import types
client = genai.Client()
model = "gemini-live-2.5-flash-preview"
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())
JavaScript
import { GoogleGenAI, Modality } from '@google/genai';
const ai = new GoogleGenAI({});
const model = 'gemini-live-2.5-flash-preview';
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
भेजें.
Python
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"],
"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())
JavaScript
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-live-2.5-flash-preview';
const config = {
responseModalities: [Modality.TEXT],
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.serverContent && turn.serverContent.outputTranscription) {
console.log("Transcription")
console.log(turn.serverContent.outputTranscription.text);
}
}
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();
ऑडियो और वीडियो स्ट्रीम करना
आवाज़ और भाषा बदलना
Live API के हर मॉडल में, अलग-अलग तरह की आवाज़ें होती हैं. हाफ़-कैस्केड, Puck, Charon, Kore, Fenrir, Aoede, Leda, Orus, और Zephyr के साथ काम करता है. नेटिव ऑडियो के साथ काम करने वाली भाषाओं की सूची काफ़ी लंबी है. यह सूची, टेक्स्ट-टू-स्पीच (टीटीएस) मॉडल की सूची के जैसी ही है. AI Studio में जाकर, सभी आवाज़ें सुनी जा सकती हैं.
आवाज़ तय करने के लिए, सेशन कॉन्फ़िगरेशन के हिस्से के तौर पर, speechConfig
ऑब्जेक्ट में आवाज़ का नाम सेट करें:
Python
config = {
"response_modalities": ["AUDIO"],
"speech_config": {
"voice_config": {"prebuilt_voice_config": {"voice_name": "Kore"}}
},
}
JavaScript
const config = {
responseModalities: [Modality.AUDIO],
speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } }
};
Live API, कई भाषाओं के साथ काम करता है.
भाषा बदलने के लिए, सेशन कॉन्फ़िगरेशन के हिस्से के तौर पर, speechConfig
ऑब्जेक्ट में भाषा कोड सेट करें:
Python
config = {
"response_modalities": ["AUDIO"],
"speech_config": {
"language_code": "de-DE"
}
}
JavaScript
const config = {
responseModalities: [Modality.AUDIO],
speechConfig: { languageCode: "de-DE" }
};
ऑडियो की नेटिव सुविधाएं
ये सुविधाएं सिर्फ़ नेटिव ऑडियो के साथ उपलब्ध हैं. मॉडल और ऑडियो जनरेशन चुनें में जाकर, नेटिव ऑडियो के बारे में ज़्यादा जानें.
साथ काम करने वाले टूल की खास जानकारी देखें.नेटिव ऑडियो आउटपुट इस्तेमाल करने का तरीका
नेटिव ऑडियो आउटपुट का इस्तेमाल करने के लिए, नेटिव ऑडियो मॉडल में से किसी एक को कॉन्फ़िगर करें और response_modalities
को AUDIO
पर सेट करें.
पूरे उदाहरण के लिए, ऑडियो भेजना और पाना लेख पढ़ें.
Python
model = "gemini-2.5-flash-preview-native-audio-dialog"
config = types.LiveConnectConfig(response_modalities=["AUDIO"])
async with client.aio.live.connect(model=model, config=config) as session:
# Send audio input and receive audio
JavaScript
const model = 'gemini-2.5-flash-preview-native-audio-dialog';
const config = { responseModalities: [Modality.AUDIO] };
async function main() {
const session = await ai.live.connect({
model: model,
config: config,
callbacks: ...,
});
// Send audio input and receive audio
session.close();
}
main();
अफ़ेक्टिव डायलॉग
इस सुविधा की मदद से, Gemini अपने जवाब देने के तरीके को इनपुट एक्सप्रेशन और टोन के हिसाब से बदल सकता है.
भावनाओं से जुड़े डायलॉग का इस्तेमाल करने के लिए, एपीआई वर्शन को v1alpha
पर सेट करें. साथ ही, सेटअप मैसेज में enable_affective_dialog
को true
पर सेट करें:
Python
client = genai.Client(http_options={"api_version": "v1alpha"})
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
enable_affective_dialog=True
)
JavaScript
const ai = new GoogleGenAI({ httpOptions: {"apiVersion": "v1alpha"} });
const config = {
responseModalities: [Modality.AUDIO],
enableAffectiveDialog: true
};
ध्यान दें कि फ़िलहाल, भावनाओं के साथ बातचीत करने की सुविधा सिर्फ़ नेटिव ऑडियो आउटपुट मॉडल के साथ काम करती है.
प्रोऐक्टिव ऑडियो
इस सुविधा के चालू होने पर, Gemini यह तय कर सकता है कि अगर कॉन्टेंट काम का नहीं है, तो जवाब न दिया जाए.
इसका इस्तेमाल करने के लिए, एपीआई वर्शन को v1alpha
पर सेट करें. साथ ही, सेटअप मैसेज में proactivity
फ़ील्ड को कॉन्फ़िगर करें और proactive_audio
को true
पर सेट करें:
Python
client = genai.Client(http_options={"api_version": "v1alpha"})
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
proactivity={'proactive_audio': True}
)
JavaScript
const ai = new GoogleGenAI({ httpOptions: {"apiVersion": "v1alpha"} });
const config = {
responseModalities: [Modality.AUDIO],
proactivity: { proactiveAudio: true }
}
ध्यान दें कि फ़िलहाल, प्रॉऐक्टिव ऑडियो की सुविधा सिर्फ़ नेटिव ऑडियो आउटपुट मॉडल के साथ काम करती है.
सोच-विचार करके, बिलकुल असली आवाज़ में जवाब देना
नेटिव ऑडियो आउटपुट में सोचने की क्षमता होती है. यह gemini-2.5-flash-exp-native-audio-thinking-dialog
मॉडल के ज़रिए उपलब्ध होती है.
पूरे उदाहरण के लिए, ऑडियो भेजना और पाना लेख पढ़ें.
Python
model = "gemini-2.5-flash-exp-native-audio-thinking-dialog"
config = types.LiveConnectConfig(response_modalities=["AUDIO"])
async with client.aio.live.connect(model=model, config=config) as session:
# Send audio input and receive audio
JavaScript
const model = 'gemini-2.5-flash-exp-native-audio-thinking-dialog';
const config = { responseModalities: [Modality.AUDIO] };
async function main() {
const session = await ai.live.connect({
model: model,
config: config,
callbacks: ...,
});
// Send audio input and receive audio
session.close();
}
main();
आवाज़ का पता लगाने की सुविधा (वीएडी)
आवाज़ की पहचान करने वाली सुविधा (वीएडी) की मदद से, मॉडल यह पहचान पाता है कि कोई व्यक्ति कब बोल रहा है. यह सुविधा, बातचीत को नैचुरल बनाने के लिए ज़रूरी है. इससे उपयोगकर्ता को मॉडल को किसी भी समय रोकने की अनुमति मिलती है.
जब VAD को किसी रुकावट का पता चलता है, तो जनरेट हो रहे कॉन्टेंट को रद्द कर दिया जाता है और उसे खारिज कर दिया जाता है. सिर्फ़ वह जानकारी सेशन के इतिहास में सेव की जाती है जो क्लाइंट को पहले ही भेजी जा चुकी है. इसके बाद, सर्वर BidiGenerateContentServerContent
मैसेज भेजकर, रुकावट की सूचना देता है.
इसके बाद, Gemini सर्वर फ़ंक्शन कॉल से जुड़े सभी अनुरोधों को खारिज कर देता है. साथ ही, रद्द किए गए कॉल के आईडी के साथ BidiGenerateContentServerContent
मैसेज भेजता है.
Python
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.
JavaScript
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.
}
}
ऑटोमैटिक वीएडी
डिफ़ॉल्ट रूप से, मॉडल लगातार ऑडियो इनपुट स्ट्रीम पर वीएडी की प्रोसेस अपने-आप करता है. वीएडी को सेटअप कॉन्फ़िगरेशन के realtimeInputConfig.automaticActivityDetection
फ़ील्ड की मदद से कॉन्फ़िगर किया जा सकता है.
अगर ऑडियो स्ट्रीम को एक सेकंड से ज़्यादा समय के लिए रोका जाता है (उदाहरण के लिए, क्योंकि उपयोगकर्ता ने माइक्रोफ़ोन बंद कर दिया है), तो audioStreamEnd
इवेंट भेजा जाना चाहिए, ताकि कैश किया गया कोई भी ऑडियो फ़्लश हो जाए. क्लाइंट, ऑडियो डेटा भेजना किसी भी समय फिर से शुरू कर सकता है.
Python
# 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())
JavaScript
// 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
की मदद से, एपीआई वीएडी के आधार पर ऑडियो का जवाब अपने-आप देगा. send_client_content
, मॉडल के कॉन्टेक्स्ट में मैसेज जोड़ता है. वहीं, send_realtime_input
को जवाब देने के लिए ऑप्टिमाइज़ किया जाता है. हालांकि, इससे जवाबों के क्रम पर असर पड़ सकता है.
वीएडी के अपने-आप कॉन्फ़िगर होने की सुविधा
वीएडी की गतिविधि को बेहतर तरीके से कंट्रोल करने के लिए, यहां दिए गए पैरामीटर कॉन्फ़िगर किए जा सकते हैं. ज़्यादा जानकारी के लिए, एपीआई रेफ़रंस देखें.
Python
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,
}
}
}
JavaScript
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,
}
}
};
अपने-आप वीएडी की सुविधा बंद करना
इसके अलावा, सेटअप मैसेज में realtimeInputConfig.automaticActivityDetection.disabled
को true
पर सेट करके, वीएडी की सुविधा को अपने-आप बंद किया जा सकता है. इस कॉन्फ़िगरेशन में, क्लाइंट की यह ज़िम्मेदारी होती है कि वह उपयोगकर्ता की आवाज़ का पता लगाए और सही समय पर activityStart
और activityEnd
मैसेज भेजे. इस कॉन्फ़िगरेशन में audioStreamEnd
नहीं भेजा जाता है. इसके बजाय, स्ट्रीम में किसी भी तरह की रुकावट को activityEnd
मैसेज से मार्क किया जाता है.
Python
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())
# ...
JavaScript
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 फ़ील्ड में देखी जा सकती है.
Python
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}")
JavaScript
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
फ़ील्ड सेट करके, इनपुट मीडिया के लिए मीडिया रिज़ॉल्यूशन तय किया जा सकता है:
Python
from google.genai import types
config = {
"response_modalities": ["AUDIO"],
"media_resolution": types.MediaResolution.MEDIA_RESOLUTION_LOW,
}
JavaScript
import { GoogleGenAI, Modality, MediaResolution } from '@google/genai';
const config = {
responseModalities: [Modality.TEXT],
mediaResolution: MediaResolution.MEDIA_RESOLUTION_LOW,
};
सीमाएं
अपना प्रोजेक्ट प्लान करते समय, Live API की इन सीमाओं को ध्यान में रखें.
जवाब देने के तरीके
सेशन कॉन्फ़िगरेशन में, हर सेशन के लिए सिर्फ़ एक जवाब मोड (TEXT
या AUDIO
) सेट किया जा सकता है. दोनों को सेट करने पर, कॉन्फ़िगरेशन से जुड़ी गड़बड़ी का मैसेज दिखता है. इसका मतलब है कि मॉडल को टेक्स्ट या ऑडियो, दोनों में से किसी एक के ज़रिए जवाब देने के लिए कॉन्फ़िगर किया जा सकता है. हालाँकि, एक ही सेशन में दोनों के ज़रिए जवाब देने के लिए कॉन्फ़िगर नहीं किया जा सकता.
क्लाइंट प्रमाणीकरण
Live API, डिफ़ॉल्ट रूप से सिर्फ़ सर्वर-टू-सर्वर पुष्टि करने की सुविधा देता है. अगर आपको क्लाइंट-टू-सर्वर अप्रोच का इस्तेमाल करके, Live API ऐप्लिकेशन लागू करना है, तो आपको सुरक्षा से जुड़े जोखिमों को कम करने के लिए, कुछ समय के लिए मान्य टोकन का इस्तेमाल करना होगा.
सत्र की अवधि
सिर्फ़ ऑडियो वाले सेशन 15 मिनट तक किए जा सकते हैं. वहीं, ऑडियो और वीडियो, दोनों वाले सेशन सिर्फ़ दो मिनट तक किए जा सकते हैं. हालांकि, सेशन की अवधि के दौरान असीमित एक्सटेंशन के लिए, अलग-अलग सेशन मैनेजमेंट तकनीकें कॉन्फ़िगर की जा सकती हैं.
कॉन्टेक्स्ट विंडो
किसी सेशन के लिए कॉन्टेक्स्ट विंडो की सीमा यह होती है:
- नेटिव ऑडियो आउटपुट मॉडल के लिए 128 हज़ार टोकन
- Live API के अन्य मॉडल के लिए 32 हज़ार टोकन
इस्तेमाल की जा सकने वाली भाषाएं
लाइव एपीआई, इन भाषाओं में काम करता है.
भाषा | 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 |
जिन भाषाओं पर तारे का निशान (*) है उनमें नेटिव ऑडियो की सुविधा उपलब्ध नहीं है.
आगे क्या करना है
- लाइव एपीआई का असरदार तरीके से इस्तेमाल करने के बारे में ज़रूरी जानकारी पाने के लिए, टूल का इस्तेमाल और सेशन मैनेजमेंट गाइड पढ़ें.
- Google AI Studio में, Live API को आज़माएं.
- Live API मॉडल के बारे में ज़्यादा जानने के लिए, मॉडल पेज पर Gemini 2.0 Flash Live और Gemini 2.5 Flash Native Audio देखें.
- Live API कुकबुक, Live API Tools कुकबुक, और Live API Get Started स्क्रिप्ट में दिए गए अन्य उदाहरण आज़माएं.