refactor: Update GenerationJobManager and ResumableAgentController for improved event handling

- Modified GenerationJobManager to resolve readyPromise immediately, eliminating startup latency and allowing early event buffering for late subscribers.
- Enhanced event handling logic to replay buffered events when the first subscriber connects, ensuring no events are lost due to race conditions.
- Updated comments for clarity on the new event synchronization mechanism and its benefits in both Redis and in-memory modes.
This commit is contained in:
Danny Avila 2025-12-15 10:40:28 -05:00
parent d221d56172
commit bb5e12e30a
No known key found for this signature in database
GPG key ID: BF31EEB2C5CA0956
2 changed files with 53 additions and 15 deletions

View file

@ -158,10 +158,12 @@ const ResumableAgentController = async (req, res, next, initializeClient, addTit
// conversationId is pre-generated, no need to update from callback
};
// Start background generation - wait for subscriber with timeout fallback
// Start background generation - readyPromise resolves immediately now
// (sync mechanism handles late subscribers)
const startGeneration = async () => {
try {
await Promise.race([job.readyPromise, new Promise((resolve) => setTimeout(resolve, 3500))]);
// Short timeout as safety net - promise should already be resolved
await Promise.race([job.readyPromise, new Promise((resolve) => setTimeout(resolve, 100))]);
} catch (waitError) {
logger.warn(
`[ResumableAgentController] Error waiting for subscriber: ${waitError.message}`,