Gemini Live API की मदद से लाइव अनुवाद करने की सुविधा

Gemini Live API, gemini-3.5-live-translate-preview मॉडल का इस्तेमाल करके, 70 से ज़्यादा भाषाओं के बीच कम समय में, रीयल-टाइम में बातचीत का अनुवाद करने की सुविधा देता है. लाइव एपीआई को अनुवाद की सेटिंग के साथ कॉन्फ़िगर करके, एक भाषा में ऑडियो स्ट्रीम किया जा सकता है. साथ ही, अनुवादित ऑडियो आउटपुट को दूसरी भाषा में सुना जा सकता है. इससे, रीयल-टाइम में एक भाषा से दूसरी भाषा में आसानी से अनुवाद किया जा सकता है.

लाइव एजेंट बनाम लाइव ट्रांसलेशन

दोनों में Live API का इस्तेमाल किया जाता है. हालांकि, लाइव ट्रांसलेशन का मेंटल मॉडल, बातचीत के दौरान रीयल-टाइम में एजेंट के साथ होने वाले इंटरैक्शन से अलग होता है.

लाइव एजेंट लाइव ट्रांसलेशन
यह मॉडल, एक असिस्टेंट की तरह काम करता है. यह आपकी बात सुनता है, उसके बारे में सोचता है, और आपकी ओर से कार्रवाई करता है. यह मॉडल, इंटरप्रेटर के तौर पर काम करता है. यह रीयल-टाइम में अनुवाद करने वाली पाइपलाइन की तरह काम करता है.
इसमें बारी-बारी से इंटरैक्शन किया जाता है. यह रुकने, इरादे का पता लगाने, और अनचाही गतिविधियों को मैनेज करने पर निर्भर करता है. इसमें लगातार स्ट्रीम प्रोसेसिंग का इस्तेमाल किया जाता है. स्पीकर के बोलते समय ही अनुवाद करता है. इसके लिए, स्पीकर के रुकने का इंतज़ार नहीं करता.
टूल और एजेंट के साथ काम करता है. फ़ंक्शन कॉलिंग, Google Search, और निर्देशों के लिए नेटिव सपोर्ट. सिर्फ़ अनुवाद की सुविधा उपलब्ध है. इसमें कम समय में अनुवाद किया जाता है. इसमें टूल या निर्देशों का इस्तेमाल नहीं किया जा सकता.
पूरी तरह से मल्टीमोडल. इसमें टेक्स्ट, ऑडियो, वीडियो, और इमेज के तौर पर इनपुट दिया जा सकता है. ऑडियो पर पाबंदी है. इनपुट सिर्फ़ ऑडियो तक सीमित होता है, ताकि रीयल-टाइम में इंतज़ार के समय की थ्रेशोल्ड वैल्यू का सख्ती से पालन किया जा सके.
विस्तृत कॉन्फ़िगरेशन. इसमें जनरेशन, स्पीच, टूल, और सिस्टम के निर्देशों का इस्तेमाल किया जाता है. आसान कॉन्फ़िगरेशन. target_language_code और echo_target_language जैसे टॉगल सेट करें.

अपनी प्रोफ़ाइल बनाना शुरू करें

यहां दिए गए उदाहरणों में, क्लाइंट को शुरू करने और अनुवाद कॉन्फ़िगरेशन के साथ Live API से कनेक्ट करने का तरीका बताया गया है.

Python

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

client = genai.Client()

model = "gemini-3.5-live-translate-preview"
config = types.LiveConnectConfig(
    response_modalities=["AUDIO"],
    input_audio_transcription=types.AudioTranscriptionConfig(),
    output_audio_transcription=types.AudioTranscriptionConfig(),
    translation_config=types.TranslationConfig(
        target_language_code="pl",
        echo_target_language=True
    )
)

async def main():
    async with client.aio.live.connect(model=model, config=config) as session:
        print("Session started with translation")
        # Start receiving the translated audio stream
        async for response in session.receive():
            if response.server_content:
                if response.server_content.input_transcription:
                    print(f"Input transcript: {response.server_content.input_transcription.text}")
                if response.server_content.output_transcription:
                    print(f"Output transcript: {response.server_content.output_transcription.text}")
                if response.server_content.model_turn:
                    for part in response.server_content.model_turn.parts:
                        if part.inline_data:
                            audio_data = part.inline_data.data
                            # Play or process the translated audio chunk
                            print(f"Received audio chunk ({len(audio_data)} bytes)")

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

JavaScript

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

const ai = new GoogleGenAI({});
const model = 'gemini-3.5-live-translate-preview';
const config = {
    responseModalities: [Modality.AUDIO],
    inputAudioTranscription: {},
    outputAudioTranscription: {},
    translationConfig: {
        targetLanguageCode: 'pl',
        echoTargetLanguage: true
    }
};

async function main() {
  const session = await ai.live.connect({
    model: model,
    config: config,
    callbacks: {
      onopen: () => console.debug('Opened'),
      onmessage: (message) => {
        const content = message.serverContent;
        if (content?.inputTranscription) {
          console.log('Input transcript:', content.inputTranscription.text);
        }
        if (content?.outputTranscription) {
          console.log('Output transcript:', content.outputTranscription.text);
        }
        if (content?.modelTurn?.parts) {
          for (const part of content.modelTurn.parts) {
            if (part.inlineData) {
              const audioData = part.inlineData.data;
              // Play or process the translated audio chunk (base64 encoded)
              console.debug(`Received audio chunk (${audioData.length} bytes)`);
            }
          }
        }
      },
      onerror: (e) => console.debug('Error:', e.message),
      onclose: (e) => console.debug('Close:', e.reason),
    },
  });

  console.debug("Session started with translation");
}

main();

WebSockets

const API_KEY = "YOUR_API_KEY";
const MODEL_NAME = "gemini-3.5-live-translate-preview";
const WS_URL = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent?key=${API_KEY}`;

const websocket = new WebSocket(WS_URL);

websocket.onopen = () => {
  console.log('WebSocket Connected');

  const setupMessage = {
    setup: {
      model: `models/${MODEL_NAME}`,
      generationConfig: {
        responseModalities: ['AUDIO'],
        inputAudioTranscription: {},
        outputAudioTranscription: {},
        translationConfig: {
          targetLanguageCode: 'pl',
          echoTargetLanguage: true
        }
      }
    }
  };
  websocket.send(JSON.stringify(setupMessage));
};

websocket.onmessage = (event) => {
  const response = JSON.parse(event.data);
  if (response.serverContent) {
    const content = response.serverContent;
    if (content.inputTranscription) {
      console.log('Input transcript:', content.inputTranscription.text, `(${content.inputTranscription.languageCode})`);
    }
    if (content.outputTranscription) {
      console.log('Output transcript:', content.outputTranscription.text, `(${content.outputTranscription.languageCode})`);
    }
    if (content.modelTurn?.parts) {
      for (const part of content.modelTurn.parts) {
        if (part.inlineData) {
          const audioData = part.inlineData.data;
          // Play or process the translated audio chunk (base64 encoded)
          console.debug(`Received audio chunk (${audioData.length} bytes)`);
        }
      }
    }
  }
};

ऑडियो भेजना

अनुवाद के लिए बोले गए शब्दों को स्ट्रीम करने के लिए, रॉ, लिटिल-एंडियन, 16-बिट पीसीएम ऑडियो भेजा जाता है.

  • इनपुट ऑडियो फ़ॉर्मैट: रॉ 16-बिट पीसीएम, 16 किलोहर्ट्ज़ पर (मोनो, लिटिल-एंडियन).
  • आउटपुट ऑडियो फ़ॉर्मैट: रॉ 16-बिट पीसीएम, 24 किलोहर्ट्ज़ पर (मोनो, लिटिल-एंडियन).
  • चंक का साइज़ और इंतज़ार का समय: ऑडियो को 100 मि॰से॰ के चंक में भेजें.

यहां दिए गए उदाहरणों में, सेशन में ऑडियो के छोटे-छोटे हिस्से भेजने का तरीका बताया गया है.

Python

# Assuming 'chunk' is your raw PCM audio bytes
await session.send_realtime_input(
    audio=types.Blob(
        data=chunk,
        mime_type="audio/pcm;rate=16000"
    )
)

JavaScript

// Assuming 'chunk' is a Buffer of raw PCM audio
session.sendRealtimeInput({
  audio: {
    data: chunk.toString('base64'),
    mimeType: 'audio/pcm;rate=16000'
  }
});

WebSockets

// Assuming 'chunk' is a Buffer of raw PCM audio
function sendAudioChunk(chunk) {
  if (websocket.readyState === WebSocket.OPEN) {
    const audioMessage = {
      realtimeInput: {
        audio: {
          data: chunk.toString('base64'),
          mimeType: 'audio/pcm;rate=16000'
        }
      }
    };
    websocket.send(JSON.stringify(audioMessage));
  }
}

कॉन्फ़िगरेशन

अनुवाद की सुविधा चालू करने के लिए, आपको सेशन सेटअप के दौरान generationConfig में translationConfig की जानकारी देनी होगी.

सेटअप मैसेज कॉन्फ़िगरेशन

ट्रांसक्रिप्ट की सुविधा चालू करने के लिए, generationConfig इन फ़ील्ड के साथ काम करता है:

  • inputAudioTranscription: यह एक ऐसा ऑब्जेक्ट होता है जो मौजूद होने पर, मॉडल को इनपुट ऑडियो की टेक्स्ट ट्रांसक्रिप्ट भेजने की सुविधा देता है.
  • outputAudioTranscription: यह एक ऐसा ऑब्जेक्ट है जो मौजूद होने पर, मॉडल को आउटपुट (अनुवादित) ऑडियो की टेक्स्ट ट्रांसक्रिप्ट भेजने की सुविधा देता है.

translationConfig इन फ़ील्ड के साथ काम करता है:

  • targetLanguageCode: यह उस भाषा का BCP-47 भाषा कोड होता है जिसमें आपको मॉडल से अनुवाद कराना है. उदाहरण के लिए, पॉलिश भाषा के लिए "pl" और स्पैनिश भाषा के लिए "es". डिफ़ॉल्ट रूप से, यह "en" पर सेट होता है.
  • echoTargetLanguage: यह एक बूलियन वैल्यू है. इससे पता चलता है कि टारगेट की भाषा में मौजूद इनपुट ऑडियो को कैसे हैंडल किया जाना चाहिए. अगर इसे true पर सेट किया जाता है, तो मॉडल, टारगेट की भाषा में मौजूद इनपुट ऑडियो को दोहराएगा. अगर इसे false पर सेट किया जाता है, तो मॉडल, टारगेट की भाषा में मौजूद इनपुट ऑडियो को दोहराएगा नहीं. इसकी डिफ़ॉल्ट वैल्यू false होती है.

यहां सेटअप मैसेज के स्ट्रक्चर का उदाहरण दिया गया है:

"setup": {
    "model": "models/gemini-3.5-live-translate-preview",
    "generationConfig": {
      "responseModalities": [
        "AUDIO"
      ],
      "inputAudioTranscription": {},
      "outputAudioTranscription": {},
      "translationConfig": {
        "targetLanguageCode": "pl",
        "echoTargetLanguage": true
      }
    }
}

क्लाइंट-साइड ऐप्लिकेशन के लिए कुछ समय के लिए मान्य टोकन

क्लाइंट-टू-सर्वर ऐप्लिकेशन के लिए, अपनी एपीआई कुंजी को ज़ाहिर होने से बचाने के लिए, कुछ समय के लिए मान्य टोकन का इस्तेमाल किया जा सकता है. फ़िलहाल, यह सुविधा v1alpha में है.

लाइव अनुवाद की सुविधा के साथ कुछ समय के लिए मान्य टोकन का इस्तेमाल करते समय:

  1. आपको v1alpha एंडपॉइंट का इस्तेमाल करना होगा.
  2. कॉन्फ़िगरेशन लॉक करना: डिफ़ॉल्ट रूप से, आपको अपने सर्वर पर टोकन बनाने से जुड़ी पाबंदियों में translationConfig की जानकारी देनी चाहिए. इससे यह पक्का होता है कि अनुवाद का कॉन्फ़िगरेशन लॉक है और क्लाइंट इसमें कोई बदलाव नहीं कर सकता.
  3. कॉन्फ़िगरेशन अनलॉक करना: अगर आपको क्लाइंट-साइड पर translationConfig सेट करने की सुविधा चाहिए (उदाहरण के लिए, किसी उपयोगकर्ता को अपनी टारगेट भाषा चुनने की अनुमति देने के लिए), तो आपको टोकन बनाने के अनुरोध से इसे हटाना होगा. इसके बजाय, "lock_additional_fields": [] सेट करें. इससे translationConfig को क्लाइंट-साइड पर सेट करने की सुविधा अनलॉक हो जाएगी.

समयसीमा वाला टोकन बनाना

यहां दिए गए उदाहरणों में, अनुवाद से जुड़ी पाबंदियों के साथ कुछ समय के लिए मान्य टोकन बनाने का तरीका बताया गया है.

Python

import datetime
from google import genai

now = datetime.datetime.now(tz=datetime.timezone.utc)

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

token = client.auth_tokens.create(
    config = {
        'uses': 1,
        'expire_time': now + datetime.timedelta(minutes=30),
        'live_connect_constraints': {
            'model': 'gemini-3.5-live-translate-preview',
            'config': {
                'translation_config': {
                    'target_language_code': 'pl',
                    'echo_target_language': True
                }
            }
        },
        'http_options': {'api_version': 'v1alpha'},
    }
)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});
const expireTime = new Date(Date.now() + 30 * 60 * 1000).toISOString();

const token = await client.authTokens.create({
    config: {
        uses: 1,
        expireTime: expireTime,
        liveConnectConstraints: {
            model: 'gemini-3.5-live-translate-preview',
            config: {
                responseModalities: ['AUDIO'],
                inputAudioTranscription: {},
                outputAudioTranscription: {},
                translationConfig: {
                    targetLanguageCode: 'pl',
                    echoTargetLanguage: true
                }
            }
        },
        httpOptions: {
            apiVersion: 'v1alpha'
        }
    },
});

सीमाएं

  • इनपुट मोड: अनुवाद के लिए, सिर्फ़ ऑडियो इनपुट का इस्तेमाल किया जा सकता है. टेक्स्ट डालने की सुविधा उपलब्ध नहीं है.
  • आवाज़ की नकल: आवाज़ की नकल में अंतर हो सकता है. लंबे समय तक रुकने के बाद, आवाज़ें बदल सकती हैं. साथ ही, बातचीत की शुरुआत के आधार पर गलत लिंग असाइन किया जा सकता है. इसके अलावा, एक साथ कई लोगों के तेज़ी से बोलने पर, आवाज़ें एक ही आवाज़ पर अटक सकती हैं.
  • अपने-आप भाषा पहचानने की सुविधा: इस सुविधा को तेज़ लहजे, मिलती-जुलती भाषाओं (जैसे, स्पैनिश बनाम पॉर्चुगीज़) या तेज़ी से भाषा बदलने में मुश्किल होती है. ध्यान दें: इससे सिर्फ़ इनपुट ट्रांसक्रिप्ट पर असर पड़ना चाहिए. भाषा कोड और फ़ाइनल अनुवाद अब भी सटीक होना चाहिए.
  • बैकग्राउंड ऑडियो: मॉडल को इस तरह से डिज़ाइन किया गया है कि वह आवाज़ को साफ़ तौर पर सुनाने के लिए, शोर और संगीत को फ़िल्टर कर सके. हालांकि, ऐसा हो सकता है कि बैकग्राउंड के सभी ऑडियो को अनदेखा न किया जाए.
  • टारगेट की गई भाषा में गूंज: जब echoTargetLanguage: true चालू होता है, तो बैकग्राउंड के शोर या संगीत की वजह से, अनुवाद किए गए ऑडियो में गड़बड़ियां हो सकती हैं. ऐसा तब होता है, जब इनपुट ऑडियो पहले से ही टारगेट की गई भाषा में हो.

इस्तेमाल की जा सकने वाली भाषाएं

लाइव अनुवाद की सुविधा, इन भाषाओं में उपलब्ध है.

भाषा BCP-47 कोड भाषा BCP-47 कोड
अफ़्रीकान्स af कज़ाक़ kk
आकान ak ख्मेर कि॰मी॰
अल्बेनियन sq किनयारवांडा rw
अमहैरिक am कोरियन ko
अरबी ar लाओ lo
आर्मीनियन hy लातवियन lv
अज़रबैजानी az लिथुएनियन lt
बॉस्क eu मैसेडोनियन mk
बेलारूसी be मलय ms
बांग्ला bn मलयालम ml
बल्गैरियन bg मराठी mr
बर्मी (म्यांमार) my मंगोलियन mn
कैटलैन ca नेपाली ne
चाइनीज़ (सिंप्लिफ़ाइड) zh-Hans नॉर्वीजन no, nb
चाइनीज़ (ट्रेडिशनल) zh-Hant फ़ारसी fa
क्रोएशियन घंटा पोलिश pl
चेक cs पॉर्चुगीज़ (ब्राज़ील) pt-BR
डैनिश da पॉर्चगीज़ (पुर्तगाल) pt-PT
डच nl पंजाबी pa
अंग्रेज़ी en रोमानियन ro
एस्टोनियन et रूसी ru
फ़िलिपीनी fil सर्बियन sr
फ़िनिश fi सिंधी sd
फ़्रांसीसी fr सिंहला si
गैलिशियन gl स्लोवाक sk
जॉर्जियन ka स्लोवेनियन sl
जर्मन de स्पैनिश es
ग्रीक el सूडानीज़ su
गुजराती gu स्वाहिली sw
हौसा ha स्वीडिश sv
हिब्रू वह तमिल ta
हिन्दी hi तेलुगु te
हंगेरियन hu थाई th
आइसलैंडिक है टर्किश tr
इंडोनेशियन आईडी यूक्रेनियन uk
इटैलियन it उर्दू ur
जापानी ja उज़्बेक uz
जावानीज़ jv वियतनामी vi
कन्नड़ kn ज़ुलू zu

आगे क्या करना है