Rebasing, going about this another way
This commit is contained in:
@@ -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| {
|
||||
|
||||
Reference in New Issue
Block a user