Properly extract errors from the Anthropic API (#15534)

Before, we missed "successful" responses with the API errors, now they
are properly shown in the assistant panel.


![image](https://github.com/user-attachments/assets/0c0936af-86c2-4def-9a58-25d5e0912b97)


Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2024-07-31 16:31:11 +03:00 committed by GitHub
parent 821ce2fc7c
commit 9384f665bb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 5 deletions

View file

@ -173,9 +173,9 @@ pub async fn stream_completion(
let body_str = std::str::from_utf8(&body)?; let body_str = std::str::from_utf8(&body)?;
match serde_json::from_str::<Event>(body_str) { match serde_json::from_str::<Event>(body_str) {
Ok(Event::Error { error }) => Err(api_error_to_err(error)),
Ok(_) => Err(anyhow!( Ok(_) => Err(anyhow!(
"Unexpected success response while expecting an error: {}", "Unexpected success response while expecting an error: '{body_str}'",
body_str,
)), )),
Err(_) => Err(anyhow!( Err(_) => Err(anyhow!(
"Failed to connect to API: {} {}", "Failed to connect to API: {} {}",
@ -200,6 +200,7 @@ pub fn extract_text_from_events(
ContentDelta::TextDelta { text } => Some(Ok(text)), ContentDelta::TextDelta { text } => Some(Ok(text)),
_ => None, _ => None,
}, },
Event::Error { error } => Some(Err(api_error_to_err(error))),
_ => None, _ => None,
}, },
Err(error) => Some(Err(error)), Err(error) => Some(Err(error)),
@ -207,6 +208,15 @@ pub fn extract_text_from_events(
}) })
} }
fn api_error_to_err(
ApiError {
error_type,
message,
}: ApiError,
) -> anyhow::Error {
anyhow!("API error. Type: '{error_type}', message: '{message}'",)
}
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct Message { pub struct Message {
pub role: Role, pub role: Role,

View file

@ -273,7 +273,7 @@ impl ContextOperation {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum ContextEvent { pub enum ContextEvent {
MessagesEdited, MessagesEdited,
SummaryChanged, SummaryChanged,
@ -2188,7 +2188,7 @@ impl ContextVersion {
} }
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub struct PendingSlashCommand { pub struct PendingSlashCommand {
pub name: String, pub name: String,
pub argument: Option<String>, pub argument: Option<String>,
@ -2196,7 +2196,7 @@ pub struct PendingSlashCommand {
pub source_range: Range<language::Anchor>, pub source_range: Range<language::Anchor>,
} }
#[derive(Clone)] #[derive(Debug, Clone)]
pub enum PendingSlashCommandStatus { pub enum PendingSlashCommandStatus {
Idle, Idle,
Running { _task: Shared<Task<()>> }, Running { _task: Shared<Task<()>> },