|
| 1 | +import asyncio |
1 | 2 | from dataclasses import dataclass |
2 | 3 | from datetime import ( |
3 | 4 | UTC, |
|
43 | 44 | get_or_create_editing_session_for_thread, |
44 | 45 | interrupt_editing_session, |
45 | 46 | invoke_editing_lambda, |
46 | | - mark_session_as_active, |
47 | 47 | store_editing_session_for_thread, |
48 | 48 | wait_for_interruption, |
49 | 49 | ) |
@@ -401,7 +401,50 @@ async def handle_slack_message( |
401 | 401 | query_id=None, |
402 | 402 | user_id=context.user, |
403 | 403 | ) |
404 | | - elif session_status and session_status.value in ["active", "waiting"]: |
| 404 | + elif session_status and session_status.value == "startup": |
| 405 | + LOGGER.info(f"Session {existing_editing_id} is in STARTUP state, waiting for it to become ACTIVE") |
| 406 | + max_wait: int = 30 |
| 407 | + poll_interval: float = 0.5 |
| 408 | + elapsed: float = 0 |
| 409 | + |
| 410 | + while elapsed < max_wait: |
| 411 | + await asyncio.sleep(poll_interval) |
| 412 | + elapsed += poll_interval |
| 413 | + |
| 414 | + session_status = await get_editing_session_status(existing_editing_id) |
| 415 | + if session_status and session_status.value in ["active", "waiting"]: |
| 416 | + LOGGER.info( |
| 417 | + f"Session {existing_editing_id} transitioned to {session_status.value}, " |
| 418 | + f"proceeding with interruption" |
| 419 | + ) |
| 420 | + break |
| 421 | + elif session_status and session_status.value not in ["startup", "active", "waiting"]: |
| 422 | + LOGGER.warning( |
| 423 | + f"Session {existing_editing_id} in unexpected state {session_status.value}, aborting" |
| 424 | + ) |
| 425 | + error_text = "❌ Session is in an unexpected state. Please try again." |
| 426 | + return SlackMessageResponse( |
| 427 | + response_text=error_text, |
| 428 | + channel=context.channel, |
| 429 | + thread_ts=context.thread_ts, |
| 430 | + bot_token=integration.slack_bot_token, |
| 431 | + query_id=None, |
| 432 | + user_id=context.user, |
| 433 | + ) |
| 434 | + |
| 435 | + if not session_status or session_status.value not in ["active", "waiting"]: |
| 436 | + LOGGER.warning(f"Timeout waiting for session {existing_editing_id} to become ACTIVE/WAITING") |
| 437 | + error_text = "⏳ Previous edit session is still starting up. Please wait a moment and try again." |
| 438 | + return SlackMessageResponse( |
| 439 | + response_text=error_text, |
| 440 | + channel=context.channel, |
| 441 | + thread_ts=context.thread_ts, |
| 442 | + bot_token=integration.slack_bot_token, |
| 443 | + query_id=None, |
| 444 | + user_id=context.user, |
| 445 | + ) |
| 446 | + |
| 447 | + if session_status and session_status.value in ["active", "waiting"]: |
405 | 448 | LOGGER.info(f"Interrupting {session_status.value} session {existing_editing_id} for new edit request") |
406 | 449 |
|
407 | 450 | interrupt_success = await interrupt_editing_session(existing_editing_id) |
@@ -508,13 +551,6 @@ async def handle_slack_message( |
508 | 551 | except Exception as e: |
509 | 552 | LOGGER.error(f"Failed to store editing session mapping: {e}", exc_info=True) |
510 | 553 |
|
511 | | - if existing_editing_id: |
512 | | - mark_success = await mark_session_as_active(existing_editing_id) |
513 | | - if not mark_success: |
514 | | - LOGGER.warning( |
515 | | - f"Failed to mark session {existing_editing_id} as ACTIVE, but proceeding with Lambda invocation" |
516 | | - ) |
517 | | - |
518 | 554 | result = await invoke_editing_lambda( |
519 | 555 | prompt=context.text, |
520 | 556 | domain=domain_to_use, |
|
0 commit comments