Fix databricks streaming errors (#4506)

This commit is contained in:
David Katz
2025-09-04 10:32:12 -04:00
committed by GitHub
parent 6552d89d6d
commit 422bb77c38
2 changed files with 29 additions and 12 deletions
+20 -6
View File
@@ -1276,12 +1276,26 @@ impl Session {
if let Err(e) = self.handle_interrupted_messages(false).await {
eprintln!("Error handling interruption: {}", e);
}
output::render_error(
"The error above was an exception we were not able to handle.\n\
These errors are often related to connection or authentication\n\
We've removed the conversation up to the most recent user message\n\
- depending on the error you may be able to continue",
);
// Check if it's a ProviderError::ContextLengthExceeded
if e.downcast_ref::<goose::providers::errors::ProviderError>()
.map(|provider_error| matches!(provider_error, goose::providers::errors::ProviderError::ContextLengthExceeded(_)))
.unwrap_or(false) {
output::render_error(
"Context length exceeded error.\n\
The conversation is too long for the model's context window.\n\
Consider using /summarize to condense the conversation history\n\
or /clear to start fresh.\n\
We've removed the conversation up to the most recent user message.",
);
} else {
output::render_error(
"The error above was an exception we were not able to handle.\n\
These errors are often related to connection or authentication\n\
We've removed the conversation up to the most recent user message\n\
- depending on the error you may be able to continue",
);
}
break;
}
None => break,
+9 -6
View File
@@ -16,7 +16,9 @@ use super::errors::ProviderError;
use super::formats::databricks::{create_request, response_to_message};
use super::oauth;
use super::retry::ProviderRetry;
use super::utils::{get_model, handle_response_openai_compat, ImageFormat};
use super::utils::{
get_model, handle_response_openai_compat, map_http_error_to_provider_error, ImageFormat,
};
use crate::config::ConfigError;
use crate::conversation::message::Message;
use crate::impl_provider_default;
@@ -326,11 +328,12 @@ impl Provider for DatabricksProvider {
.with_retry(|| async {
let resp = self.api_client.response_post(&path, &payload).await?;
if !resp.status().is_success() {
return Err(ProviderError::RequestFailed(format!(
"HTTP {}: {}",
resp.status(),
resp.text().await.unwrap_or_default()
)));
let status = resp.status();
let error_text = resp.text().await.unwrap_or_default();
// Parse as JSON if possible to pass to map_http_error_to_provider_error
let json_payload = serde_json::from_str::<Value>(&error_text).ok();
return Err(map_http_error_to_provider_error(status, json_payload));
}
Ok(resp)
})