
मूर्ति से बात करें: मल्टी-मोडल ElevenAgents-चालित ऐप बनाना
- श्रेणी
- ElevenAPI
- तारीख
ElevenAgents React SDK v1.0: JavaScript और React SDK का नया आर्किटेक्चर, जिसमें डिटेल्ड हुक्स, वेब और React Native के लिए एक जैसा API, और एक स्थिर पब्लिक API है।
ElevenAgents JavaScript और React SDK का वर्शन 1.0.0 अब उपलब्ध है। यह रिलीज़ @elevenlabs/client, @elevenlabs/react, और @elevenlabs/react-native पैकेज का पूरी तरह से नया आर्किटेक्चर है, जिसमें रेंडर परफॉर्मेंस, वेब और React Native के लिए एक जैसा API, और एक स्थिर पब्लिक API पर फोकस किया गया है। यह एक बड़ा बदलाव है, लेकिन पुराना useConversation हुक अभी भी मौजूद है, और अपग्रेड को ऑटोमेट करने के लिए एक कोडिंग एजेंट स्किल भी उपलब्ध है।
तीन समस्याओं की वजह से यह रिलीज़ आई है।
React और React Native में अलग-अलग API, फीचर्स और कॉन्फ़िगरेशन ऑप्शन्स थे। कोड और जानकारी दोनों प्लेटफॉर्म्स पर ट्रांसफर नहीं हो पाती थी, और AI कोडिंग टूल्स अक्सर ऐसे API सजेस्ट करते थे जो सिर्फ एक ही प्लेटफॉर्म पर होते थे। React Native में WebSocket कनेक्शन मोड भी नहीं था।
अंदरूनी तौर पर, ऐसा इसलिए हुआ क्योंकि React Native SDK ने थर्ड-पार्टी React Native SDK को रैप किया था, न कि @elevenlabs/client पर बनाया था। फीचर्स और फिक्सेस दोनों जगह अलग-अलग भेजने पड़ते थे, जिससे दोनों प्लेटफॉर्म्स में फर्क बढ़ता गया।
कोई भी स्टेट चेंज (जैसे स्टेटस, मोड, म्यूट, वॉल्यूम) होने पर हर वो कंपोनेंट री-रेंडर होता था जो conversation स्टेट यूज़ करता था। सिर्फ जरूरत के हिस्से को सब्सक्राइब करने का तरीका नहीं था। अगर आपके कंपोनेंट को सिर्फ कनेक्शन स्टेटस चाहिए, तब भी म्यूट स्टेट बदलने पर री-रेंडर हो जाता था।
ऐसा इसलिए था क्योंकि SDK ने एक ही context provider में सारी conversation स्टेट रखी थी, जिसमें सिर्फ मोटे हुक्स और कॉलबैक्स ऑप्शन्स ऑब्जेक्ट्स के जरिए पास होते थे।
SDK को अपग्रेड करने पर आपके कोड के टूटने का रिस्क था। इंटरनल क्लासेज़ जैसे इनपुट, आउटपुट, और कनेक्शन पब्लिक API का हिस्सा थीं, और डेवलपर्स सीधे ब्राउज़र प्रिमिटिव्स जैसे conversation.output.gain.gain.value (वॉल्यूम के लिए) और conversation.input.analyser (ऑडियो विज़ुअलाइज़ेशन के लिए) पर निर्भर करते थे। कोई भी इंटरनल बदलाव इन एक्सेस पैटर्न्स को तोड़ सकता था।
हमारी तरफ से, इनहेरिटेंस-बेस्ड क्लास हायरार्की की वजह से इसे धीरे-धीरे ठीक करना मुश्किल था, इसलिए एक साफ ब्रेक जरूरी था।
@elevenlabs/react-native अब @elevenlabs/react को एक पतली प्लेटफॉर्म स्ट्रैटेजी लेयर के साथ री-एक्सपोर्ट करता है: अब सिर्फ 40 लाइन कोड, पहले हजार से ज्यादा थी। वही ConversationProvider, वही हुक्स, वही मेथड्स। वेब के लिए लिखा कोड React Native पर सिर्फ इम्पोर्ट पाथ बदलकर चलता है, जानकारी सीधे ट्रांसफर होती है, और AI कोडिंग टूल्स अब प्लेटफॉर्म-स्पेसिफिक API नहीं सजेस्ट करते।
अब छह नए हुक्स हैं, जो conversation स्टेट के अलग-अलग हिस्सों को सब्सक्राइब करते हैं। कंपोनेंट्स सिर्फ तब री-रेंडर होते हैं जब उनका डेटा बदलता है।
पहले जो स्टेटस इंडिकेटर हर स्टेट चेंज पर री-रेंडर होता था, अब सिर्फ कनेक्शन स्टेटस बदलने पर ही री-रेंडर होगा:
useConversation अभी भी हैपुराना useConversation हुक अभी भी मौजूद है और वही डेटा देता है: स्टेटस, मोड, म्यूट स्टेट, और सभी कंट्रोल मेथड्स। यह ऊपर बताए गए ग्रैन्युलर हुक्स का एक आसान रैपर है। मौजूदा यूज़र्स पहले ConversationProvider + useConversation का इस्तेमाल कर सकते हैं, फिर जहां रेंडर परफॉर्मेंस जरूरी हो वहां धीरे-धीरे ग्रैन्युलर हुक्स अपना सकते हैं।
useConversationClientTool React कंपोनेंट्स को ऐसे टूल्स रजिस्टर करने देता है जिन्हें एजेंट चला सकता है। टूल्स कंपोनेंट लाइफसाइकल से जुड़े होते हैं: माउंट पर रजिस्टर, अनमाउंट पर अनरजिस्टर, और हमेशा लेटेस्ट क्लोजर वैल्यू यूज़ करते हैं।
यह तब काम आता है जब टूल के हैंडलर को कंपोनेंट स्टेट या प्रॉप्स चाहिए जो प्रोवाइडर लेवल पर उपलब्ध नहीं हैं।
इंटरनल क्लासेज़ (इनपुट, आउटपुट, wake lock) अब प्राइवेट हैं। पब्लिक API अब डॉक्युमेंटेड मेथड्स देता है, सीधे ब्राउज़र प्रिमिटिव्स नहीं:
setVolume({ volume }) अब conversation.output.gain.gain.value = vgetInputByteFrequencyData() अब conversation.input.analyser.getByteFrequencyData()setMicMuted(true) अब conversation.input.setMuted(true)इसका मतलब है कि ऑडियो इम्प्लीमेंटेशन को (जैसे ट्रांसपोर्ट लेयर बदलना) बिना यूज़र कोड तोड़े बदला जा सकता है।
ConversationProvider अब isMuted और onMutedChange प्रॉप्स एक्सेप्ट करता है ताकि बाहरी स्टेट मैनेजमेंट हो सके। यह म्यूट स्टेट को सेशन्स में बनाए रखने या ऐप-लेवल स्टेट के साथ सिंक करने के लिए काम आता है।
अगर ये प्रॉप्स नहीं दिए, तो म्यूट स्टेट पहले की तरह इंटरनली मैनेज होती है।
अब वॉइस कन्वर्सेशन डिफॉल्ट रूप से WebRTC और सिर्फ टेक्स्ट कन्वर्सेशन डिफॉल्ट रूप से WebSocket पर चलते हैं। ज्यादातर मामलों में connectionType मैन्युअली सेट करने की जरूरत नहीं है। अगर आपको कोई खास कनेक्शन टाइप चाहिए, तो आप उसे एक्सप्लिसिटली पास कर सकते हैं।
यह एक बड़ा बदलाव है, जिसके लिए मौजूदा इंटीग्रेशन में अपडेट्स जरूरी हैं। मुख्य बदलाव एक नजर में:
Conversation अब एक नेमस्पेस ऑब्जेक्ट और टाइप एलियास है, क्लास नहीं। instanceof चेक और सबक्लासिंग अब काम नहीं करेंगे।useConversation के लिए ConversationProvider एंसेस्टर जरूरी है।इनपुट और आउटपुट क्लासेज़ अब conversation इंस्टेंस पर डॉक्युमेंटेड मेथड्स से रिप्लेस हो गई हैं।ElevenLabsProvider को ConversationProvider से रिप्लेस किया गया है @elevenlabs/react-native में।सभी बड़े बदलावों की पूरी लिस्ट के लिए देखें changelog।
अपग्रेड को ऑटोमेट करने के लिए एक खास स्किल उपलब्ध है। यह स्किल आपकी मौजूदा इंटीग्रेशन पढ़ती है, जरूरी API बदलाव करती है, और इम्पोर्ट्स अपडेट करती है। यह माइग्रेशन का सारा मैकेनिकल काम संभालती है ConversationProvider, हटाए गए क्लास रेफरेंस को बदलना, और मेथड कॉल्स अपडेट करना।
यह स्किल खासकर बड़े कोडबेस के लिए फायदेमंद है, जहां माइग्रेशन कई फाइल्स में करना हो।
SDK डॉक्स को नए API के हिसाब से अपडेट किया गया है:
अपने प्लेटफॉर्म के लिए पैकेज इंस्टॉल करें:
@elevenlabs/react सब कुछ री-एक्सपोर्ट करता है @elevenlabs/client से, तो दोनों इंस्टॉल करने की जरूरत नहीं है।
अपने ऐप को ConversationProvider में रैप करें, हुक्स से सेशन शुरू करें, और पूरी API रेफरेंस के लिए देखें SDK डॉक्स।
और जैसा कि हमने शुरुआत में बताया, अपग्रेड को ऑटोमेट करने के लिए कोडिंग एजेंट स्किल उपलब्ध है:
अगर आपको कोई समस्या आए या सुझाव हो, तो GitHub पर इश्यू खोलें। SDK को एक्टिवली मेंटेन किया जाता है और हम हर रिपोर्ट देखते हैं।



