From 0e4115049b137a040bc56e6c49436e06c0427592 Mon Sep 17 00:00:00 2001 From: Filipi Fuchter Date: Wed, 16 Apr 2025 06:44:57 -0300 Subject: [PATCH] Refactoring to use keep alive sessions. --- src/pipecat/audio/turn/remote_smart_turn.py | 24 +++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/pipecat/audio/turn/remote_smart_turn.py b/src/pipecat/audio/turn/remote_smart_turn.py index a971dac37..f54eb2372 100644 --- a/src/pipecat/audio/turn/remote_smart_turn.py +++ b/src/pipecat/audio/turn/remote_smart_turn.py @@ -13,9 +13,7 @@ import numpy as np import requests from loguru import logger -from pipecat.audio.turn.base_turn_analyzer import ( - BaseEndOfTurnAnalyzer, -) +from pipecat.audio.turn.base_turn_analyzer import BaseEndOfTurnAnalyzer class RemoteSmartTurnAnalyzer(BaseEndOfTurnAnalyzer): @@ -27,30 +25,34 @@ class RemoteSmartTurnAnalyzer(BaseEndOfTurnAnalyzer): logger.error("REMOTE_SMART_TURN_URL is not set.") raise Exception("REMOTE_SMART_TURN_URL environment variable must be provided.") + # Use a session to reuse connections (keep-alive) + self.session = requests.Session() + self.session.headers.update({"Connection": "keep-alive"}) + def _serialize_array(self, audio_array: np.ndarray) -> bytes: - """Serializes a NumPy array into bytes using np.save.""" logger.debug("Serializing NumPy array to bytes...") buffer = io.BytesIO() - np.save(buffer, audio_array) # Saves in npy format + np.save(buffer, audio_array) serialized_bytes = buffer.getvalue() logger.debug(f"Serialized size: {len(serialized_bytes)} bytes") return serialized_bytes def _send_raw_request(self, data_bytes: bytes): - """Sends the bytes as the raw request body.""" headers = {"Content-Type": "application/octet-stream"} logger.debug( f"Sending {len(data_bytes)} bytes as raw body to {self.remote_smart_turn_url}..." ) try: - response = requests.post( - self.remote_smart_turn_url, data=data_bytes, headers=headers, timeout=60 - ) # Added timeout + response = self.session.post( + self.remote_smart_turn_url, + data=data_bytes, + headers=headers, + timeout=60, + ) logger.debug("\n--- Response ---") logger.debug(f"Status Code: {response.status_code}") - # Try to logger.debug JSON if successful, otherwise logger.debug text if response.ok: try: logger.debug("Response JSON:") @@ -62,7 +64,7 @@ class RemoteSmartTurnAnalyzer(BaseEndOfTurnAnalyzer): else: logger.debug("Response Content (Error):") logger.debug(response.text) - response.raise_for_status() # Raise an exception for bad status codes + response.raise_for_status() except requests.exceptions.RequestException as e: logger.debug(f"Failed to send raw request to Daily Smart Turn: {e}")