{"record":{"id":"7e13b87f8085e353","repo":"sigoden/aichat","slug":"invalid-response-data-text-status-status","errorCode":null,"errorMessage":"Invalid response data: {text} (status: {status})","messagePattern":"Invalid response data: (.+?) \\(status: (.+?)\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/client/stream.rs","lineNumber":118,"sourceCode":"            Ok(Event::Open) => {}\n            Ok(Event::Message(message)) => {\n                let message = SseMmessage {\n                    event: message.event,\n                    data: message.data,\n                };\n                if handle(message)? {\n                    break;\n                }\n            }\n            Err(err) => {\n                match err {\n                    EventSourceError::StreamEnded => {}\n                    EventSourceError::InvalidStatusCode(status, res) => {\n                        let text = res.text().await?;\n                        let data: Value = match text.parse() {\n                            Ok(data) => data,\n                            Err(_) => {\n                                bail!(\n                                    \"Invalid response data: {text} (status: {})\",\n                                    status.as_u16()\n                                );\n                            }\n                        };\n                        catch_error(&data, status.as_u16())?;\n                    }\n                    EventSourceError::InvalidContentType(header_value, res) => {\n                        let text = res.text().await?;\n                        bail!(\n                            \"Invalid response event-stream. content-type: {}, data: {text}\",\n                            header_value.to_str().unwrap_or_default()\n                        );\n                    }\n                    _ => {\n                        bail!(\"{}\", err);\n                    }\n                }","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/sigoden/aichat/blob/82976d349ad97ac9aae0655ad631dace5e2a6385/src/client/stream.rs#L100-L136","documentation":"The SSE stream returned a non-2xx status, but the response body could not be parsed as JSON (empty body, HTML error page, or plain text from a gateway), so structured error extraction via catch_error is impossible. The raw text and HTTP status are dumped verbatim; this is the unparseable-error fallback of sse_stream.","triggerScenarios":"Thrown at src/client/stream.rs:118 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use the HTTP status to decide: 401/403 re-authenticate, 429 retry with backoff honoring Retry-After, 5xx retry with backoff","Verify the API base URL — HTML bodies usually indicate a wrong endpoint or reverse-proxy error page","Log the raw body for diagnosis and present only the status code to the user","If the provider returns non-JSON errors consistently, add a text-sniffing branch for known error signatures"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"82976d349ad97ac9aae0655ad631dace5e2a6385","analyzedAt":"2026-09-09T18:33:06.139Z","contentChangedAt":"2026-09-09T18:33:06.139Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}