diff --git a/CHANGELOG.md b/CHANGELOG.md index 556ddee..c6bbd3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to **Pipecat** will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.2.1] - 2026-05-15 + +### Changed + +- Updated NVIDIA SageMaker STT and TTS generated service configs to use + `AWS_REGION` for the SageMaker endpoint region. + ## [1.2.0] - 2026-05-15 ### Added diff --git a/src/pipecat_cli/registry/_configs.py b/src/pipecat_cli/registry/_configs.py index 88ca86d..7ce9a5c 100644 --- a/src/pipecat_cli/registry/_configs.py +++ b/src/pipecat_cli/registry/_configs.py @@ -72,9 +72,9 @@ "nvidia_stt": 'NvidiaSTTService(api_key=os.getenv("NVIDIA_API_KEY"))', "nvidia_sagemaker_stt": ( "NvidiaSageMakerSTTService(\n" - ' endpoint_name=os.getenv("NVIDIA_SAGEMAKER_STT_ENDPOINT_NAME"),\n' - ' region=os.getenv("NVIDIA_SAGEMAKER_STT_REGION")\n' - " )\n" + ' endpoint_name=os.getenv("NVIDIA_SAGEMAKER_STT_ENDPOINT_NAME"),\n' + ' region=os.getenv("AWS_REGION")\n' + ")\n" ), "openai_stt": 'OpenAISTTService(api_key=os.getenv("OPENAI_API_KEY"))', "openai_realtime_stt": 'OpenAIRealtimeSTTService(api_key=os.getenv("OPENAI_API_KEY"))', @@ -471,12 +471,12 @@ ), "nvidia_sagemaker_tts": ( "NvidiaSageMakerTTSService(\n" - ' endpoint_name=os.getenv("NVIDIA_SAGEMAKER_TTS_ENDPOINT_NAME"),\n' - ' region=os.getenv("NVIDIA_SAGEMAKER_TTS_REGION"),\n' - " settings=NvidiaSageMakerTTSService.Settings(\n" - ' voice=os.getenv("NVIDIA_SAGEMAKER_TTS_VOICE_ID"),\n' - " ),\n" - " )\n" + ' endpoint_name=os.getenv("NVIDIA_SAGEMAKER_TTS_ENDPOINT_NAME"),\n' + ' region=os.getenv("AWS_REGION"),\n' + " settings=NvidiaSageMakerTTSService.Settings(\n" + ' voice=os.getenv("NVIDIA_SAGEMAKER_TTS_VOICE_ID"),\n' + " ),\n" + ")\n" ), "openai_tts": ( "OpenAITTSService(\n" diff --git a/src/pipecat_cli/registry/service_metadata.py b/src/pipecat_cli/registry/service_metadata.py index f228a2e..faf8c88 100644 --- a/src/pipecat_cli/registry/service_metadata.py +++ b/src/pipecat_cli/registry/service_metadata.py @@ -394,7 +394,7 @@ class ServiceRegistry: ServiceDefinition( value="nvidia_sagemaker_stt", label="NVIDIA SageMaker", - package="pipecat-ai[nvidia,sagemaker]", + package="pipecat-ai[aws,sagemaker]", class_name=["NvidiaSageMakerSTTService"], env_prefix="NVIDIA_SAGEMAKER_STT", include_params=["endpoint_name", "region"], @@ -856,7 +856,7 @@ class ServiceRegistry: ServiceDefinition( value="nvidia_sagemaker_tts", label="NVIDIA SageMaker", - package="pipecat-ai[nvidia,sagemaker]", + package="pipecat-ai[aws,sagemaker]", class_name=["NvidiaSageMakerTTSService"], env_prefix="NVIDIA_SAGEMAKER_TTS", include_params=["endpoint_name", "region"], @@ -1062,6 +1062,21 @@ class ServiceRegistry: # These services have complex initialization logic that cannot be auto-generated # (e.g., nested InputParams, SessionProperties, or other special requirements) MANUAL_SERVICE_CONFIGS = { + "nvidia_sagemaker_stt": ( + "NvidiaSageMakerSTTService(\n" + ' endpoint_name=os.getenv("NVIDIA_SAGEMAKER_STT_ENDPOINT_NAME"),\n' + ' region=os.getenv("AWS_REGION")\n' + ")" + ), + "nvidia_sagemaker_tts": ( + "NvidiaSageMakerTTSService(\n" + ' endpoint_name=os.getenv("NVIDIA_SAGEMAKER_TTS_ENDPOINT_NAME"),\n' + ' region=os.getenv("AWS_REGION"),\n' + " settings=NvidiaSageMakerTTSService.Settings(\n" + ' voice=os.getenv("NVIDIA_SAGEMAKER_TTS_VOICE_ID"),\n' + " ),\n" + ")" + ), "aws_bedrock_llm": ( "AWSBedrockLLMService(\n" ' aws_region=os.getenv("AWS_REGION"),\n' diff --git a/src/pipecat_cli/templates/server/env.example.jinja2 b/src/pipecat_cli/templates/server/env.example.jinja2 index 4d41832..7a04e93 100644 --- a/src/pipecat_cli/templates/server/env.example.jinja2 +++ b/src/pipecat_cli/templates/server/env.example.jinja2 @@ -57,8 +57,8 @@ PLIVO_AUTH_TOKEN= ASSEMBLYAI_API_KEY= {% endif %} -{% if stt_service == 'aws_transcribe_stt' or llm_service == 'aws_bedrock_llm' or tts_service == 'aws_polly_tts' or realtime_service == 'aws_nova_realtime' %} -# AWS (STT/LLM/TTS/Realtime) +{% if stt_service == 'aws_transcribe_stt' or stt_service == 'nvidia_sagemaker_stt' or llm_service == 'aws_bedrock_llm' or tts_service == 'aws_polly_tts' or tts_service == 'nvidia_sagemaker_tts' or realtime_service == 'aws_nova_realtime' %} +# AWS (STT/LLM/TTS/Realtime/SageMaker) AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_REGION= @@ -201,13 +201,11 @@ NVIDIA_MODEL= {% if stt_service == 'nvidia_sagemaker_stt' %} # NVIDIA SageMaker (STT) NVIDIA_SAGEMAKER_STT_ENDPOINT_NAME= -NVIDIA_SAGEMAKER_STT_REGION= {% endif %} {% if tts_service == 'nvidia_sagemaker_tts' %} # NVIDIA SageMaker (TTS) NVIDIA_SAGEMAKER_TTS_ENDPOINT_NAME= -NVIDIA_SAGEMAKER_TTS_REGION= NVIDIA_SAGEMAKER_TTS_VOICE_ID= # "Magpie-Multilingual.EN-US.Isabella" {% endif %} diff --git a/tests/test_service_registry.py b/tests/test_service_registry.py index 30133ba..9ac996e 100644 --- a/tests/test_service_registry.py +++ b/tests/test_service_registry.py @@ -110,6 +110,21 @@ def test_get_service_config(self): assert "DeepgramSTTService" in config assert "DEEPGRAM_API_KEY" in config + def test_nvidia_sagemaker_configs_use_aws_region(self): + """Test NVIDIA SageMaker services use shared AWS_REGION.""" + stt_config = ServiceLoader.get_service_config("nvidia_sagemaker_stt") + tts_config = ServiceLoader.get_service_config("nvidia_sagemaker_tts") + + assert stt_config is not None + assert tts_config is not None + assert 'endpoint_name=os.getenv("NVIDIA_SAGEMAKER_STT_ENDPOINT_NAME")' in stt_config + assert 'endpoint_name=os.getenv("NVIDIA_SAGEMAKER_TTS_ENDPOINT_NAME")' in tts_config + assert 'region=os.getenv("AWS_REGION")' in stt_config + assert 'region=os.getenv("AWS_REGION")' in tts_config + assert "NVIDIA_SAGEMAKER_STT_REGION" not in stt_config + assert "NVIDIA_SAGEMAKER_TTS_REGION" not in tts_config + assert 'voice=os.getenv("NVIDIA_SAGEMAKER_TTS_VOICE_ID")' in tts_config + def test_get_service_import(self): """Test retrieving service imports.""" imports = ServiceLoader.get_service_import("deepgram_stt")