From c6ece6172cd398e324d729a4e85aa2c8fb75372c Mon Sep 17 00:00:00 2001 From: lauridsdev <65713140+lauridsdev@users.noreply.github.com> Date: Sat, 21 Sep 2024 12:50:09 +0200 Subject: [PATCH] fix bug and optimize keepalive --- src/pipecat/services/elevenlabs.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pipecat/services/elevenlabs.py b/src/pipecat/services/elevenlabs.py index ac8dc4c3d..9f999027c 100644 --- a/src/pipecat/services/elevenlabs.py +++ b/src/pipecat/services/elevenlabs.py @@ -7,6 +7,7 @@ import asyncio import base64 import json +import time from typing import Any, AsyncGenerator, List, Literal, Mapping, Tuple from pydantic import BaseModel @@ -117,6 +118,7 @@ def __init__( # there's an interruption or TTSStoppedFrame. self._started = False self._cumulative_time = 0 + self._last_message_time = 0 def can_generate_metrics(self) -> bool: return True @@ -134,8 +136,9 @@ async def set_voice(self, voice: str): await self._connect() async def start(self, frame: StartFrame): - await super().start(frame) - await self._connect() + if not (self._websocket and self._websocket.open): + await super().start(frame) + await self._connect() async def stop(self, frame: EndFrame): await super().stop(frame) @@ -225,7 +228,9 @@ async def _keepalive_task_handler(self): while True: try: await asyncio.sleep(10) - await self._send_text("") + current_time = time.time() + if current_time - self._last_message_time >= 10: + await self._send_text("") except asyncio.CancelledError: break except Exception as e: @@ -235,6 +240,7 @@ async def _send_text(self, text: str): if self._websocket: msg = {"text": text + " "} await self._websocket.send(json.dumps(msg)) + self._last_message_time = time.time() async def run_tts(self, text: str) -> AsyncGenerator[Frame, None]: logger.debug(f"Generating TTS: [{text}]")