From 233867fdfb626c2eb0dcd4a6d0b11304bd1a3594 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Tue, 10 Mar 2026 07:40:55 -0400 Subject: [PATCH 1/2] Make region optional and validate Azure STT config Make `region` optional so users can provide only `private_endpoint`. Raise ValueError if neither is provided, and warn if both are given (private_endpoint takes priority). --- src/pipecat/services/azure/stt.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/pipecat/services/azure/stt.py b/src/pipecat/services/azure/stt.py index 72388b370..169b055f2 100644 --- a/src/pipecat/services/azure/stt.py +++ b/src/pipecat/services/azure/stt.py @@ -73,7 +73,7 @@ class AzureSTTService(STTService): self, *, api_key: str, - region: str, + region: Optional[str] = None, language: Optional[Language] = Language.EN_US, sample_rate: Optional[int] = None, private_endpoint: Optional[str] = None, @@ -87,6 +87,7 @@ class AzureSTTService(STTService): Args: api_key: Azure Cognitive Services subscription key. region: Azure region for the Speech service (e.g., 'eastus'). + Required unless ``private_endpoint`` is provided. language: Language for speech recognition. Defaults to English (US). .. deprecated:: 0.0.105 @@ -94,7 +95,7 @@ class AzureSTTService(STTService): sample_rate: Audio sample rate in Hz. If None, uses service default. private_endpoint: Private endpoint for STT behind firewall. - See https://learn.microsoft.com/en-us/azure/ai-services/speech-service/speech-services-private-link?tabs=portal + See https://docs.azure.cn/en-us/ai-services/speech-service/speech-services-private-link?tabs=portal endpoint_id: Custom model endpoint id. settings: Runtime-updatable settings. When provided alongside deprecated parameters, ``settings`` values take precedence. @@ -126,21 +127,29 @@ class AzureSTTService(STTService): **kwargs, ) - speech_config_kwargs: dict[str, Any] = { - "subscription": api_key, - "speech_recognition_language": default_settings.language - or language_to_azure_language(Language.EN_US), - } + recognition_language = default_settings.language or language_to_azure_language( + Language.EN_US + ) + + if not region and not private_endpoint: + raise ValueError("Either 'region' or 'private_endpoint' must be provided.") + if private_endpoint: if region: logger.warning( "Both 'region' and 'private_endpoint' provided; 'region' will be ignored." ) - speech_config_kwargs["endpoint"] = private_endpoint + self._speech_config = SpeechConfig( + subscription=api_key, + endpoint=private_endpoint, + speech_recognition_language=recognition_language, + ) else: - speech_config_kwargs["region"] = region - - self._speech_config = SpeechConfig(**speech_config_kwargs) + self._speech_config = SpeechConfig( + subscription=api_key, + region=region, + speech_recognition_language=recognition_language, + ) if endpoint_id: self._speech_config.endpoint_id = endpoint_id From edc65fc45e3e2e67eee899a5caa18a2733f0c79a Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Tue, 10 Mar 2026 07:44:42 -0400 Subject: [PATCH 2/2] Add changelog for #3974 --- changelog/3974.changed.md | 1 + src/pipecat/services/azure/stt.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changelog/3974.changed.md diff --git a/changelog/3974.changed.md b/changelog/3974.changed.md new file mode 100644 index 000000000..7c4c360d5 --- /dev/null +++ b/changelog/3974.changed.md @@ -0,0 +1 @@ +- `AzureSTTService` `region` parameter is now optional when `private_endpoint` is provided. A `ValueError` is raised if neither is given, and a warning is logged if both are provided (`private_endpoint` takes priority). diff --git a/src/pipecat/services/azure/stt.py b/src/pipecat/services/azure/stt.py index 169b055f2..6abe52db1 100644 --- a/src/pipecat/services/azure/stt.py +++ b/src/pipecat/services/azure/stt.py @@ -95,7 +95,7 @@ class AzureSTTService(STTService): sample_rate: Audio sample rate in Hz. If None, uses service default. private_endpoint: Private endpoint for STT behind firewall. - See https://docs.azure.cn/en-us/ai-services/speech-service/speech-services-private-link?tabs=portal + See https://learn.microsoft.com/en-us/azure/ai-services/speech-service/speech-services-private-link?tabs=portal endpoint_id: Custom model endpoint id. settings: Runtime-updatable settings. When provided alongside deprecated parameters, ``settings`` values take precedence.