{"record":{"id":"186bcc2f228339a1","repo":"alibaba/spring-ai-alibaba","slug":"feedback-list-is-empty-or-contains-no-valid-messag","errorCode":null,"errorMessage":"Feedback list is empty or contains no valid Message instances, stop and wait for more input.","messagePattern":"Feedback list is empty or contains no valid Message instances, stop and wait for more input\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"spring-ai-alibaba-agent-framework/src/main/java/com/alibaba/cloud/ai/graph/agent/hook/InterruptionHook.java","lineNumber":101,"sourceCode":"\t\t\tlog.debug(\"No interruption feedback found in state, continue reasoning with no updates.\");\n\t\t\treturn CompletableFuture.completedFuture(Map.of());\n\t\t}\n\n\t\tList<Message> feedbackMessages = new ArrayList<>();\n\t\t\n\t\t// Check if feedback is List<Message>, UserMessage, or String\n\t\tif (feedback instanceof List<?> feedbackList) {\n\t\t\t// Check if all elements in the list are Message instances\n\t\t\tfor (Object item : feedbackList) {\n\t\t\t\tif (item instanceof Message) {\n\t\t\t\t\tfeedbackMessages.add((Message) item);\n\t\t\t\t} else {\n\t\t\t\t\tlog.warn(\"Feedback list contains non-Message item, ignoring. Type: {}\", \n\t\t\t\t\t\t\titem != null ? item.getClass().getName() : \"null\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (feedbackMessages.isEmpty()) {\n\t\t\t\tlog.warn(\"Feedback list is empty or contains no valid Message instances, stop and wait for more input.\");\n\t\t\t\treturn CompletableFuture.completedFuture(Map.of());\n\t\t\t}\n\t\t} else if (feedback instanceof UserMessage) {\n\t\t\tfeedbackMessages.add((UserMessage) feedback);\n\t\t} else if (feedback instanceof String) {\n\t\t\tfeedbackMessages.add(new UserMessage((String) feedback));\n\t\t} else {\n\t\t\tlog.warn(\"Interruption feedback is neither List<Message>, UserMessage nor String, stop and wait for more input. Type: {}\",\n\t\t\t\t\tfeedback.getClass().getName());\n\t\t\treturn CompletableFuture.completedFuture(Map.of());\n\t\t}\n\t\t\n\t\t// Get current messages list\n\t\t@SuppressWarnings(\"unchecked\")\n\t\tList<Message> messages = (List<Message>) state.value(\"messages\").orElse(new ArrayList<>());\n\n\t\tif (!messages.isEmpty() && messages.get(messages.size() - 1) instanceof AssistantMessage assistantMessage) {\n\t\t\tif (assistantMessage.hasToolCalls()) {","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/alibaba/spring-ai-alibaba/blob/f82da0b50f35744c13968191be2b1cd2452ef550/spring-ai-alibaba-agent-framework/src/main/java/com/alibaba/cloud/ai/graph/agent/hook/InterruptionHook.java#L83-L119","documentation":"InterruptionHook.apply: the feedback list existed but after filtering, no valid Message instances remained. The hook stops and waits — the agent stays interrupted pending properly-typed human input instead of resuming with an empty update.","triggerScenarios":"Thrown at spring-ai-alibaba-agent-framework/src/main/java/com/alibaba/cloud/ai/graph/agent/hook/InterruptionHook.java:101 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Resubmit feedback as Message instances or a plain String","Check the caller that builds the feedback list for type errors","Treat as a wait-state: resume the graph once valid feedback arrives"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f82da0b50f35744c13968191be2b1cd2452ef550","analyzedAt":"2026-09-09T15:32:42.421Z","contentChangedAt":"2026-09-09T15:32:42.421Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}