{"record":{"id":"106947777fce5b36","repo":"iflytek/astron-agent","slug":"desk-ragerror","errorCode":"DESK_RAGError","errorMessage":"SPARKDESK-RAG request failed with status: {resp.status}","messagePattern":"SPARKDESK-RAG request failed with status: (.+?)","errorType":"error_code","errorClass":"ThirdPartyException","httpStatus":null,"severity":"error","filePath":"core/knowledge/infra/desk/sparkdesk.py","lineNumber":102,"sourceCode":"                        json=body,\n                        headers=await assemble_auth_headers_async(),\n                        timeout=aiohttp.ClientTimeout(\n                            total=float(os.getenv(\"DESK_CLIENT_TIMEOUT\", \"30\"))\n                        ),  # Set timeout\n                    ) as resp:\n\n                        response_text = await resp.text()\n                        logger.info(\n                            f\"Async response from SPARKDESK-RAG: {response_text}\"\n                        )\n                        span_context.add_info_events(\n                            {\"SPARKDESK_OUTPUT\": response_text}\n                        )\n\n                        if resp.status != 200:\n                            error_msg = f\"SPARKDESK-RAG request failed with status: {resp.status}\"\n                            logger.error(error_msg)\n                            raise ThirdPartyException(\n                                e=CodeEnum.DESK_RAGError, msg=error_msg\n                            )\n\n                        try:\n                            msg_js = json.loads(response_text)\n                        except json.JSONDecodeError as e:\n                            error_msg = f\"Failed to parse JSON response: {e}\"\n                            logger.error(error_msg)\n                            raise ThirdPartyException(\n                                e=CodeEnum.DESK_RAGError, msg=error_msg\n                            ) from e\n\n                        if msg_js.get(\"code\") == 0 and msg_js.get(\"flag\"):\n                            return msg_js.get(\"data\", {})\n                        error_desc = msg_js.get(\n                            \"desc\", \"Unknown error from SPARKDESK-RAG\"\n                        )\n                        logger.error(f\"SPARKDESK-RAG API error: {error_desc}\")","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/core/knowledge/infra/desk/sparkdesk.py#L84-L120","documentation":"async_request in core/knowledge/infra/desk/sparkdesk.py checks the HTTP response status of the SPARKDESK-RAG endpoint; if resp.status != 200 it logs and raises ThirdPartyException(DESK_RAGError) with f\"SPARKDESK-RAG request failed with status: {resp.status}\". It surfaces the raw status because the body was not yet parsed as JSON.","triggerScenarios":"Calling sparkdesk_query_async when the SPARKDESK-RAG service returns any non-200 HTTP status: 401/403 from bad credentials, 404 from a wrong desk_url path, 429 rate limiting, or 5xx from the SparkDesk backend.","commonSituations":"Wrong SPARKDESK base URL or app id/password in env; expired SparkDesk credentials; gateway (nginx/istio) returning 502/504 when the backend is down; sending to the wrong API version path.","solutions":["Read the status code in the message: 401/403 → fix SPARKDESK credentials; 404 → fix desk_url; 429 → back off and retry; 5xx → check SPARKDESK service health.","Verify the configured SPARKDESK-RAG URL and auth environment variables.","Confirm the SPARKDESK-RAG service is running and reachable from the knowledge service (network/ingress checks).","Add retry-with-backoff for 429/5xx statuses before surfacing the error to users."],"exampleFix":"// before\nresp = await session.post(desk_url, json=payload)\n// after (defensive caller)\ntry:\n    data = await sparkdesk_query_async(payload)\nexcept ThirdPartyException as e:\n    if \"status: 429\" in str(e) or \"status: 5\" in str(e):\n        await asyncio.sleep(2)\n        data = await sparkdesk_query_async(payload)\n    else:\n        raise","handlingStrategy":"try-catch","validationCode":"assert os.getenv(\"SPARKDESK_URL\"), \"SPARKDESK_URL not configured\"","typeGuard":"null","tryCatchPattern":"try:\n    data = await sparkdesk_query_async(payload)\nexcept ThirdPartyException as e:\n    if \"status: 429\" in str(e) or \"status: 5\" in str(e):\n        await asyncio.sleep(2)  # retry transient statuses\n    else:\n        raise","preventionTips":["Validate SPARKDESK credentials and URL per environment","Back off on 429/5xx statuses","Health-check the SPARKDESK-RAG endpoint before traffic"],"tags":["http","third-party-api","sparkdesk"],"backgroundTag":"http-error-status","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"}