रीयलटाइम प्रदाता
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(...),v1alphaendpoint के माध्यम से 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.1 | Gemini 3.1-flash-live | Gemini 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 को बढ़ाते हैं।