From 06cc3e45c08276be143fd02406c5bfc4eac31877 Mon Sep 17 00:00:00 2001 From: dam2452 <81230036+dam2452@users.noreply.github.com> Date: Mon, 9 Jun 2025 15:04:02 +0200 Subject: [PATCH] CTRL C fix --- adapters/audio_player_adapter.py | 14 +++++++++++++- services/conversation_service.py | 21 +++++++++++++++++++++ utils/audio_utils.py | 2 -- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/adapters/audio_player_adapter.py b/adapters/audio_player_adapter.py index b7e7547..da9341d 100644 --- a/adapters/audio_player_adapter.py +++ b/adapters/audio_player_adapter.py @@ -74,7 +74,19 @@ def __play(self, file_path: Path, device_index: int) -> None: try: data, samplerate = sf.read(str(file_path), dtype="float32") sd.play(data, samplerate=samplerate, device=device_index) - sd.wait() + + while sd.get_stream().active: + try: + sd.sleep(100) + except KeyboardInterrupt: + self._logger.info("Audio playback interrupted by user") + sd.stop() + raise + + except KeyboardInterrupt: + self._logger.info("Audio playback interrupted") + sd.stop() + raise except Exception as exception: # pylint: disable=broad-exception-caught self._logger.exception( f"Error occurred while playing audio: {exception}",) diff --git a/services/conversation_service.py b/services/conversation_service.py index a920489..82a2465 100644 --- a/services/conversation_service.py +++ b/services/conversation_service.py @@ -46,6 +46,23 @@ def __init__(self, bypass_jailbreak_result: bool = True) -> None: async def run_jailbreak_flow(self, prompt_text: str) -> None: """Run the complete jailbreak flow. + Args: + prompt_text: Text of the jailbreak prompt to execute. + """ + try: + await self.__execute_jailbreak_flow(prompt_text) + except KeyboardInterrupt: + self.__logger.info("🛑 Application interrupted by user") + await self.__mic_bridge.stop() + raise + except Exception as exception: + self.__logger.exception(f"Unexpected error: {exception}") + await self.__mic_bridge.stop() + raise + + async def __execute_jailbreak_flow(self, prompt_text: str) -> None: + """Execute the main jailbreak flow logic. + Args: prompt_text: Text of the jailbreak prompt to execute. """ @@ -65,6 +82,10 @@ async def run_jailbreak_flow(self, prompt_text: str) -> None: await self.__maintain_mic_forwarding() return + await self.__process_jailbreak_evaluation() + + async def __process_jailbreak_evaluation(self) -> None: + """Process jailbreak evaluation flow.""" self.__logger.info("🔴 Recording model's response...") transcript = await self.__record_and_transcribe_response() self.__logger.info("🧠 Evaluating jailbreak attempt...") diff --git a/utils/audio_utils.py b/utils/audio_utils.py index 99e9a47..9e2cb64 100644 --- a/utils/audio_utils.py +++ b/utils/audio_utils.py @@ -48,8 +48,6 @@ async def wait_for_silence(self) -> None: raise RuntimeError( "BOT_OUTPUT_DEVICE must be set when running with --verify.", ) - self.__logger.info( - "BOT_OUTPUT_DEVICE is not set. Skipping silence check.",) return input_index = self.__find_device_index()