Add single transport example, mark SmallWebRTCSessionArguments as deprecated
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
"""Pipecat Cloud-compatible bot example.
|
"""Pipecat Cloud-compatible bot example.
|
||||||
|
|
||||||
Transports are Twilio or SmallWebRTC."""
|
Transports are Daily or SmallWebRTC."""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@@ -23,20 +23,11 @@ from pipecat.runner.run import SmallWebRTCSessionArguments
|
|||||||
from pipecat.services.cartesia.tts import CartesiaTTSService
|
from pipecat.services.cartesia.tts import CartesiaTTSService
|
||||||
from pipecat.services.deepgram.stt import DeepgramSTTService
|
from pipecat.services.deepgram.stt import DeepgramSTTService
|
||||||
from pipecat.services.openai.llm import OpenAILLMService
|
from pipecat.services.openai.llm import OpenAILLMService
|
||||||
|
from pipecat.transports.base_transport import TransportParams
|
||||||
try:
|
from pipecat.transports.network.small_webrtc import SmallWebRTCTransport
|
||||||
from pipecatcloud.agent import DailySessionArguments, WebSocketSessionArguments
|
|
||||||
except ImportError:
|
|
||||||
raise ImportError(
|
|
||||||
"pipecatcloud package is required for cloud-compatible bots. "
|
|
||||||
"Install with: pip install pipecat-ai[pipecatcloud]"
|
|
||||||
)
|
|
||||||
|
|
||||||
load_dotenv(override=True)
|
load_dotenv(override=True)
|
||||||
|
|
||||||
# Check if we're running locally
|
|
||||||
IS_LOCAL_RUN = os.environ.get("LOCAL_RUN", "0") == "1"
|
|
||||||
|
|
||||||
|
|
||||||
async def run_bot(transport):
|
async def run_bot(transport):
|
||||||
"""Main bot logic that works with any transport."""
|
"""Main bot logic that works with any transport."""
|
||||||
@@ -100,61 +91,17 @@ async def run_bot(transport):
|
|||||||
await runner.run(task)
|
await runner.run(task)
|
||||||
|
|
||||||
|
|
||||||
async def bot(
|
async def bot(session_args: SmallWebRTCSessionArguments):
|
||||||
session_args: DailySessionArguments | SmallWebRTCSessionArguments | WebSocketSessionArguments,
|
|
||||||
):
|
|
||||||
"""Main bot entry point compatible with Pipecat Cloud."""
|
"""Main bot entry point compatible with Pipecat Cloud."""
|
||||||
|
|
||||||
if isinstance(session_args, SmallWebRTCSessionArguments):
|
transport = SmallWebRTCTransport(
|
||||||
from pipecat.transports.base_transport import TransportParams
|
params=TransportParams(
|
||||||
from pipecat.transports.network.small_webrtc import SmallWebRTCTransport
|
audio_in_enabled=True,
|
||||||
|
audio_out_enabled=True,
|
||||||
transport = SmallWebRTCTransport(
|
vad_analyzer=SileroVADAnalyzer(),
|
||||||
params=TransportParams(
|
),
|
||||||
audio_in_enabled=True,
|
webrtc_connection=session_args.webrtc_connection,
|
||||||
audio_out_enabled=True,
|
)
|
||||||
vad_analyzer=SileroVADAnalyzer(),
|
|
||||||
),
|
|
||||||
webrtc_connection=session_args.webrtc_connection,
|
|
||||||
)
|
|
||||||
|
|
||||||
elif isinstance(session_args, WebSocketSessionArguments):
|
|
||||||
# Use the utility to parse WebSocket data
|
|
||||||
from pipecat.runner.utils import parse_telephony_websocket
|
|
||||||
|
|
||||||
transport_type, stream_id, call_id = await parse_telephony_websocket(session_args.websocket)
|
|
||||||
logger.info(f"Auto-detected transport: {transport_type}")
|
|
||||||
|
|
||||||
# Create transport based on detected type
|
|
||||||
if transport_type == "twilio":
|
|
||||||
from pipecat.serializers.twilio import TwilioFrameSerializer
|
|
||||||
|
|
||||||
serializer = TwilioFrameSerializer(
|
|
||||||
stream_sid=stream_id,
|
|
||||||
call_sid=call_id,
|
|
||||||
account_sid=os.getenv("TWILIO_ACCOUNT_SID", ""),
|
|
||||||
auth_token=os.getenv("TWILIO_AUTH_TOKEN", ""),
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise ValueError(f"Unsupported WebSocket transport type: {transport_type}")
|
|
||||||
|
|
||||||
# Create the transport
|
|
||||||
from pipecat.transports.network.fastapi_websocket import (
|
|
||||||
FastAPIWebsocketParams,
|
|
||||||
FastAPIWebsocketTransport,
|
|
||||||
)
|
|
||||||
|
|
||||||
transport = FastAPIWebsocketTransport(
|
|
||||||
websocket=session_args.websocket,
|
|
||||||
params=FastAPIWebsocketParams(
|
|
||||||
audio_in_enabled=True,
|
|
||||||
audio_out_enabled=True,
|
|
||||||
add_wav_header=False,
|
|
||||||
vad_analyzer=SileroVADAnalyzer(),
|
|
||||||
serializer=serializer,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
await run_bot(transport)
|
await run_bot(transport)
|
||||||
|
|
||||||
@@ -98,10 +98,15 @@ except ImportError:
|
|||||||
# Define WebRTC type locally until it's added to pipecatcloud
|
# Define WebRTC type locally until it's added to pipecatcloud
|
||||||
@dataclass
|
@dataclass
|
||||||
class SmallWebRTCSessionArguments:
|
class SmallWebRTCSessionArguments:
|
||||||
"""Small WebRTC session arguments for local development.
|
"""Small WebRTC session arguments.
|
||||||
|
|
||||||
This will be replaced by pipecatcloud.agent.SmallWebRTCSessionArguments
|
.. deprecated:: 0.0.77
|
||||||
when WebRTC support is added to Pipecat Cloud.
|
This will be replaced by pipecatcloud.agent.SmallWebRTCSessionArguments
|
||||||
|
once WebRTC support is added to the `pipecatcloud` package.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
websocket: The WebSocket connection for the session.
|
||||||
|
session_id: Optional session ID for tracking.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
webrtc_connection: Any
|
webrtc_connection: Any
|
||||||
|
|||||||
Reference in New Issue
Block a user