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 ہے۔
- ویڈیو فریمز نظر انداز کر دیے جاتے ہیں۔