Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 20 additions & 6 deletions crates/goose-cli/src/session/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
15 changes: 9 additions & 6 deletions crates/goose/src/providers/databricks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
})
Expand Down
Loading