From a7a70ba14dd3564e719cf431a32d61d57118ed4c Mon Sep 17 00:00:00 2001 From: srirama sai bhavana Date: Wed, 15 Apr 2026 12:35:26 +0530 Subject: [PATCH] Added intelligent interruption handler --- demo.py | 12 ++++++++++++ interrupt_handler/config.py | 3 +++ interrupt_handler/handler.py | 29 +++++++++++++++++++++++++++++ interrupt_handler/utils.py | 13 +++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 demo.py create mode 100644 interrupt_handler/config.py create mode 100644 interrupt_handler/handler.py create mode 100644 interrupt_handler/utils.py diff --git a/demo.py b/demo.py new file mode 100644 index 0000000000..817835287c --- /dev/null +++ b/demo.py @@ -0,0 +1,12 @@ +from interrupt_handler.handler import InterruptionHandler + +handler = InterruptionHandler() + +print("=== DEMO ===") + +handler.set_agent_state(True) +print("Speaking + yeah →", handler.handle_input("yeah")) +print("Speaking + stop →", handler.handle_input("stop")) + +handler.set_agent_state(False) +print("Silent + yeah →", handler.handle_input("yeah")) \ No newline at end of file diff --git a/interrupt_handler/config.py b/interrupt_handler/config.py new file mode 100644 index 0000000000..283be9d69e --- /dev/null +++ b/interrupt_handler/config.py @@ -0,0 +1,3 @@ +IGNORE_WORDS = ["yeah", "ok", "hmm", "right", "uh-huh"] + +INTERRUPT_WORDS = ["stop", "wait", "no", "hold", "pause"] \ No newline at end of file diff --git a/interrupt_handler/handler.py b/interrupt_handler/handler.py new file mode 100644 index 0000000000..4c8f188bd9 --- /dev/null +++ b/interrupt_handler/handler.py @@ -0,0 +1,29 @@ +from interrupt_handler.config import IGNORE_WORDS, INTERRUPT_WORDS +from interrupt_handler.utils import normalize_text, contains_interrupt, is_ignore_word + + +class InterruptionHandler: + def __init__(self): + self.is_agent_speaking = False + + def set_agent_state(self, speaking: bool): + self.is_agent_speaking = speaking + + def handle_input(self, user_input: str) -> str: + text = normalize_text(user_input) + + if self.is_agent_speaking: + + # Mixed input → interrupt + if contains_interrupt(text, INTERRUPT_WORDS): + return "INTERRUPT" + + # Only filler → ignore + if is_ignore_word(text, IGNORE_WORDS): + return "IGNORE" + + # Default → interrupt + return "INTERRUPT" + + else: + return "RESPOND" \ No newline at end of file diff --git a/interrupt_handler/utils.py b/interrupt_handler/utils.py new file mode 100644 index 0000000000..ccdf9f1496 --- /dev/null +++ b/interrupt_handler/utils.py @@ -0,0 +1,13 @@ +def normalize_text(text: str) -> str: + return text.lower().strip() + + +def contains_interrupt(text: str, interrupt_words: list) -> bool: + for word in interrupt_words: + if word in text: + return True + return False + + +def is_ignore_word(text: str, ignore_words: list) -> bool: + return text in ignore_words \ No newline at end of file