Restructured STT and enabled prosody tags for generative Polly

This commit is contained in:
Adithya Suresh
2025-04-04 05:39:08 +00:00
committed by Aleix Conchillo Flaqué
parent 05ae8d3ffa
commit f014f718eb
3 changed files with 638 additions and 617 deletions

View File

@@ -5,7 +5,6 @@
#
import argparse
import os
from dotenv import load_dotenv
from loguru import logger
@@ -14,13 +13,13 @@ from pipecat.audio.vad.silero import SileroVADAnalyzer
from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.runner import PipelineRunner
from pipecat.pipeline.task import PipelineParams, PipelineTask
from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
from pipecat.services.aws import PollyTTSService, TranscribeSTTService
from pipecat.services.openai import OpenAILLMService
from pipecat.transcriptions.language import Language
from pipecat.transports.base_transport import TransportParams
from pipecat.transports.network.small_webrtc import SmallWebRTCTransport
from pipecat.transports.network.webrtc_connection import SmallWebRTCConnection
from pipecat.services.aws.llm import BedrockLLMService, BedrockLLMContext
from pipecat.services.aws.stt import TranscribeSTTService
from pipecat.services.aws.tts import PollyTTSService
load_dotenv(override=True)
@@ -43,20 +42,30 @@ async def run_bot(webrtc_connection: SmallWebRTCConnection, _: argparse.Namespac
region="us-west-2", # only specific regions support generative TTS
voice_id="Joanna",
params=PollyTTSService.InputParams(
engine="generative", language=Language.EN_GB, rate="1.05"
engine="generative",
language=Language.EN_US,
rate="1.1"
),
)
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
llm = BedrockLLMService(
aws_region="us-west-2",
model="us.anthropic.claude-3-5-haiku-20241022-v1:0",
params=BedrockLLMService.InputParams(
temperature=0.8,
latency="optimized"
)
)
messages = [
{
"role": "system",
"content": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way.",
},
]
{
"role": "system",
"content": [{"text": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way."}],
},
]
)
context = OpenAILLMContext(messages)
context = BedrockLLMContext(messages)
context_aggregator = llm.create_context_aggregator(context)
pipeline = Pipeline(
@@ -68,8 +77,8 @@ async def run_bot(webrtc_connection: SmallWebRTCConnection, _: argparse.Namespac
tts, # TTS
transport.output(), # Transport bot output
context_aggregator.assistant(), # Assistant spoken responses
]
)
]
)
task = PipelineTask(
pipeline,
@@ -85,16 +94,12 @@ async def run_bot(webrtc_connection: SmallWebRTCConnection, _: argparse.Namespac
async def on_client_connected(transport, client):
logger.info(f"Client connected")
# Kick off the conversation.
messages.append({"role": "system", "content": "Please introduce yourself to the user."})
messages.append({"role": "user", "content": [{"text": "Please introduce yourself to the user."}]})
await task.queue_frames([context_aggregator.user().get_context_frame()])
@transport.event_handler("on_client_disconnected")
async def on_client_disconnected(transport, client):
logger.info(f"Client disconnected")
@transport.event_handler("on_client_closed")
async def on_client_closed(transport, client):
logger.info(f"Client closed connection")
await task.cancel()
runner = PipelineRunner(handle_sigint=False)