Code review feedback
This commit is contained in:
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Added AWS Polly TTS support.
|
- Added AWS Polly TTS support and `07m-interruptible-aws.py` as an example.
|
||||||
|
|
||||||
- Added InputParams to Azure TTS service.
|
- Added InputParams to Azure TTS service.
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ from pipecat.processors.aggregators.llm_response import (
|
|||||||
LLMUserResponseAggregator,
|
LLMUserResponseAggregator,
|
||||||
)
|
)
|
||||||
from pipecat.services.aws import AWSTTSService
|
from pipecat.services.aws import AWSTTSService
|
||||||
|
from pipecat.services.deepgram import DeepgramSTTService
|
||||||
from pipecat.services.openai import OpenAILLMService
|
from pipecat.services.openai import OpenAILLMService
|
||||||
from pipecat.transports.services.daily import DailyParams, DailyTransport
|
from pipecat.transports.services.daily import DailyParams, DailyTransport
|
||||||
from pipecat.vad.silero import SileroVADAnalyzer
|
from pipecat.vad.silero import SileroVADAnalyzer
|
||||||
@@ -43,12 +44,14 @@ async def main():
|
|||||||
DailyParams(
|
DailyParams(
|
||||||
audio_out_enabled=True,
|
audio_out_enabled=True,
|
||||||
audio_out_sample_rate=16000,
|
audio_out_sample_rate=16000,
|
||||||
transcription_enabled=True,
|
|
||||||
vad_enabled=True,
|
vad_enabled=True,
|
||||||
vad_analyzer=SileroVADAnalyzer(),
|
vad_analyzer=SileroVADAnalyzer(),
|
||||||
|
vad_audio_passthrough=True,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY"))
|
||||||
|
|
||||||
tts = AWSTTSService(
|
tts = AWSTTSService(
|
||||||
api_key=os.getenv("AWS_SECRET_ACCESS_KEY"),
|
api_key=os.getenv("AWS_SECRET_ACCESS_KEY"),
|
||||||
aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"),
|
aws_access_key_id=os.getenv("AWS_ACCESS_KEY_ID"),
|
||||||
@@ -72,6 +75,7 @@ async def main():
|
|||||||
pipeline = Pipeline(
|
pipeline = Pipeline(
|
||||||
[
|
[
|
||||||
transport.input(), # Transport user input
|
transport.input(), # Transport user input
|
||||||
|
stt, # STT
|
||||||
tma_in, # User responses
|
tma_in, # User responses
|
||||||
llm, # LLM
|
llm, # LLM
|
||||||
tts, # TTS
|
tts, # TTS
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from loguru import logger
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from pipecat.frames.frames import (
|
from pipecat.frames.frames import (
|
||||||
|
ErrorFrame,
|
||||||
Frame,
|
Frame,
|
||||||
TTSAudioRawFrame,
|
TTSAudioRawFrame,
|
||||||
TTSStartedFrame,
|
TTSStartedFrame,
|
||||||
@@ -152,7 +153,7 @@ class AWSTTSService(TTSService):
|
|||||||
if "AudioStream" in response:
|
if "AudioStream" in response:
|
||||||
with response["AudioStream"] as stream:
|
with response["AudioStream"] as stream:
|
||||||
audio_data = stream.read()
|
audio_data = stream.read()
|
||||||
chunk_size = 4096 # You can adjust this value
|
chunk_size = 8192
|
||||||
for i in range(0, len(audio_data), chunk_size):
|
for i in range(0, len(audio_data), chunk_size):
|
||||||
chunk = audio_data[i : i + chunk_size]
|
chunk = audio_data[i : i + chunk_size]
|
||||||
if len(chunk) > 0:
|
if len(chunk) > 0:
|
||||||
@@ -164,3 +165,8 @@ class AWSTTSService(TTSService):
|
|||||||
|
|
||||||
except (BotoCoreError, ClientError) as error:
|
except (BotoCoreError, ClientError) as error:
|
||||||
logger.exception(f"{self} error generating TTS: {error}")
|
logger.exception(f"{self} error generating TTS: {error}")
|
||||||
|
error_message = f"AWS Polly TTS error: {str(error)}"
|
||||||
|
yield ErrorFrame(error=error_message)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
await self.push_frame(TTSStoppedFrame())
|
||||||
|
|||||||
Reference in New Issue
Block a user