Merge pull request #2934 from roshie548/add-cartesia-generation-config
feat: add generation_config support for Cartesia Sonic-3
This commit is contained in:
@@ -9,6 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
- Added `generation_config` parameter support to `CartesiaTTSService` and
|
||||||
|
`CartesiaHttpTTSService` for Cartesia Sonic-3 models. Includes a new
|
||||||
|
`GenerationConfig` class with `volume` (0.5-2.0), `speed` (0.6-1.5),
|
||||||
|
and `emotion` (60+ options) parameters for fine-grained speech generation
|
||||||
|
control.
|
||||||
|
|
||||||
- Expanded support for univeral `LLMContext` to `OpenAIRealtimeLLMService`.
|
- Expanded support for univeral `LLMContext` to `OpenAIRealtimeLLMService`.
|
||||||
As a reminder, the context-setup pattern when using `LLMContext` is:
|
As a reminder, the context-setup pattern when using `LLMContext` is:
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,26 @@ except ModuleNotFoundError as e:
|
|||||||
raise Exception(f"Missing module: {e}")
|
raise Exception(f"Missing module: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
class GenerationConfig(BaseModel):
|
||||||
|
"""Configuration for Cartesia Sonic-3 generation parameters.
|
||||||
|
|
||||||
|
Sonic-3 interprets these parameters as guidance to ensure natural speech.
|
||||||
|
Test against your content for best results.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
volume: Volume multiplier for generated speech. Valid range: [0.5, 2.0]. Default is 1.0.
|
||||||
|
speed: Speed multiplier for generated speech. Valid range: [0.6, 1.5]. Default is 1.0.
|
||||||
|
emotion: Single emotion string to guide the emotional tone. Examples include neutral,
|
||||||
|
angry, excited, content, sad, scared. Over 60 emotions are supported. For best
|
||||||
|
results, use with recommended voices: Leo, Jace, Kyle, Gavin, Maya, Tessa, Dana,
|
||||||
|
and Marian.
|
||||||
|
"""
|
||||||
|
|
||||||
|
volume: Optional[float] = None
|
||||||
|
speed: Optional[float] = None
|
||||||
|
emotion: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
def language_to_cartesia_language(language: Language) -> Optional[str]:
|
def language_to_cartesia_language(language: Language) -> Optional[str]:
|
||||||
"""Convert a Language enum to Cartesia language code.
|
"""Convert a Language enum to Cartesia language code.
|
||||||
|
|
||||||
@@ -101,16 +121,20 @@ class CartesiaTTSService(AudioContextWordTTSService):
|
|||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
language: Language to use for synthesis.
|
language: Language to use for synthesis.
|
||||||
speed: Voice speed control.
|
speed: Voice speed control for non-Sonic-3 models (literal values).
|
||||||
emotion: List of emotion controls.
|
emotion: List of emotion controls for non-Sonic-3 models.
|
||||||
|
|
||||||
.. deprecated:: 0.0.68
|
.. deprecated:: 0.0.68
|
||||||
The `emotion` parameter is deprecated and will be removed in a future version.
|
The `emotion` parameter is deprecated and will be removed in a future version.
|
||||||
|
|
||||||
|
generation_config: Generation configuration for Sonic-3 models. Includes volume,
|
||||||
|
speed (numeric), and emotion (string) parameters.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
language: Optional[Language] = Language.EN
|
language: Optional[Language] = Language.EN
|
||||||
speed: Optional[Literal["slow", "normal", "fast"]] = None
|
speed: Optional[Literal["slow", "normal", "fast"]] = None
|
||||||
emotion: Optional[List[str]] = []
|
emotion: Optional[List[str]] = []
|
||||||
|
generation_config: Optional[GenerationConfig] = None
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@@ -179,6 +203,7 @@ class CartesiaTTSService(AudioContextWordTTSService):
|
|||||||
else "en",
|
else "en",
|
||||||
"speed": params.speed,
|
"speed": params.speed,
|
||||||
"emotion": params.emotion,
|
"emotion": params.emotion,
|
||||||
|
"generation_config": params.generation_config,
|
||||||
}
|
}
|
||||||
self.set_model_name(model)
|
self.set_model_name(model)
|
||||||
self.set_voice(voice_id)
|
self.set_voice(voice_id)
|
||||||
@@ -297,6 +322,11 @@ class CartesiaTTSService(AudioContextWordTTSService):
|
|||||||
if self._settings["speed"]:
|
if self._settings["speed"]:
|
||||||
msg["speed"] = self._settings["speed"]
|
msg["speed"] = self._settings["speed"]
|
||||||
|
|
||||||
|
if self._settings["generation_config"]:
|
||||||
|
msg["generation_config"] = self._settings["generation_config"].model_dump(
|
||||||
|
exclude_none=True
|
||||||
|
)
|
||||||
|
|
||||||
return json.dumps(msg)
|
return json.dumps(msg)
|
||||||
|
|
||||||
async def start(self, frame: StartFrame):
|
async def start(self, frame: StartFrame):
|
||||||
@@ -482,16 +512,20 @@ class CartesiaHttpTTSService(TTSService):
|
|||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
language: Language to use for synthesis.
|
language: Language to use for synthesis.
|
||||||
speed: Voice speed control.
|
speed: Voice speed control for non-Sonic-3 models (literal values).
|
||||||
emotion: List of emotion controls.
|
emotion: List of emotion controls for non-Sonic-3 models.
|
||||||
|
|
||||||
.. deprecated:: 0.0.68
|
.. deprecated:: 0.0.68
|
||||||
The `emotion` parameter is deprecated and will be removed in a future version.
|
The `emotion` parameter is deprecated and will be removed in a future version.
|
||||||
|
|
||||||
|
generation_config: Generation configuration for Sonic-3 models. Includes volume,
|
||||||
|
speed (numeric), and emotion (string) parameters.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
language: Optional[Language] = Language.EN
|
language: Optional[Language] = Language.EN
|
||||||
speed: Optional[Literal["slow", "normal", "fast"]] = None
|
speed: Optional[Literal["slow", "normal", "fast"]] = None
|
||||||
emotion: Optional[List[str]] = Field(default_factory=list)
|
emotion: Optional[List[str]] = Field(default_factory=list)
|
||||||
|
generation_config: Optional[GenerationConfig] = None
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@@ -539,6 +573,7 @@ class CartesiaHttpTTSService(TTSService):
|
|||||||
else "en",
|
else "en",
|
||||||
"speed": params.speed,
|
"speed": params.speed,
|
||||||
"emotion": params.emotion,
|
"emotion": params.emotion,
|
||||||
|
"generation_config": params.generation_config,
|
||||||
}
|
}
|
||||||
self.set_voice(voice_id)
|
self.set_voice(voice_id)
|
||||||
self.set_model_name(model)
|
self.set_model_name(model)
|
||||||
@@ -632,6 +667,11 @@ class CartesiaHttpTTSService(TTSService):
|
|||||||
if self._settings["speed"]:
|
if self._settings["speed"]:
|
||||||
payload["speed"] = self._settings["speed"]
|
payload["speed"] = self._settings["speed"]
|
||||||
|
|
||||||
|
if self._settings["generation_config"]:
|
||||||
|
payload["generation_config"] = self._settings["generation_config"].model_dump(
|
||||||
|
exclude_none=True
|
||||||
|
)
|
||||||
|
|
||||||
yield TTSStartedFrame()
|
yield TTSStartedFrame()
|
||||||
|
|
||||||
session = await self._client._get_session()
|
session = await self._client._get_session()
|
||||||
|
|||||||
Reference in New Issue
Block a user