iflytek/astron-agent · error · CustomException

EVENT_REGISTRY_NOT_FOUND_ERROR

EVENT_REGISTRY_NOT_FOUND_ERROR

Error message

{CodeEnum.EVENT_REGISTRY_NOT_FOUND_ERROR.msg}

What it means

qa_fetch_resume_data() looks up the node's paused event in the EventRegistry by event_id; if the registry returns None it raises EVENT_REGISTRY_NOT_FOUND_ERROR. The workflow cannot resume the question-answer node because the event it paused on is no longer registered (e.g. lost due to restart or expiry).

Solutions

  1. Re-run or re-trigger the question-answer node so a fresh event is registered, then resume with the new event_id
  2. Check EventRegistry persistence/TTL configuration if events should survive restarts
  3. Verify the event_id used in the resume call matches the one emitted during the interrupt
Defensive patterns

Strategy: try-catch

Validate before calling

# check the event still exists before attempting resume
event = EventRegistry().get_event(event_id=evt_id)
if event is None: retrigger_qa_node()

Try / catch

try:
    data = await node.qa_fetch_resume_data()
except CustomException as e:
    if e.code == CodeEnum.EVENT_REGISTRY_NOT_FOUND_ERROR:
        retrigger_qa_node()  # event expired/lost; start a fresh interaction

Prevention

When it happens

Trigger: Resuming a paused QA node (via handle_prompt_template_response or async_execute) with an event_id that has no registered event — the registry entry was evicted, expired, or never created because the process restarted.

Common situations: Service restart/crash losing in-memory or unexpired registry state, user replying after the event timed out and was cleaned up, or a corrupted event_id passed in the resume callback.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12). Data as JSON: /api/errors/e4ac1f1ce800bd7a. Report an issue: GitHub.

Appendix: source

Thrown at core/workflow/engine/nodes/question_answer/question_answer_node.py:323

            )

        await span_context.add_info_events_async(
            {"interrupt option": json.dumps(interrupt_options, ensure_ascii=False)}
        )
        return interrupt_options

    async def qa_fetch_resume_data(self, span_context: Span) -> ResumeData:
        """
        Asynchronously fetch resume data

        :param span_context: Context object for tracking and recording events
        :return: ResumeData object containing event type, content, retries, and timestamp
        :raises CustomException: When specific errors occur
        """
        try:
            event = EventRegistry().get_event(event_id=self.event_id)
            if event is None:
                raise CustomException(
                    err_code=CodeEnum.EVENT_REGISTRY_NOT_FOUND_ERROR,
                    err_msg=CodeEnum.EVENT_REGISTRY_NOT_FOUND_ERROR.msg,
                    cause_error="Event does not exist",
                )
            res = await EventRegistry().fetch_resume_data(
                queue_name=event.get_node_q_name(), timeout=event.timeout
            )
            if res:
                msg_str = res.get("message", "")
                message: Dict[str, Any] = json.loads(msg_str)
                metadata = res.get("metadata", {})
                resume_data = ResumeData(
                    event_type=message.get("event_type", ""),
                    content=message.get("content", ""),
                    retries=int(metadata.get("retries", "0")),
                    timestamp=int(metadata.get("timestamp", "0")),
                )
                await span_context.add_info_events_async(

View on GitHub (pinned to 5e758547a8)