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

Connect tools & data

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

اپنی ٹرانسپورٹ اور ٹیلی فونی کے ساتھ Pipecat پائپ لائن کے اندر ThunderPhone وائس ایجنٹ کو اسپیچ ٹو اسپیچ سروس کے طور پر چلائیں۔

Pipecat قابلِ ترکیب سروسز سے وائس ایجنٹس بنانے کے لیے ایک اوپن سورس فریم ورک ہے۔ ThunderPhone ایک اسپیچ ٹو اسپیچ LLM سروس کے طور پر پلگ اِن ہوتا ہے: Pipecat کالر کی آڈیو بھیجتا ہے، ThunderPhone ایجنٹ کی آواز، ٹرانسکرپٹس اور فنکشن کالز واپس کرتا ہے، اور Pipecat کا ٹرانسپورٹ (Daily، LiveKit، Twilio، WebRTC، ایک مقامی مائیکروفون) آڈیو منتقل کرتا ہے۔ تقریر کی شناخت، لینگویج ماڈل، آواز، نوبت بندی، 47 زبانیں اور ٹولز سب ThunderPhone پر چلتے ہیں۔

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

انسٹال کریں

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

پیکیج Pipecat کی OpenAI Realtime سروس کو ریپ کرتا ہے، کیونکہ ThunderPhone کا Realtime WebSocket اسی پروٹوکول پر بات کرتا ہے۔ اس کے لیے pipecat-ai 1.8 یا اس سے نیا ورژن درکار ہے۔

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

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

from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.worker import PipelineParams, PipelineWorker
from pipecat.processors.aggregators.llm_context import LLMContext
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
from pipecat_thunderphone import ThunderPhoneRealtimeLLMService
 
llm = ThunderPhoneRealtimeLLMService(agent_id=12)
 
context = LLMContext()
aggregators = LLMContextAggregatorPair(context)
pipeline = Pipeline([
    transport.input(),
    aggregators.user(),
    llm,
    aggregators.assistant(),
    transport.output(),
])
worker = PipelineWorker(pipeline, params=PipelineParams(allow_interruptions=True))

محفوظ شدہ ایجنٹ اپنے شیڈول کے مطابق خود کال شروع کرتا ہے، اس لیے سروس Pipecat سے ابتدائی جواب کی درخواست نہیں کرتی۔ اگر آپ پھر بھی ایسا جواب چاہتے ہیں تو greet_on_connect=True منتقل کریں۔

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

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

from pipecat.adapters.schemas.function_schema import FunctionSchema
from pipecat.adapters.schemas.tools_schema import ToolsSchema
from pipecat.services.llm_service import FunctionCallParams
 
llm = ThunderPhoneRealtimeLLMService(product="bolt", voice="olivia", language="es")
 
async def check_availability(params: FunctionCallParams):
    slots = await calendar.free_slots(params.arguments["date"])
    await params.result_callback({"slots": slots})
 
llm.register_function("check_availability", check_availability)
 
context = LLMContext(
    messages=[{"role": "system", "content": "You are Acme Dental's receptionist."}],
    tools=ToolsSchema(standard_tools=[
        FunctionSchema(
            name="check_availability",
            description="Free appointment slots on a date",
            properties={"date": {"type": "string"}},
            required=["date"],
        )
    ]),
)

اِن لائن سیشن کلائنٹ کے زیرِ ہدایت ہوتے ہیں: کانٹیکسٹ پہنچنے پر Pipecat جواب کی درخواست کرتا ہے، اس لیے ایجنٹ پہلے بولتا ہے، اور خاموشی کے دوران خاموش رہتا ہے جب تک آپ کوئی پیغام شامل نہ کریں یا کسی دوسرے جواب کی درخواست نہ کریں۔

اختیارات

آرگیومنٹمطلب
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گفتگو کے دوران کالر کے ٹرانسکرپٹ کے ٹکڑے اسٹریم کریں (اضافی چارج کے ساتھ)۔
greet_on_connectسیشن تیار ہوتے ہی پہلا جواب طلب کریں۔
end_task_on_call_endedجب ThunderPhone کال ختم کرے تو EndWorkerFrame پش کریں (بطور ڈیفالٹ فعال)۔

ایونٹس

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

@llm.event_handler("on_call_ended")
async def on_call_ended(service, event):
    print("call ended:", event["reason"], "call id:", service.call_id)

service.call_id سیشن لائیو ہونے کے بعد سیٹ ہوتا ہے۔ کال کے بعد ریکارڈنگ، ٹرانسکرپٹ اور گریڈ حاصل کرنے کے لیے اسے GET /v1/calls/{call_id} کے ساتھ استعمال کریں۔

حدود

  • ٹرن ڈیٹیکشن سرور سائیڈ پر ہے اور ہمیشہ فعال رہتی ہے؛ Pipecat سے چلنے والے ٹرنز (turn_detection=False) معاونت یافتہ نہیں ہیں۔
  • سروس پر رجسٹر کیے گئے فنکشنز صرف ان لائن سیشنز کے لیے چلتے ہیں۔ محفوظ شدہ ایجنٹ ThunderPhone پر اپنے ٹولز خود چلاتا ہے۔
  • آڈیو دونوں سمتوں میں 24 kHz پر 16 بِٹ مونو PCM ہے۔
  • ویڈیو فریمز نظر انداز کر دیے جاتے ہیں۔