Open in
OpenAI Realtime ક્લાયન્ટ્સ સાથે ThunderPhone નો ઉપયોગ કરો
સાચવેલા એજન્ટ અથવા inline સેશન કન્ફિગરેશનનો ઉપયોગ કરીને OpenAI Realtime-સુસંગત સર્વર ક્લાયન્ટને ThunderPhone તરફ નિર્દેશિત કરો.
ThunderPhone OpenAI Realtime ઇવેન્ટ મોડેલનો કેન્દ્રિત ઉપસેટ અમલમાં મૂકે છે. હાલનો સર્વર-સાઇડ ક્લાયન્ટ ThunderPhone વૉઇસ એજન્ટનો ઉપયોગ કરતી વખતે તેનો WebSocket, ઑડિયો, સેશન અને રિસ્પોન્સ ઇવેન્ટ પ્રવાહ જાળવી શકે છે.
કનેક્ટ કરતા પહેલાં
તમને ThunderPhone સંસ્થાની સિક્રેટ API કી અને WebSocket ખોલી શકે એવો સર્વર રનટાઇમ જોઈએ. બ્રાઉઝર કોડમાંથી કનેક્ટ કરશો નહીં અથવા બ્રાઉઝર સામે કી જાહેર કરશો નહીં. સેવ કરેલા એજન્ટનો ઉપયોગ કરવા માટે, પહેલાં તેને ડિપ્લોય કરો અને તેનો આંકડાકીય એજન્ટ ID કૉપી કરો.
આ સાથે કનેક્ટ કરો:
wss://api.thunderphone.com/v1/realtimeતમારા સર્વર પરથી WebSocket અપગ્રેડને પ્રમાણિત કરો:
Authorization: Bearer sk_live_YOUR_API_KEYહેન્ડશેક હેડર્સ સેટ ન કરી શકતા ક્લાયન્ટ માટે ક્વેરી-સ્ટ્રિંગ પ્રમાણીકરણ ઉપલબ્ધ છે, પરંતુ URLs લૉગ્સમાં વધુ સરળતાથી લીક થઈ શકે છે.
કૉન્ફિગરેશનની માલિકી કોણ ધરાવે છે તે પસંદ કરો
| મોડ | આ સાથે કનેક્ટ કરો | કૉન્ફિગરેશન સ્રોત |
|---|---|---|
| સેવ કરેલો એજન્ટ | ?agent_id=12 | ડિપ્લોય કરેલ prompt, વૉઇસ, પ્રોડક્ટ, ભાષાઓ, નૉલેજ અને સુસંગત સર્વર-રન ટૂલ્સ |
| ઇનલાઇન | કોઈ agent_id નહીં | તમારા ક્લાયન્ટ તરફથી પ્રથમ સ્વીકૃત session.update |
સેવ કરેલો એજન્ટ
ડિપ્લોય કરેલા એજન્ટ ID સાથે કનેક્ટ કરો:
wss://api.thunderphone.com/v1/realtime?agent_id=12સૉકેટ કનેક્ટ થાય ત્યારે એજન્ટ શરૂ થાય છે. તેનો અભિવાદન ઉપલબ્ધ રહે છે,
પરંતુ Realtime તેની બોલીને કરાતી શાંતિ ચકાસણીઓ અક્ષમ કરે છે અને transfer_call
તથા send_keypad_input છોડી દે છે. અન્ય સુસંગત ટૂલ્સ ThunderPhone પર ચાલે છે. આ મોડ માટે
ઇનલાઇન સૂચનાઓ અથવા ક્લાયન્ટ-એક્ઝિક્યુટેડ ટૂલ્સ મોકલશો નહીં.
એજન્ટ શરૂ થાય તે પહેલાં input_audio_format,
output_audio_format, input_rate, અને output_rate ક્વેરી પેરામીટર્સથી વાયર ઑડિયો સેટ કરો. તમે
કનેક્શન પછી સેવ કરેલું કૉન્ફિગરેશન અથવા ઑડિયો ફૉર્મેટ્સ બદલી શકતા નથી.
ઇનલાઇન સેશન
agent_id વિના, session.created ની રાહ જુઓ, પછી session.update મોકલો:
{
"type": "session.update",
"session": {
"type": "realtime",
"instructions": "Answer questions clearly and keep responses brief.",
"audio": {
"input": {
"format": { "type": "audio/pcm", "rate": 24000 }
},
"output": {
"format": { "type": "audio/pcm", "rate": 24000 },
"voice": "olivia"
}
},
"config": {
"product": "bolt"
}
}
}પ્રથમ સ્વીકૃત અપડેટ કૉલને પ્રોવિઝન કરે છે. session.updated નો અર્થ છે કે
સેશન સક્રિય છે. તે પછી સૂચનાઓ, વૉઇસ, પ્રોડક્ટ, ટૂલ્સ અને ઑડિયો ફૉર્મેટ્સ
બદલી શકાતા નથી.
ઇનલાઇન સેશન્સમાં કોઈ સ્વચાલિત અભિવાદન અથવા બોલીને કરાતી શાંતિ ચકાસણીઓ નથી. એજન્ટને
પહેલાં બોલાવવા માટે, સિસ્ટમ અથવા યુઝર મેસેજ ઉમેરો અને
response.create મોકલો. સંપૂર્ણપણે નિષ્ક્રિય સેશન પણ પ્લેટફૉર્મની
મૂક કૉલ મર્યાદા પર સમાપ્ત થાય છે, જે ડિફૉલ્ટરૂપે 600 સેકન્ડ છે.
સત્તાવાર OpenAI SDK નો ઉપયોગ કરો
/v1 પર સમાપ્ત થતો WebSocket base URL પાસ કરો; SDK /realtime ઉમેરે છે. model મૂલ્ય સુસંગતતા નામ છે અને ThunderPhone પ્રોડક્ટ પસંદ કરતું નથી. પ્રોડક્ટને સેશન કૉન્ફિગરેશનમાં અથવા સેવ કરેલા એજન્ટમાં પસંદ કરો.
આ કનેક્શન તપાસ ઇનલાઇન Bolt સેશન બનાવે છે, પ્રથમ session.updated સુધી ઇવેન્ટ્સ પ્રિન્ટ કરે છે અને પછી બંધ થાય છે. ઑડિયો સ્ટ્રીમ કરવા માટે ન્યૂનતમ Python ક્લાયન્ટ નો ઉપયોગ કરો.
import asyncio
import os
from openai import AsyncOpenAI
async def main():
client = AsyncOpenAI(
api_key=os.environ["THUNDERPHONE_API_KEY"],
websocket_base_url="wss://api.thunderphone.com/v1",
)
async with client.realtime.connect(
model="thunderphone-realtime"
) as connection:
await connection.session.update(session={
"type": "realtime",
"instructions": "Listen to the caller and help them complete the call.",
"config": {"product": "bolt"},
})
async for event in connection:
print(event.type)
if event.type == "session.updated":
break
if __name__ == "__main__":
asyncio.run(main())ઇનપુટ-ઑડિયો ઉમેરવા, રિસ્પોન્સ ઑડિયો ડેલ્ટા, અવરોધો, ફંક્શન કૉલ, ભૂલો અને સોકેટને સ્વચ્છ રીતે બંધ કરવા માટેની તમારી હાલની હેન્ડલિંગ જાળવો. ઇનલાઇન કસ્ટમ ફંક્શન્સ તમારા ક્લાયન્ટમાં ચાલે છે; તેમના પરિણામો Realtime પ્રોટોકોલ દ્વારા પરત કરો. સેવ કરેલા એજન્ટના ટૂલ્સ ThunderPhone પર ચાલે છે.
સેશન જીવનચક્ર અને નિષ્ફળતાઓ
એક WebSocket એક કૉલનું પ્રતિનિધિત્વ કરે છે. અમાન્ય એજન્ટ ID અથવા નકારવામાં આવેલ ઇનલાઇન કૉન્ફિગરેશન error ઇવેન્ટ ઉત્પન્ન કરે છે. સેશનને સક્રિય ગણતા પહેલાં session.updated ની રાહ જુઓ. વાસ્તવિક ઇનપુટ અને આઉટપુટ ફૉર્મેટ્સ તથા સેમ્પલ રેટ જાહેર કરો: PCM રેટમાં અસંગતતા વેલિડેશન ભૂલ ઉત્પન્ન કરવાને બદલે ઑડિયોને ખૂબ ઝડપી અથવા ખૂબ ધીમો વગાડે છે.
સેશન શરૂ થયા પછી, તમારી એપ્લિકેશન પૂર્ણ થાય ત્યારે સોકેટને સ્વચ્છ રીતે બંધ કરો. ઇનલાઇન સેશન્સ ક્લાયન્ટમાં ચાલતા ફંક્શન્સનો ઉપયોગ કરી શકે છે. સેવ કરેલા એજન્ટ સેશન્સ સુસંગત ThunderPhone-ચલિત ટૂલ્સનો ઉપયોગ કરે છે અને ટ્રાન્સફર અથવા કીપેડ ઇનપુટ આપતા નથી.
ઇન્ટિગ્રેશનનું પરીક્ષણ કરો
ન્યૂનતમ Python WAV ક્લાયન્ટ અને તેની જાહેર કરેલી રેટ પર મોનો PCM16 WAV થી શરૂઆત કરો. ચકાસો:
- સર્વર કૉન્ફિગરેશન સ્વીકારે છે અને
session.updatedમોકલે છે. - ઇનપુટ અપેક્ષિત ઝડપે ટ્રાન્સક્રિપ્ટ અને રિસ્પોન્સ-ઑડિયો ઇવેન્ટ્સ ઉત્પન્ન કરે છે.
- અવરોધ અને રિસ્પોન્સ રદ કરવાથી બાકીનું આઉટપુટ ઑડિયો બંધ થાય છે.
- ઇનલાઇન ફંક્શન પરિણામો અથવા સેવ કરેલા એજન્ટ ટૂલ પરિણામો મોડેલને પરત આવે છે.
- અમાન્ય ઇનપુટ
errorઇવેન્ટ ઉત્પન્ન કરે છે, જેને તમારો ક્લાયન્ટ હેન્ડલ કરે છે. - તમારો ક્લાયન્ટ સોકેટ બંધ કરે છે અને કૉલ કૉલ ઇતિહાસમાં દેખાય છે.
Realtime WebSocket રેફરન્સ સ્વીકૃત ઇવેન્ટ્સ, ઑડિયો ફૉર્મેટ્સ, સેશન ફીલ્ડ્સ અને સંપૂર્ણ ઉદાહરણોની યાદી આપે છે.
ખર્ચ
Realtime કૉલ્સ પસંદ કરેલા પ્રોડક્ટના સામાન્ય પ્રતિ-મિનિટ દરનો ઉપયોગ કરે છે. લાઇવ ટ્રાન્સક્રિપ્ટ ડેલ્ટા સક્રિય કરવાથી સમગ્ર સેશન માટે પ્રતિ-મિનિટ વધારાનો ચાર્જ ઉમેરાય છે; દર માટે લાઇવ ટ્રાન્સક્રિપ્ટ્સ અને પ્રોડક્ટ દરો માટે કિંમત જુઓ.
POST /v1/realtime/sessions એક અલગ મેનેજ્ડ LiveKit પાથ છે. તે રૂમ અને મર્યાદિત પાર્ટિસિપન્ટ ટોકન બનાવે છે; સીધા WebSocket કનેક્શન માટે તેની જરૂર નથી.
ફ્રેમવર્ક ઇન્ટિગ્રેશન્સ માટે, Pipecat માંથી ThunderPhone નો ઉપયોગ કરો અને LiveKit Agents માંથી ThunderPhone નો ઉપયોગ કરો જુઓ.