Rebasing, going about this another way

This commit is contained in:
Ryan Ward
2026-05-06 07:02:12 -05:00
parent d8d4ac9e5d
commit f4e2475c60
36 changed files with 3040 additions and 466 deletions
+6 -6
View File
@@ -3607,8 +3607,8 @@ impl AIBlock {
}
let ai_settings = AISettings::as_ref(ctx);
let login_command = ai_settings.aws_bedrock_auth_refresh_command.value().clone();
let auto_login_enabled = *ai_settings.aws_bedrock_auto_login.value();
let login_command = ai_settings.bedrock_auth_refresh_command.value().clone();
let auto_login_enabled = *ai_settings.bedrock_auto_login.value();
// If auto-login is enabled, run the login command automatically
if auto_login_enabled {
@@ -5646,7 +5646,7 @@ pub enum AIBlockAction {
ToggleReferencesSection,
ToggleAutoexecuteReadonlyCommandsSpeedbumpCheckbox,
ToggleAutoreadFilesSpeedbumpCheckbox,
ToggleAwsBedrockAutoLogin,
ToggleBedrockAutoLogin,
ToggleCodebaseSearchSpeedbump(Option<usize>),
StartNewConversationButtonClicked {
action_id: AIAgentActionId,
@@ -6246,11 +6246,11 @@ impl TypedActionView for AIBlock {
AIBlockAction::RunAwsLoginCommand => {
ctx.emit(AIBlockEvent::RunAwsLoginCommand);
}
AIBlockAction::ToggleAwsBedrockAutoLogin => {
AIBlockAction::ToggleBedrockAutoLogin => {
AISettings::handle(ctx).update(ctx, |settings, ctx| {
let current = *settings.aws_bedrock_auto_login.value();
let current = *settings.bedrock_auto_login.value();
let new_value = !current;
report_if_error!(settings.aws_bedrock_auto_login.set_value(new_value, ctx));
report_if_error!(settings.bedrock_auto_login.set_value(new_value, ctx));
});
}
AIBlockAction::ConfigureAwsLoginCommand => {
@@ -8,15 +8,20 @@ use warp_multi_agent_api::response_event;
use warpui::{Entity, ModelContext, SingletonEntity};
use crate::{
ai::agent::{
api::{self, generate_multi_agent_output, ConvertToAPITypeError},
conversation::AIConversationId,
AIIdentifiers, CancellationReason,
ai::{
agent::{
api::{self, generate_multi_agent_output, ConvertToAPITypeError},
conversation::AIConversationId,
AIIdentifiers, CancellationReason,
},
bedrock::{client::BedrockClientConfig, models::is_bedrock_model},
},
network::NetworkStatus,
report_error, send_telemetry_from_ctx,
server::server_api::ServerApiProvider,
settings::ai::AISettings,
};
use settings::Setting;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ResponseStreamId(String);
@@ -79,6 +84,30 @@ pub struct ResponseStream {
}
impl ResponseStream {
fn bedrock_config_if_applicable(
model_id: &str,
ctx: &ModelContext<Self>,
) -> Option<BedrockClientConfig> {
let settings = AISettings::as_ref(ctx);
if !*settings.bedrock_enabled.value() {
return None;
}
let configured_models = settings.bedrock_models.value().clone();
if !is_bedrock_model(model_id, &configured_models) {
return None;
}
let auth_method = *settings.bedrock_auth_method.value();
Some(BedrockClientConfig {
auth_method,
profile: settings.bedrock_profile.value().clone(),
region: settings.bedrock_region.value().clone(),
access_key_id: settings.bedrock_access_key_id.value().clone(),
secret_access_key: settings.bedrock_secret_access_key.value().clone(),
cross_region_inference: *settings.bedrock_cross_region_inference.value(),
fallback_to_warp: *settings.bedrock_fallback_to_warp.value(),
})
}
pub fn new(
params: api::RequestParams,
ai_identifiers: AIIdentifiers,
@@ -90,11 +119,12 @@ impl ResponseStream {
let start_time = Local::now();
let request_id = Uuid::new_v4();
let bedrock_config = Self::bedrock_config_if_applicable(params.model.as_str(), ctx);
let params_clone = params.clone();
let _ =
ctx.spawn(
async move {
generate_multi_agent_output(server_api, params_clone, cancellation_rx).await
generate_multi_agent_output(server_api, bedrock_config, params_clone, cancellation_rx).await
},
move |me, stream, ctx| {
me.handle_response_stream_result(request_id, stream, ctx);
@@ -155,9 +185,10 @@ impl ResponseStream {
let request_id = Uuid::new_v4();
self.current_request_id = Some(request_id);
let params = self.params.clone();
let bedrock_config = Self::bedrock_config_if_applicable(params.model.as_str(), ctx);
let server_api = ServerApiProvider::as_ref(ctx).get();
let _ = ctx.spawn(
async move { generate_multi_agent_output(server_api, params, cancellation_rx).await },
async move { generate_multi_agent_output(server_api, bedrock_config, params, cancellation_rx).await },
move |me, stream, ctx| {
me.handle_response_stream_result(request_id, stream, ctx);
},
@@ -78,7 +78,7 @@ impl AwsBedrockCredentialsErrorView {
// Subscribe to AISettings changes to update checkbox state
ctx.subscribe_to_model(&AISettings::handle(ctx), |_me, _, event, ctx| {
if matches!(event, AISettingsChangedEvent::AwsBedrockAutoLogin { .. }) {
if matches!(event, AISettingsChangedEvent::BedrockAutoLogin { .. }) {
ctx.notify();
}
});
@@ -125,7 +125,7 @@ impl View for AwsBedrockCredentialsErrorView {
.finish();
}
let auto_login_enabled = *AISettings::as_ref(app).aws_bedrock_auto_login.value();
let auto_login_enabled = *AISettings::as_ref(app).bedrock_auto_login.value();
// Helper closures to create elements (since Box<dyn Element> can't be cloned)
let make_alert_icon = || {
@@ -280,8 +280,8 @@ impl TypedActionView for AwsBedrockCredentialsErrorView {
}
AwsBedrockCredentialsErrorAction::ToggleAutoLogin => {
AISettings::handle(ctx).update(ctx, |settings, ctx| {
let current = *settings.aws_bedrock_auto_login.value();
report_if_error!(settings.aws_bedrock_auto_login.set_value(!current, ctx));
let current = *settings.bedrock_auto_login.value();
report_if_error!(settings.bedrock_auto_login.set_value(!current, ctx));
});
ctx.notify();
}
@@ -174,7 +174,7 @@ impl PassiveSuggestionsModel {
let stream_handle = ctx.spawn(
async move {
let stream_result =
generate_multi_agent_output(server_api, request_params, cancellation_rx).await;
generate_multi_agent_output(server_api, None, request_params, cancellation_rx).await;
extract_suggestion_from_stream(stream_result).await
},
move |me, result, ctx| {