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.
This commit is contained in:
Roshan
2025-10-28 18:41:58 -07:00
parent 408264a0fd
commit b0f5fc02c4

View File

@@ -10,7 +10,6 @@ import base64
import json import json
import uuid import uuid
import warnings import warnings
from dataclasses import dataclass
from typing import AsyncGenerator, List, Literal, Optional, Union from typing import AsyncGenerator, List, Literal, Optional, Union
from loguru import logger from loguru import logger
@@ -49,8 +48,7 @@ except ModuleNotFoundError as e:
raise Exception(f"Missing module: {e}") raise Exception(f"Missing module: {e}")
@dataclass class GenerationConfig(BaseModel):
class GenerationConfig:
"""Configuration for Cartesia Sonic-3 generation parameters. """Configuration for Cartesia Sonic-3 generation parameters.
Sonic-3 interprets these parameters as guidance to ensure natural speech. Sonic-3 interprets these parameters as guidance to ensure natural speech.
@@ -324,15 +322,7 @@ class CartesiaTTSService(AudioContextWordTTSService):
msg["speed"] = self._settings["speed"] msg["speed"] = self._settings["speed"]
if self._settings["generation_config"]: if self._settings["generation_config"]:
gen_config = {} msg["generation_config"] = self._settings["generation_config"].model_dump(exclude_none=True)
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
return json.dumps(msg) return json.dumps(msg)
@@ -674,15 +664,7 @@ class CartesiaHttpTTSService(TTSService):
payload["speed"] = self._settings["speed"] payload["speed"] = self._settings["speed"]
if self._settings["generation_config"]: if self._settings["generation_config"]:
gen_config = {} payload["generation_config"] = self._settings["generation_config"].model_dump(exclude_none=True)
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
yield TTSStartedFrame() yield TTSStartedFrame()