{"record":{"id":"b55ae8be73c72e1c","repo":"iflytek/astron-agent","slug":"model-check-failed","errorCode":"MODEL_CHECK_FAILED","errorMessage":"MODEL_CHECK_FAILED","messagePattern":"MODEL_CHECK_FAILED","errorType":"error_code","errorClass":"BusinessException","httpStatus":null,"severity":"error","filePath":"console/backend/hub/src/main/java/com/iflytek/astron/console/hub/service/chat/impl/BotChatServiceImpl.java","lineNumber":253,"sourceCode":"     * @param request Debug chat bot request parameters\n     * @param sseEmitter SSE emitter\n     * @param sseId SSE ID\n     */\n    @Override\n    public void debugChatMessageBot(DebugChatBotReqDto request, SseEmitter sseEmitter, String sseId) {\n        try {\n            List<SparkChatRequest.MessageDto> messageList;\n            // get personality config prompt\n            String prompt = personalityConfigService.getChatPrompt(request.getPersonalityConfig(), request.getPrompt());\n            ModelConfigResult modelConfig = resolveChatModelConfiguration(\n                    request.getModelId(), request.getModel(), request.getUid(), request.getSpaceId(), sseEmitter);\n            int maxInputTokens = modelConfig == null ? this.maxInputTokens : modelConfig.maxInputTokens();\n            messageList = buildDebugMessageList(request.getText(), prompt, request.getMessages(), maxInputTokens,\n                    request.getMaasDatasetList());\n            if (modelConfig != null) {\n                if (!modelService.checkModelBase(modelConfig.llmInfoVo().getLlmId(),\n                        modelConfig.llmInfoVo().getServiceId(), modelConfig.llmInfoVo().getUrl(), request.getUid(), request.getSpaceId())) {\n                    throw new BusinessException(ResponseEnum.MODEL_CHECK_FAILED);\n                }\n            }\n            AgentChatTask task = AgentChatTask.builder()\n                    .llmInfoVo(modelConfig == null ? null : modelConfig.llmInfoVo())\n                    .sparkModelName(modelConfig == null ? request.getModel() : null)\n                    .messages(messageList)\n                    .openedTool(request.getOpenedTool())\n                    .mcpServerUrls(request.getMcpServerUrls())\n                    .skills(enrichBotSkills(request.getSkills()))\n                    .tools(request.getTools())\n                    .workflows(request.getWorkflows())\n                    .userId(request.getUid())\n                    .chatId(null)\n                    .botId(request.getBotId())\n                    .spaceId(request.getSpaceId())\n                    .debugSessionId(request.getDebugSessionId())\n                    .rawUserText(request.getText())\n                    .chatReqRecords(null)","sourceCodeStart":235,"sourceCodeEnd":271,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/console/backend/hub/src/main/java/com/iflytek/astron/console/hub/service/chat/impl/BotChatServiceImpl.java#L235-L271","documentation":"Thrown in BotChatServiceImpl.debugChatMessageBot when modelService.checkModelBase rejects the resolved model's llmId/serviceId/url for the requesting uid/spaceId. It wraps ResponseEnum.MODEL_CHECK_FAILED, meaning the model failed a base availability/authorization check before the chat task was built.","triggerScenarios":"debugChatMessageBot resolves a modelConfig; if modelConfig != null and checkModelBase(llmId, serviceId, url, uid, spaceId) returns false (model unavailable, not deployed, or not permitted in that space), BusinessException(MODEL_CHECK_FAILED) is thrown.","commonSituations":"Bot configured with a model the user/space has no access to; model service URL changed or deployment is down; model was unpublished/removed but still referenced in bot config; cross-space usage of a private model.","solutions":["Confirm the bot's configured model still exists and is deployed (check llmId/serviceId/url).","Verify the user (uid) has access to the model in spaceId; grant model permissions if needed.","Re-select a valid model in the bot configuration and save.","Check model service health/logs for why checkModelBase returned false."],"exampleFix":"// before\nif (!modelService.checkModelBase(modelConfig.llmInfoVo().getLlmId(),\n        modelConfig.llmInfoVo().getServiceId(), modelConfig.llmInfoVo().getUrl(), request.getUid(), request.getSpaceId())) {\n    throw new BusinessException(ResponseEnum.MODEL_CHECK_FAILED);\n}\n// after\nif (!modelService.checkModelBase(modelConfig.llmInfoVo().getLlmId(),\n        modelConfig.llmInfoVo().getServiceId(), modelConfig.llmInfoVo().getUrl(), request.getUid(), request.getSpaceId())) {\n    log.error(\"Model check failed, llmId: {}, uid: {}, spaceId: {}\",\n            modelConfig.llmInfoVo().getLlmId(), request.getUid(), request.getSpaceId());\n    throw new BusinessException(ResponseEnum.MODEL_CHECK_FAILED);\n}","handlingStrategy":"validation","validationCode":"// Pre-flight check before debug chat:\nboolean ok = modelService.checkModelBase(llmId, serviceId, url, uid, spaceId);\nif (!ok) { throw new BusinessException(ResponseEnum.MODEL_CHECK_FAILED); }","typeGuard":null,"tryCatchPattern":"try {\n    botChatService.debugChatMessageBot(request, sseEmitter);\n} catch (BusinessException e) {\n    if (ResponseEnum.MODEL_CHECK_FAILED == e.getCode()) {\n        // prompt user to re-select an available model for this space\n    }\n}","preventionTips":["Re-validate bot model configuration whenever models are republished or removed.","Keep per-space model permission lists in sync with bot configs.","Surface model availability in the UI before allowing chat."],"tags":["model-validation","authorization","chat","llm"],"backgroundTag":"invalid-config-value","analyzedSha":"5e758547a83371a5a4b29dadf4ac03e8dd527635","analyzedAt":"2026-09-12T08:03:51.356Z","contentChangedAt":"2026-09-12T08:03:51.356Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}