Address review feedback
- Fall back to Language.EN in _primary_detected_language when model is flux-general-en, preserving prior behavior on the default model. - Standardize example on DeepgramFluxSTTService.Settings and drop the now-redundant DeepgramFluxSTTSettings import. - Narrow the changed-behavior changelog to reflect that flux-general-en frames still carry Language.EN.
This commit is contained in:
@@ -1 +1 @@
|
||||
- `TranscriptionFrame.language` and `InterimTranscriptionFrame.language` emitted by `DeepgramFluxSTTService` now reflect the language Deepgram detected for each turn (read from the `languages` field on Flux's `TurnInfo` event) instead of a statically configured value. On `flux-general-multi` this means per-turn accuracy for downstream consumers (e.g. TTS voice selection). On `flux-general-en` the field is absent in Flux responses, so emitted frames now carry `language=None` instead of the previously hardcoded `Language.EN`.
|
||||
- `TranscriptionFrame.language` and `InterimTranscriptionFrame.language` emitted by `DeepgramFluxSTTService` now reflect the language Deepgram detected for each turn (read from the `languages` field on Flux's `TurnInfo` event). On `flux-general-multi` this gives per-turn accuracy for downstream consumers (e.g. TTS voice selection). `flux-general-en` continues to emit `Language.EN`.
|
||||
|
||||
@@ -23,7 +23,6 @@ from pipecat.processors.aggregators.llm_response_universal import (
|
||||
from pipecat.runner.types import RunnerArguments
|
||||
from pipecat.runner.utils import create_transport
|
||||
from pipecat.services.cartesia.tts import CartesiaTTSService
|
||||
from pipecat.services.deepgram.flux.base import DeepgramFluxSTTSettings
|
||||
from pipecat.services.deepgram.flux.stt import DeepgramFluxSTTService
|
||||
from pipecat.services.openai.llm import OpenAILLMService
|
||||
from pipecat.transcriptions.language import Language
|
||||
@@ -118,7 +117,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
||||
logger.info("Updating Deepgram Flux STT settings: eot_threshold, keyterm")
|
||||
await task.queue_frame(
|
||||
STTUpdateSettingsFrame(
|
||||
delta=DeepgramFluxSTTSettings(
|
||||
delta=DeepgramFluxSTTService.Settings(
|
||||
eot_threshold=0.8,
|
||||
keyterm=["Pipecat", "Deepgram"],
|
||||
)
|
||||
@@ -130,7 +129,9 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
||||
await asyncio.sleep(10)
|
||||
logger.info("Updating Deepgram Flux STT settings: language_hints=[es]")
|
||||
await task.queue_frame(
|
||||
STTUpdateSettingsFrame(delta=DeepgramFluxSTTSettings(language_hints=[Language.ES]))
|
||||
STTUpdateSettingsFrame(
|
||||
delta=DeepgramFluxSTTService.Settings(language_hints=[Language.ES])
|
||||
)
|
||||
)
|
||||
|
||||
@transport.event_handler("on_client_disconnected")
|
||||
|
||||
@@ -611,12 +611,16 @@ class DeepgramFluxSTTBase(STTService):
|
||||
def _primary_detected_language(self, data: dict[str, Any]) -> Language | None:
|
||||
"""Extract the primary detected language from a TurnInfo payload.
|
||||
|
||||
Only populated by ``flux-general-multi``; returns ``None`` otherwise.
|
||||
On ``flux-general-multi`` the language is read from TurnInfo's
|
||||
``languages`` field. On ``flux-general-en`` the field is absent, so we
|
||||
fall back to ``Language.EN`` to match the model's fixed language.
|
||||
"""
|
||||
codes = data.get("languages") or []
|
||||
if not codes:
|
||||
return None
|
||||
return _code_to_pipecat_language(codes[0])
|
||||
if codes:
|
||||
return _code_to_pipecat_language(codes[0])
|
||||
if self._settings.model == "flux-general-en":
|
||||
return Language.EN
|
||||
return None
|
||||
|
||||
async def _handle_end_of_turn(self, transcript: str, data: dict[str, Any]):
|
||||
"""Handle EndOfTurn events from Deepgram Flux.
|
||||
|
||||
Reference in New Issue
Block a user