feat(VoiceServer): Add FIFO message queue to prevent overlapping audio#489
Open
ajbmachon wants to merge 2 commits intodanielmiessler:mainfrom
Open
feat(VoiceServer): Add FIFO message queue to prevent overlapping audio#489ajbmachon wants to merge 2 commits intodanielmiessler:mainfrom
ajbmachon wants to merge 2 commits intodanielmiessler:mainfrom
Conversation
When multiple subagents start tasks simultaneously, they all send voice notifications at once, resulting in garbled overlapping audio output. This adds a server-side FIFO message queue that: - Captures sequence numbers before async operations to guarantee ordering - Processes messages one at a time (sequential playback) - Uses insertion sort to maintain order - Includes queue overflow protection (max 100 messages) - Uses try/finally to ensure processing flag is always reset - Exposes queue status in /health endpoint API response now includes queue_position and queue_depth for visibility. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Prevents memory leak by removing stale rate limit entries every 5 minutes. Without this, the requestCounts map grows indefinitely in long-running servers. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
When launching multiple subagents simultaneously (a common pattern in PAI workflows), each agent sends a voice notification as it starts. Since these notifications arrive at the VoiceServer nearly simultaneously, multiple
afplayprocesses spawn concurrently, resulting in garbled, overlapping audio output.Solution
This PR adds a server-side FIFO message queue that serializes voice playback:
try/finallyguard ensures processing flag resets even on errorsChanges
QueuedMessageinterface and queue state managementdrainQueueInOrder()andprocessQueue()functions/notifyand/paiendpoints to enqueue instead of play directlyqueue_positionandqueue_depth/healthendpoint shows queue statusTesting
Tested with concurrent curl requests - messages now play sequentially in arrival order.
Thank you for PAI - it's been incredibly useful. Happy to adjust anything based on your feedback.