iflytek/astron-agent · error

Record for re-answer request does not match

Error message

Record for re-answer request does not match

What it means

For re-answer requests, the found ChatReqRecords row must belong to the same chatId and UID as the current request. If chatReqRecord.getChatId() or getUid() differs, 'Record for re-answer request does not match' is sent over SSE and the request is aborted, preventing cross-conversation or cross-user regeneration.

Solutions

  1. Ensure the requestId is taken from the same conversation the reAnswer targets
  2. Clear client-side message caches when switching user/space/chat
  3. Re-fetch conversation history after any account or space switch before regenerating

Example fix

// before
reAnswer({ chatId: currentChatId, requestId: lastSelectedRequestId });
// after
if (lastSelectedRequestId.chatId !== currentChatId) { lastSelectedRequestId = null; return; }
reAnswer({ chatId: currentChatId, requestId: lastSelectedRequestId.id });
Defensive patterns

Strategy: validation

Validate before calling

if (selectedMessage.chatId !== currentChatId || selectedMessage.uid !== currentUid) { clearSelection(); return; }

Type guard

function belongsToChat(rec, chatId, uid) { return rec != null && rec.chatId === chatId && rec.uid === uid; }

Prevention

When it happens

Trigger: Calling reAnswer where requestId resolves to a record whose chatId or uid differs from the request's chatId / authenticated user.

Common situations: Client mixes up message ids between two open conversations; reusing a requestId after switching accounts or spaces; cached state after the chat was branched (tree index child chats).

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


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

Appendix: source

Thrown at console/backend/hub/src/main/java/com/iflytek/astron/console/hub/controller/chat/ChatMessageController.java:181

        Integer botId = chatList.getBotId();
        if (chatBotDataService.botIsDeleted(botId.longValue())) {
            log.warn("Current conversation window assistant has been deleted, sseId: {}, uid: {}, chatId: {}, botId: {}", sseId, uid, chatId, botId);
            SseEmitterUtil.sendError(sseEmitter, "Current conversation window assistant has been deleted");
            SseEmitterUtil.sendEndAndComplete(sseEmitter);
            return null;
        }

        // Re-answering requires validating the legitimacy of question ID
        if (requestId != null) {
            ChatReqRecords chatReqRecord = chatDataService.findRequestById(requestId);
            if (chatReqRecord == null) {
                log.warn("Record for re-answer request does not exist, sseId: {}, requestId: {}", sseId, requestId);
                SseEmitterUtil.sendError(sseEmitter, "Record for re-answer request does not exist");
                SseEmitterUtil.sendEndAndComplete(sseEmitter);
                return null;
            } else if (!chatReqRecord.getChatId().equals(chatId) || !chatReqRecord.getUid().equals(uid)) {
                log.warn("Record for re-answer request does not match, sseId: {}, uid: {}, chatId: {}, requestId: {}", sseId, uid, chatId, requestId);
                SseEmitterUtil.sendError(sseEmitter, "Record for re-answer request does not match");
                SseEmitterUtil.sendEndAndComplete(sseEmitter);
                return null;
            }
        }

        return new ChatContext(uid, chatId, botId);
    }

    /**
     * Method to process chat request
     *
     * @param chatContext Chat context object
     * @param text User input text
     * @param fileUrl File URL
     * @param sseEmitter SSE emitter object
     * @param sseId SSE unique identifier
     * @return Returns SseEmitter object
     */

View on GitHub (pinned to 5e758547a8)