{"record":{"id":"c5dc700e1a860d66","repo":"sigoden/aichat","slug":"message-code-typ","errorCode":null,"errorMessage":"{message} (code: {typ})","messagePattern":"(.+?) \\(code: (.+?)\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/client/common.rs","lineNumber":508,"sourceCode":"    bail!(\"The client doesn't support rerank api\")\n}\n\npub fn catch_error(data: &Value, status: u16) -> Result<()> {\n    if (200..300).contains(&status) {\n        return Ok(());\n    }\n    debug!(\"Invalid response, status: {status}, data: {data}\");\n    if let Some(error) = data[\"error\"].as_object() {\n        if let (Some(typ), Some(message)) = (\n            json_str_from_map(error, \"type\"),\n            json_str_from_map(error, \"message\"),\n        ) {\n            bail!(\"{message} (type: {typ})\");\n        } else if let (Some(typ), Some(message)) = (\n            json_str_from_map(error, \"code\"),\n            json_str_from_map(error, \"message\"),\n        ) {\n            bail!(\"{message} (code: {typ})\");\n        }\n    } else if let Some(error) = data[\"errors\"][0].as_object() {\n        if let (Some(code), Some(message)) = (\n            error.get(\"code\").and_then(|v| v.as_u64()),\n            json_str_from_map(error, \"message\"),\n        ) {\n            bail!(\"{message} (status: {code})\")\n        }\n    } else if let Some(error) = data[0][\"error\"].as_object() {\n        if let (Some(status), Some(message)) = (\n            json_str_from_map(error, \"status\"),\n            json_str_from_map(error, \"message\"),\n        ) {\n            bail!(\"{message} (status: {status})\")\n        }\n    } else if let (Some(detail), Some(status)) = (data[\"detail\"].as_str(), data[\"status\"].as_i64())\n    {\n        bail!(\"{detail} (status: {status})\");","sourceCodeStart":490,"sourceCodeEnd":526,"githubUrl":"https://github.com/sigoden/aichat/blob/82976d349ad97ac9aae0655ad631dace5e2a6385/src/client/common.rs#L490-L526","documentation":"Fallback branch in catch_error: the non-2xx JSON body has an error object with a 'code' string (e.g. 'context_length_exceeded', 'invalid_api_key') instead of a 'type' field — the Anthropic/OpenAI variant of the error envelope. The message is the provider's human-readable description; the code classifies it. Only reached when the 'type' field was absent.","triggerScenarios":"Thrown at src/client/common.rs:508 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Match known string codes (e.g. context_length_exceeded) to user-facing guidance such as trimming the conversation or starting a new session","Retry transient server-side codes with backoff","Treat credential-related codes as fatal and prompt re-authentication rather than retrying"],"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"}