ThunderPhone 2.0 اب لائیو ہے۔خود سیٹ اپ کریں، قیمت 2¢ فی منٹ سے شروع۔اعلان پڑھیں

Connect tools & data

LiveKit Agents سے ThunderPhone استعمال کریں

ThunderPhone وائس ایجنٹ کو LiveKit Agents سیشن کے ریئل ٹائم (اسپیچ ٹو اسپیچ) ماڈل کے طور پر چلائیں، جس کے گرد LiveKit رومز، SIP اور ٹیلیفونی موجود ہوں۔

LiveKit Agents LiveKit رومز کے لیے ریئل ٹائم وائس ایجنٹس کا ایک اوپن سورس فریم ورک ہے۔ ThunderPhone ریئل ٹائم ماڈل کے طور پر پلگ اِن ہوتا ہے: فریم ورک شرکت کنندہ کی آڈیو بھیجتا ہے، ThunderPhone ایجنٹ کی آواز، ٹرانسکرپٹس اور فنکشن کالز واپس کرتا ہے، اور LiveKit کا روم، SIP ٹرنکس اور ٹیلیفونی آڈیو منتقل کرتے ہیں۔ اسپیچ ریکگنیشن، لینگویج ماڈل، آواز، باری لینے کا عمل، 47 زبانیں اور ٹولز سب ThunderPhone پر چلتے ہیں۔

اس طریقے سے کی جانے والی کالز کال ہسٹری میں ظاہر ہوتی ہیں اور کسی بھی دوسری ریئل ٹائم کال کی طرح آپ کی پروڈکٹ کی فی منٹ شرح کے مطابق بل کی جاتی ہیں۔ اس میں نہ کوئی سبسکرپشن شامل ہے اور نہ ہی ThunderPhone کا کوئی فون نمبر۔

انسٹال کریں

pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_...   # a secret API key

پلگ اِن LiveKit کے OpenAI Realtime ماڈل کو ریپ کرتا ہے، کیونکہ ThunderPhone کا Realtime WebSocket اسی پروٹوکول پر بات کرتا ہے۔ اس کے لیے livekit-agents 1.8 یا اس سے نیا ورژن درکار ہے۔

محفوظ شدہ ایجنٹ چلائیں

ایجنٹ جو کچھ بھی کرتا ہے (پرومپٹ، آواز، انجن، زبانیں، ٹولز، خیرمقدم، خاموشی کی جانچ) ThunderPhone پر کنفیگر ہوتا ہے۔ سیشن صرف آڈیو منتقل کرتا ہے۔

from livekit.agents import Agent, AgentSession, JobContext, WorkerOptions, cli
from livekit.plugins import thunderphone
 
 
async def entrypoint(ctx: JobContext):
    session = AgentSession(llm=thunderphone.RealtimeModel(agent_id=12))
    await session.start(agent=Agent(instructions=""), room=ctx.room)
 
 
if __name__ == "__main__":
    cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))

محفوظ شدہ ایجنٹ ThunderPhone پر خیرمقدم کرتا ہے اور اپنے ٹولز خود چلاتا ہے؛ LiveKit Agent کی ہدایات اور ٹولز نہیں بھیجے جاتے۔ کال اس وقت ختم ہوتی ہے جب ThunderPhone ایجنٹ کال بند کرتا ہے، اور سیشن بھی اس کے ساتھ بند ہو جاتا ہے۔

سیشن کو اِن لائن کنفیگر کریں

agent_id کے بغیر، ہدایات اور ٹولز LiveKit Agent سے آتے ہیں، بالکل ویسے ہی جیسے OpenAI کے لیے آتے ہیں۔ product انجن منتخب کرتا ہے اور voice ThunderPhone کی آواز منتخب کرتا ہے۔

from livekit.agents import Agent, AgentSession, RunContext, function_tool
from livekit.plugins import thunderphone
 
 
class Receptionist(Agent):
    def __init__(self):
        super().__init__(instructions="You are Acme Dental's receptionist. Be brief.")
 
    @function_tool
    async def check_availability(self, context: RunContext, date: str) -> dict:
        """Free appointment slots on a date."""
        return {"slots": await calendar.free_slots(date)}
 
 
async def entrypoint(ctx: JobContext):
    session = AgentSession(
        llm=thunderphone.RealtimeModel(product="bolt", voice="olivia", language="es"),
    )
    await session.start(agent=Receptionist(), room=ctx.room)
    await session.generate_reply()   # the agent speaks first

ThunderPhone کال شروع ہونے پر ہدایات اور ٹولز کو منجمد کر دیتا ہے، اس لیے update_instructions، update_tools اور انہیں تبدیل کرنے والے ایجنٹ ہینڈ آف کال کے دوران معاون نہیں ہیں۔ اِن لائن سیشن کلائنٹ کے زیرِ ہدایت ہوتے ہیں: ایجنٹ اس وقت بولتا ہے جب آپ generate_reply() کال کرتے ہیں یا جب شرکت کنندہ اپنی باری مکمل کرتا ہے۔

اختیارات

آرگومنٹمطلب
api_keyخفیہ کلید (sk_live_...)۔ بطور ڈیفالٹ THUNDERPHONE_API_KEY استعمال ہوتی ہے۔
agent_idمحفوظ شدہ ایجنٹ چلائیں۔ product اور voice کے ساتھ بیک وقت استعمال نہیں ہو سکتا۔
productاِن لائن سیشنز کے لیے انجن: spark، bolt یا storm۔
voiceاِن لائن سیشنز کے لیے ThunderPhone وائس کا نام۔
languageاِن لائن سیشنز کے لیے بنیادی زبان کا اشارہ، مثلاً es۔
from_number, to_numberجب روم کسی فون لائن سے منسلک ہو تو کال پر ریکارڈ کیے جانے والے نمبرز۔
live_transcriptsکالر کے ٹرانسکرپٹ کے ٹکڑے بولتے ہوئے ہی اسٹریم کریں (اضافی بلنگ کے ساتھ)۔
base_urlاینڈ پوائنٹ اوور رائیڈ، ڈیفالٹ wss://api.thunderphone.com/v1/realtime۔

ایونٹس

ThunderPhone ریئل ٹائم پروٹوکول کے اوپر پلیٹ فارم ایونٹس شامل کرتا ہے۔ سیشن انہیں خارج کرتا ہے:

@session.llm.session.on("thunderphone_call_ended")  # or on the RealtimeSession you hold
def on_call_ended(event):
    print("call ended:", event["reason"])

سیشن فعال ہونے کے بعد RealtimeSession، call_id فراہم کرتا ہے۔ اسے GET /v1/calls/{call_id} کے ساتھ استعمال کر کے کال کے بعد ریکارڈنگ، ٹرانسکرپٹ اور گریڈ حاصل کریں۔ ہر دوسرا call.* ایونٹ (ٹرانسفر، کی پیڈ، نظر انداز کی گئی گفتگو) thunderphone_call_event کے طور پر آتا ہے۔

حدود

  • ٹرن ڈیٹیکشن سرور کی جانب سے ہوتی ہے اور ہمیشہ فعال رہتی ہے؛ فریم ورک کی جانب سے ٹرن ڈیٹیکشن (turn_detection، جو AgentSession پر ہے) کو نظر انداز کیا جاتا ہے۔
  • کال شروع ہونے کے بعد ہدایات اور اوزار تبدیل نہیں کیے جا سکتے۔
  • آڈیو دونوں سمتوں میں 24 کلو ہرٹز پر 16-بٹ مونو PCM ہے۔
  • ویڈیو فریمز کو نظر انداز کیا جاتا ہے۔