Fix databricks streaming errors (#4506)
This commit is contained in:
@@ -1276,12 +1276,26 @@ impl Session {
|
|||||||
if let Err(e) = self.handle_interrupted_messages(false).await {
|
if let Err(e) = self.handle_interrupted_messages(false).await {
|
||||||
eprintln!("Error handling interruption: {}", e);
|
eprintln!("Error handling interruption: {}", e);
|
||||||
}
|
}
|
||||||
output::render_error(
|
|
||||||
"The error above was an exception we were not able to handle.\n\
|
// Check if it's a ProviderError::ContextLengthExceeded
|
||||||
These errors are often related to connection or authentication\n\
|
if e.downcast_ref::<goose::providers::errors::ProviderError>()
|
||||||
We've removed the conversation up to the most recent user message\n\
|
.map(|provider_error| matches!(provider_error, goose::providers::errors::ProviderError::ContextLengthExceeded(_)))
|
||||||
- depending on the error you may be able to continue",
|
.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;
|
break;
|
||||||
}
|
}
|
||||||
None => break,
|
None => break,
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ use super::errors::ProviderError;
|
|||||||
use super::formats::databricks::{create_request, response_to_message};
|
use super::formats::databricks::{create_request, response_to_message};
|
||||||
use super::oauth;
|
use super::oauth;
|
||||||
use super::retry::ProviderRetry;
|
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::config::ConfigError;
|
||||||
use crate::conversation::message::Message;
|
use crate::conversation::message::Message;
|
||||||
use crate::impl_provider_default;
|
use crate::impl_provider_default;
|
||||||
@@ -326,11 +328,12 @@ impl Provider for DatabricksProvider {
|
|||||||
.with_retry(|| async {
|
.with_retry(|| async {
|
||||||
let resp = self.api_client.response_post(&path, &payload).await?;
|
let resp = self.api_client.response_post(&path, &payload).await?;
|
||||||
if !resp.status().is_success() {
|
if !resp.status().is_success() {
|
||||||
return Err(ProviderError::RequestFailed(format!(
|
let status = resp.status();
|
||||||
"HTTP {}: {}",
|
let error_text = resp.text().await.unwrap_or_default();
|
||||||
resp.status(),
|
|
||||||
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)
|
Ok(resp)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user