Merge pull request #3207 from pipecat-ai/aleix/voicemail-conversation-detected-event
VoicemailDetector: add on_conversation_detected event
This commit is contained in:
1
changelog/3207.added.md
Normal file
1
changelog/3207.added.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
- Added `on_conversation_detected` event to `VoicemaiDetector`.
|
||||||
@@ -113,8 +113,12 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
|||||||
logger.info(f"Client disconnected")
|
logger.info(f"Client disconnected")
|
||||||
await task.cancel()
|
await task.cancel()
|
||||||
|
|
||||||
|
@voicemail.event_handler("on_conversation_detected")
|
||||||
|
async def on_conversation_detected(processor):
|
||||||
|
logger.info("Conversation detected!")
|
||||||
|
|
||||||
@voicemail.event_handler("on_voicemail_detected")
|
@voicemail.event_handler("on_voicemail_detected")
|
||||||
async def handle_voicemail(processor):
|
async def on_voicemail_detected(processor):
|
||||||
logger.info("Voicemail detected! Leaving a message...")
|
logger.info("Voicemail detected! Leaving a message...")
|
||||||
|
|
||||||
# Push frames using standard Pipecat pattern
|
# Push frames using standard Pipecat pattern
|
||||||
|
|||||||
@@ -252,7 +252,8 @@ class ClassificationProcessor(FrameProcessor):
|
|||||||
self._voicemail_notifier = voicemail_notifier
|
self._voicemail_notifier = voicemail_notifier
|
||||||
self._voicemail_response_delay = voicemail_response_delay
|
self._voicemail_response_delay = voicemail_response_delay
|
||||||
|
|
||||||
# Register the voicemail detected event
|
# Register the conversation and voicemail detected events
|
||||||
|
self._register_event_handler("on_conversation_detected")
|
||||||
self._register_event_handler("on_voicemail_detected")
|
self._register_event_handler("on_voicemail_detected")
|
||||||
|
|
||||||
# Aggregation state for collecting complete LLM responses
|
# Aggregation state for collecting complete LLM responses
|
||||||
@@ -350,6 +351,7 @@ class ClassificationProcessor(FrameProcessor):
|
|||||||
logger.info(f"{self}: CONVERSATION detected")
|
logger.info(f"{self}: CONVERSATION detected")
|
||||||
await self._gate_notifier.notify() # Close the classifier gate
|
await self._gate_notifier.notify() # Close the classifier gate
|
||||||
await self._conversation_notifier.notify() # Release buffered TTS frames
|
await self._conversation_notifier.notify() # Release buffered TTS frames
|
||||||
|
await self._call_event_handler("on_conversation_detected")
|
||||||
|
|
||||||
elif "VOICEMAIL" in response:
|
elif "VOICEMAIL" in response:
|
||||||
# Voicemail detected - trigger voicemail handling
|
# Voicemail detected - trigger voicemail handling
|
||||||
@@ -539,6 +541,9 @@ class VoicemailDetector(ParallelPipeline):
|
|||||||
custom_prompt = "Your custom classification logic here. " + VoicemailDetector.CLASSIFIER_RESPONSE_INSTRUCTION
|
custom_prompt = "Your custom classification logic here. " + VoicemailDetector.CLASSIFIER_RESPONSE_INSTRUCTION
|
||||||
|
|
||||||
Events:
|
Events:
|
||||||
|
on_conversation_detected: Triggered when a human conversation is detected. The
|
||||||
|
event handler receives one argument: the ClassificationProcessor instance
|
||||||
|
which can be used to push frames.
|
||||||
on_voicemail_detected: Triggered when voicemail is detected after the configured
|
on_voicemail_detected: Triggered when voicemail is detected after the configured
|
||||||
delay. The event handler receives one argument: the ClassificationProcessor
|
delay. The event handler receives one argument: the ClassificationProcessor
|
||||||
instance which can be used to push frames.
|
instance which can be used to push frames.
|
||||||
@@ -701,7 +706,7 @@ VOICEMAIL SYSTEM (respond "VOICEMAIL"):
|
|||||||
event_name: The name of the event to handle.
|
event_name: The name of the event to handle.
|
||||||
handler: The function to call when the event occurs.
|
handler: The function to call when the event occurs.
|
||||||
"""
|
"""
|
||||||
if event_name == "on_voicemail_detected":
|
if event_name in ("on_conversation_detected", "on_voicemail_detected"):
|
||||||
self._classification_processor.add_event_handler(event_name, handler)
|
self._classification_processor.add_event_handler(event_name, handler)
|
||||||
else:
|
else:
|
||||||
super().add_event_handler(event_name, handler)
|
super().add_event_handler(event_name, handler)
|
||||||
|
|||||||
Reference in New Issue
Block a user