रीयलटाइम प्रदाता

ADK-Rust एक ही RealtimeModel इंटरफ़ेस के पीछे दो रीयलटाइम बैकएंड उपलब्ध कराता है, इसलिए कोई एप्लिकेशन दोनों की सुविधा दे सकता है और प्रति सत्र इनके बीच स्विच कर सकता है। यह पृष्ठ मॉडल, आवाज़ों, एंडपॉइंट, प्रमाणीकरण और चयन करने का तरीका शामिल करता है।

OpenAI रीयलटाइम (GA)

use adk_realtime::openai::OpenAIRealtimeModel;
use adk_realtime::model::BoxedModel;
use std::sync::Arc;

let model: BoxedModel = Arc::new(OpenAIRealtimeModel::new(
    std::env::var("OPENAI_API_KEY")?,
    "gpt-realtime-2.1",
));
मॉडलउपयोग
gpt-realtime-2.1वर्तमान उत्पादन speech-to-speech मॉडल और डिफ़ॉल्ट विकल्प।
gpt-realtime-translateसमर्पित अनुवाद इंटरप्रेटर (अलग endpoint; लाइव अनुवाद उदाहरण देखें)।
  • ट्रांसपोर्ट: WebSocket (openai सुविधा) या WebRTC (openai-webrtc, cmake आवश्यक)।
  • ऑडियो: इनपुट और आउटपुट में 24 kHz PCM16।
  • आवाज़ें: marin (एक प्राकृतिक GA आवाज़), alloy और अन्य; इन्हें RealtimeConfig::with_voice("marin") से सेट करें।
  • प्रमाणीकरण: OPENAI_API_KEY। कुंजी आपके सर्वर पर रहती है (ब्राउज़र में कभी नहीं)।

Gemini Live

use adk_realtime::gemini::{GeminiLiveBackend, GeminiRealtimeModel};

let model: BoxedModel = Arc::new(GeminiRealtimeModel::new(
    GeminiLiveBackend::studio(std::env::var("GEMINI_API_KEY")?),
    "models/gemini-3.1-flash-live-preview",
));
मॉडलउपयोग
models/gemini-3.1-flash-live-previewहाफ-कैस्केड लाइव मॉडल। टूल्स को विश्वसनीय रूप से कॉल करता है और वीडियो फ़्रेम स्वीकार करता है। डिफ़ॉल्ट विकल्प।
models/gemini-live-2.5-flash-native-audioनेटिव-ऑडियो मॉडल — सबसे स्वाभाविक आवाज़ वाला, और भावात्मक संवाद का समर्थन करने वाला मॉडल। टूल कॉलिंग में कमज़ोर।
models/gemini-3.5-live-translate-previewसमर्पित अनुवाद मॉडल (अनुवाद उदाहरण देखें)।
  • ट्रांसपोर्ट: WebSocket (gemini सुविधा, AI Studio) या Vertex AI Live (vertex-live, OAuth2 / ADC — Realtime Agents देखें)।
  • ऑडियो: 16 kHz PCM16 इनपुट, 24 kHz PCM16 आउटपुट
  • आवाज़ें: Kore और अन्य; with_voice("Kore")
  • प्रमाणीकरण: GEMINI_API_KEY (या GOOGLE_API_KEY)।

मॉडल के नाम endpoint के अनुसार अलग-अलग होते हैं। AI Studio (API-key) models/gemini-3.1-flash-live-preview जैसे नामों का उपयोग करता है; Vertex/Agent Platform अलग नामों का उपयोग करता है। crate का GeminiLiveBackend::studio(...), v1alpha endpoint के माध्यम से AI Studio को लक्षित करता है (और affective dialogue के लिए भी यही आवश्यक है)।

मॉडल चुनना

  • सामान्य आवाज़ + टूलgpt-realtime-2.1 या gemini-3.1-flash-live-preview। दोनों विश्वसनीय रूप से टूल कॉल करते हैं। निरंतर वीडियो के लिए Gemini अधिक उपयुक्त है।
  • सबसे प्राकृतिक आवाज़ / भावनाओं से अवगत → Gemini native-audio (gemini-live-2.5-flash-native-audio) के साथ affective dialogue — टूल-कॉलिंग की विश्वसनीयता में कुछ कमी के साथ।
  • तर्क-प्रधानgpt-realtime-2.1
  • अनुवाद → समर्पित translate मॉडल (अपने प्रोटोकॉल के साथ)।

प्रति सत्र प्रदाता चुनना

एप्लिकेशन आमतौर पर request से provider पढ़ते हैं और उससे मेल खाता model बनाते हैं। ऑडियो दरें अलग-अलग होती हैं, इसलिए उन्हें भी उजागर करें:

#[derive(Clone, Copy)]
enum Provider { OpenAI, Gemini }

impl Provider {
    fn audio_rates(self) -> (u32, u32) {   // (input, output)
        match self {
            Provider::OpenAI => (24_000, 24_000),
            Provider::Gemini => (16_000, 24_000),
        }
    }
}

fn build_model(p: Provider) -> anyhow::Result<(BoxedModel, &'static str)> {
    Ok(match p {
        Provider::OpenAI => (
            Arc::new(OpenAIRealtimeModel::new(std::env::var("OPENAI_API_KEY")?, "gpt-realtime-2.1")),
            "marin",
        ),
        Provider::Gemini => (
            Arc::new(GeminiRealtimeModel::new(
                GeminiLiveBackend::studio(std::env::var("GEMINI_API_KEY")?),
                "models/gemini-3.1-flash-live-preview",
            )),
            "Kore",
        ),
    })
}

उदाहरण इन सभी मानों को env vars (OPENAI_REALTIME_MODEL, GEMINI_REALTIME_MODEL) के साथ बदलने योग्य बनाते हैं, ताकि आप recompile किए बिना कोई मॉडल निर्धारित कर सकें।

क्षमता मैट्रिक्स

OpenAI gpt-realtime-2.1Gemini 3.1-flash-liveGemini native-audio
आवाज़ (ऑडियो इन/आउट)
लाइव ट्रांसक्रिप्ट
सर्वर-साइड टूल्स✅ (विश्वसनीय)✅ (विश्वसनीय)⚠️ (कमज़ोर)
वीडियो फ़्रेम✅ (इमेज आइटम)✅ (निरंतर)✅ (निरंतर)
भावात्मक संवाद

अगला: टूल →

डायग्नोस्टिक्स और पेलोड गोपनीयता

रीयलटाइम फ़्रेम में ट्रांसक्रिप्ट, टूल आर्ग्युमेंट, टूल परिणाम और पहचानकर्ता होते हैं। जब कोई पहचानी गई इवेंट डीस serialise होने में विफल होती है — प्रदाता स्कीमा में बदलाव — चेतावनी फ़ील्ड-सुरक्षित सारांश की रिपोर्ट करती है और फ़्रेम को रोक देती है:

फ़ील्डसामग्री
event_typeविफल हुआ प्रदाता इवेंट प्रकार
errorडिसीरियलाइज़ेशन त्रुटि
payload.bytesबाइट में फ़्रेम का आकार
payload.digestसमान विचलन की पुनरावृत्तियों का सहसंबंध करने के लिए संक्षिप्त डाइजेस्ट
payload.raw<redacted> जब तक पेलोड रिकॉर्डिंग को संकलित न किया गया हो

नोट: digest किसी run के भीतर की log lines को समूहित करता है। यह cryptographic digest नहीं है और विभिन्न प्रक्रियाओं में स्थिर नहीं रहता।

हाथ में frame होने पर drift का निदान करने के लिए, adk-realtime को record-payloads feature के साथ compile करें, जो पहले 300 bytes रिकॉर्ड करता है:

[dependencies]
adk-realtime = { version = "2.1.0", features = ["openai", "record-payloads"] }

यह feature डिफ़ॉल्ट रूप से बंद रहता है और प्रत्येक build के लिए जानबूझकर ऐसा चुना गया है, क्योंकि schema drift ठीक वही स्थिति है जब operators log collection और retention को बढ़ाते हैं।

रीयलटाइम प्रदाता - ADK-Rust दस्तावेज़ीकरण | ADK-Rust