रियलटाइम प्रदाता
ADK-Rust एक ही RealtimeModel इंटरफ़ेस के पीछे दो रियलटाइम बैकएंड्स का समर्थन करता है,
ताकि एक एप्लिकेशन दोनों की पेशकश कर सके और प्रति session स्विच कर सके। यह पेज
models, voices, endpoints, auth, और चयन करने के तरीके को कवर करता है।
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", // or "gpt-realtime-2" (reasoning)
));
| मॉडल | उपयोग |
|---|---|
gpt-realtime | GA speech-to-speech model। तेज, मजबूत tool use। डिफ़ॉल्ट विकल्प। |
gpt-realtime-2 | Reasoning variant — जटिल बहु-चरणीय requests के लिए बेहतर। |
gpt-realtime-translate | समर्पित अनुवाद दुभाषिया (अलग endpoint; लाइव अनुवाद उदाहरण देखें)। |
- ट्रांसपोर्ट: WebSocket (
openaifeature) या WebRTC (openai-webrtc, needscmake). - ऑडियो: 24 kHz PCM16 in और out.
- वॉइसेज़:
marin(एक प्राकृतिक GA voice),alloy, और अन्य; इसेRealtimeConfig::with_voice("marin")के साथ सेट करें। - Auth:
OPENAI_API_KEY. की आपके server पर रहती है (कभी भी browser पर नहीं).
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-2.5-flash-native-audio-preview-12-2025 | नेटिव-ऑडियो मॉडल — सबसे प्राकृतिक आवाज़, और वही जो भावात्मक संवाद का समर्थन करता है। टूल कॉलिंग कमज़ोर है। |
models/gemini-3.5-live-translate-preview | समर्पित अनुवाद मॉडल (देखें अनुवाद उदाहरण). |
- ट्रांसपोर्ट: WebSocket (
geminiसुविधा, AI Studio) या Vertex AI Live (vertex-live, OAuth2 / ADC — देखें Realtime Agents). - ऑडियो: 16 kHz PCM16 in, 24 kHz PCM16 out.
- वॉयस:
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 अलग नामों का उपयोग करता है। क्रेट काGeminiLiveBackend::studio(...)AI Studio कोv1alphaendpoint के माध्यम से लक्षित करता है (यही वह भी है जिसकी affective dialogue को आवश्यकता होती है)।
मॉडल चुनना
- सामान्य वॉयस + टूल्स →
gpt-realtimeयाgemini-3.1-flash-live-preview। दोनों भरोसेमंद तरीके से tools कॉल करते हैं। Gemini continuous video के लिए बेहतर विकल्प है। - सबसे प्राकृतिक वॉयस / भावना-सचेत → Gemini native-audio
(
gemini-2.5-flash-native-audio-*) के साथ affective dialogue — हालांकि इससे tool-calling की विश्वसनीयता कुछ कम हो सकती है। - रीज़निंग-भारी →
gpt-realtime-2. - अनुवाद → समर्पित translate models (अपना protocol)।
प्रति session provider चुनना
Applications आम तौर पर request से provider पढ़ते हैं और मिलान करने वाला model बनाते हैं। audio rates अलग होती हैं, इसलिए उन्हें भी expose करें:
#[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")),
"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) के साथ overridable बनाते हैं ताकि आप बिना
recompiling किए model pin कर सकें।
क्षमता matrix
OpenAI gpt-realtime | Gemini 3.1-flash-live | Gemini native-audio | |
|---|---|---|---|
| आवाज़ (ऑडियो इन/आउट) | ✅ | ✅ | ✅ |
| लाइव प्रतिलिपियाँ | ✅ | ✅ | ✅ |
| सर्वर-पक्षी टूल्स | ✅ (विश्वसनीय) | ✅ (विश्वसनीय) | ⚠️ (कमज़ोर) |
| वीडियो फ़्रेम | ✅ (छवि आइटम) | ✅ (निरंतर) | ✅ (निरंतर) |
| भावात्मक संवाद | ❌ | ❌ | ✅ |
अगला: टूल्स →
डायग्नोस्टिक्स और पेलोड गोपनीयता
रीयलटाइम फ़्रेम्स में ट्रांसक्रिप्ट, टूल आर्ग्युमेंट्स, टूल परिणाम, और पहचानकर्ता होते हैं। जब कोई पहचाना गया इवेंट deserialize होने में विफल होता है — provider schema drift — तो चेतावनी एक field-safe सारांश रिपोर्ट करती है और फ़्रेम को रोक देती है:
| फ़ील्ड | सामग्री |
|---|---|
event_type | विफल हुआ प्रदाता इवेंट प्रकार |
error | डिसीरियलाइज़ेशन त्रुटि |
payload.bytes | बाइट्स में फ़्रेम आकार |
payload.digest | एक छोटा डाइजेस्ट, समान ड्रिफ्ट की पुनरावृत्तियों को सहसंबद्ध करने के लिए |
payload.raw | <redacted> जब तक payload recording संकलित न हो |
नोट: digest एक run के भीतर log lines को समूहित करता है। यह cryptographic digest नहीं है और processes के बीच स्थिर नहीं रहता।
frame in hand के साथ drift का निदान करने के लिए, adk-realtime को
record-payloads feature के साथ compile करें, जो पहले 300 bytes रिकॉर्ड करता है:
[dependencies]
adk-realtime = { version = "2.0.0", features = ["openai", "record-payloads"] }
यह feature डिफ़ॉल्ट रूप से बंद रहता है और प्रति build एक जानबूझकर किया गया विकल्प है, क्योंकि schema drift वही समय होता है जब operators log collection और retention को बढ़ाते हैं।