Merge pull request #1671 from pipecat-ai/khk/rime-arcana

support for rime arcana model
This commit is contained in:
Mark Backman
2025-05-05 10:54:50 -04:00
committed by GitHub
3 changed files with 20 additions and 2 deletions

View File

@@ -5,6 +5,12 @@ All notable changes to **Pipecat** will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- Added support to `RimeHttpTTSService` for the `arcana` model.
## [0.0.66] - 2025-05-02
### Added
@@ -120,7 +126,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
not a very common case.
- Added `RivaSegmentedSTTService`, which allows Riva offline/batch models, such
as to be "canary-1b-asr" used in Pipecat.
as to be "canary-1b-asr" used in Pipecat.
### Deprecated

View File

@@ -44,7 +44,8 @@ async def run_bot(webrtc_connection: SmallWebRTCConnection, _: argparse.Namespac
tts = RimeHttpTTSService(
api_key=os.getenv("RIME_API_KEY", ""),
voice_id="rex",
voice_id="luna",
model="arcana",
aiohttp_session=session,
)

View File

@@ -400,6 +400,13 @@ class RimeHttpTTSService(TTSService):
payload["modelId"] = self._model_name
payload["samplingRate"] = self.sample_rate
# Arcana does not support PCM audio
if payload["modelId"] == "arcana":
headers["Accept"] = "audio/wav"
need_to_strip_wav_header = True
else:
need_to_strip_wav_header = False
try:
await self.start_ttfb_metrics()
@@ -420,6 +427,10 @@ class RimeHttpTTSService(TTSService):
CHUNK_SIZE = 1024
async for chunk in response.content.iter_chunked(CHUNK_SIZE):
if need_to_strip_wav_header and chunk.startswith(b"RIFF"):
chunk = chunk[44:]
need_to_strip_wav_header = False
if len(chunk) > 0:
await self.stop_ttfb_metrics()
frame = TTSAudioRawFrame(chunk, self.sample_rate, 1)