From b0f5fc02c406c477185c0defc250fe50c109170f Mon Sep 17 00:00:00 2001 From: Roshan Date: Tue, 28 Oct 2025 18:41:58 -0700 Subject: [PATCH] refactor: use Pydantic BaseModel for GenerationConfig and simplify model_dump() - Change GenerationConfig from dataclass to Pydantic BaseModel for consistency - Simplify _build_msg() to use model_dump(exclude_none=True) instead of manual field extraction - Simplify HTTP run_tts() to use model_dump(exclude_none=True) instead of manual field extraction This addresses feedback from code review and reduces code duplication. --- src/pipecat/services/cartesia/tts.py | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/src/pipecat/services/cartesia/tts.py b/src/pipecat/services/cartesia/tts.py index 9b5d7b0ac..4e785a374 100644 --- a/src/pipecat/services/cartesia/tts.py +++ b/src/pipecat/services/cartesia/tts.py @@ -10,7 +10,6 @@ import base64 import json import uuid import warnings -from dataclasses import dataclass from typing import AsyncGenerator, List, Literal, Optional, Union from loguru import logger @@ -49,8 +48,7 @@ except ModuleNotFoundError as e: raise Exception(f"Missing module: {e}") -@dataclass -class GenerationConfig: +class GenerationConfig(BaseModel): """Configuration for Cartesia Sonic-3 generation parameters. Sonic-3 interprets these parameters as guidance to ensure natural speech. @@ -324,15 +322,7 @@ class CartesiaTTSService(AudioContextWordTTSService): msg["speed"] = self._settings["speed"] if self._settings["generation_config"]: - gen_config = {} - if self._settings["generation_config"].volume is not None: - gen_config["volume"] = self._settings["generation_config"].volume - if self._settings["generation_config"].speed is not None: - gen_config["speed"] = self._settings["generation_config"].speed - if self._settings["generation_config"].emotion is not None: - gen_config["emotion"] = self._settings["generation_config"].emotion - if gen_config: - msg["generation_config"] = gen_config + msg["generation_config"] = self._settings["generation_config"].model_dump(exclude_none=True) return json.dumps(msg) @@ -674,15 +664,7 @@ class CartesiaHttpTTSService(TTSService): payload["speed"] = self._settings["speed"] if self._settings["generation_config"]: - gen_config = {} - if self._settings["generation_config"].volume is not None: - gen_config["volume"] = self._settings["generation_config"].volume - if self._settings["generation_config"].speed is not None: - gen_config["speed"] = self._settings["generation_config"].speed - if self._settings["generation_config"].emotion is not None: - gen_config["emotion"] = self._settings["generation_config"].emotion - if gen_config: - payload["generation_config"] = gen_config + payload["generation_config"] = self._settings["generation_config"].model_dump(exclude_none=True) yield TTSStartedFrame()