diff --git a/crates/goose/src/providers/bedrock.rs b/crates/goose/src/providers/bedrock.rs index 66d13d44..0e9f8c09 100644 --- a/crates/goose/src/providers/bedrock.rs +++ b/crates/goose/src/providers/bedrock.rs @@ -323,7 +323,7 @@ impl ProviderDef for BedrockProvider { BEDROCK_DOC_LINK, vec![ ConfigKey::new("AWS_PROFILE", false, false, Some("default"), true), - ConfigKey::new("AWS_REGION", false, false, None, true), + ConfigKey::new("AWS_REGION", true, false, Some("us-east-1"), true), ConfigKey::new("AWS_BEARER_TOKEN_BEDROCK", false, true, None, true), ConfigKey::new("BEDROCK_ENABLE_CACHING", false, false, Some("false"), false), ], @@ -456,11 +456,18 @@ mod tests { .iter() .find(|k| k.name == "AWS_REGION") .expect("AWS_REGION config key should exist"); - assert!(!aws_region.required, "AWS_REGION should not be required"); + assert!( + aws_region.required, + "AWS_REGION is required for Bedrock to be marked as configured" + ); assert!( !aws_region.secret, "AWS_REGION should not be marked as secret" ); + assert!( + aws_region.default.is_some(), + "AWS_REGION should have a default value" + ); let bearer_token = meta .config_keys diff --git a/crates/goose/src/providers/sagemaker_tgi.rs b/crates/goose/src/providers/sagemaker_tgi.rs index d0fce714..1777bfb5 100644 --- a/crates/goose/src/providers/sagemaker_tgi.rs +++ b/crates/goose/src/providers/sagemaker_tgi.rs @@ -285,8 +285,8 @@ impl ProviderDef for SageMakerTgiProvider { SAGEMAKER_TGI_DOC_LINK, vec![ ConfigKey::new("SAGEMAKER_ENDPOINT_NAME", true, false, None, true), - ConfigKey::new("AWS_REGION", true, false, Some("us-east-1"), true), - ConfigKey::new("AWS_PROFILE", true, false, Some("default"), true), + ConfigKey::new("AWS_REGION", false, false, Some("us-east-1"), true), + ConfigKey::new("AWS_PROFILE", false, false, Some("default"), true), ], ) } diff --git a/ui/desktop/src/components/ChatInput.tsx b/ui/desktop/src/components/ChatInput.tsx index c01c1e0e..1c7ea48b 100644 --- a/ui/desktop/src/components/ChatInput.tsx +++ b/ui/desktop/src/components/ChatInput.tsx @@ -145,11 +145,17 @@ export default function ChatInput({ null ) as React.RefObject; const { getProviders } = useConfig(); - const { getCurrentModelAndProvider, currentModel: configModel, currentProvider: configProvider } = useModelAndProvider(); + const { + getCurrentModelAndProvider, + currentModel: configModel, + currentProvider: configProvider, + } = useModelAndProvider(); // Local override for when the user changes the model in the modal, // before the session object is re-fetched from the backend. - const [modelOverride, setModelOverride] = useState<{ model: string; provider: string } | null>(null); + const [modelOverride, setModelOverride] = useState<{ model: string; provider: string } | null>( + null + ); const effectiveModel = modelOverride?.model ?? sessionModel ?? configModel; const effectiveProvider = modelOverride?.provider ?? sessionProvider ?? configProvider; @@ -157,8 +163,12 @@ export default function ChatInput({ // active chats, config defaults for Hub / no-session contexts). useEffect(() => { if (!modelOverride) return; - const sessionCaughtUp = sessionModel === modelOverride.model && sessionProvider === modelOverride.provider; - const configCaughtUp = !sessionId && configModel === modelOverride.model && configProvider === modelOverride.provider; + const sessionCaughtUp = + sessionModel === modelOverride.model && sessionProvider === modelOverride.provider; + const configCaughtUp = + !sessionId && + configModel === modelOverride.model && + configProvider === modelOverride.provider; if (sessionCaughtUp || configCaughtUp) { setModelOverride(null); } diff --git a/ui/desktop/src/components/bottom_menu/CostTracker.tsx b/ui/desktop/src/components/bottom_menu/CostTracker.tsx index 990fddd2..053f57d6 100644 --- a/ui/desktop/src/components/bottom_menu/CostTracker.tsx +++ b/ui/desktop/src/components/bottom_menu/CostTracker.tsx @@ -18,7 +18,13 @@ interface CostTrackerProps { provider: string | null; } -export function CostTracker({ inputTokens = 0, outputTokens = 0, sessionCosts, model: currentModel, provider: currentProvider }: CostTrackerProps) { +export function CostTracker({ + inputTokens = 0, + outputTokens = 0, + sessionCosts, + model: currentModel, + provider: currentProvider, +}: CostTrackerProps) { const [costInfo, setCostInfo] = useState(null); const [isLoading, setIsLoading] = useState(true); const [showPricing, setShowPricing] = useState(true); diff --git a/ui/desktop/src/components/context_management/CreditsExhaustedNotification.tsx b/ui/desktop/src/components/context_management/CreditsExhaustedNotification.tsx index 9f678830..2f00b431 100644 --- a/ui/desktop/src/components/context_management/CreditsExhaustedNotification.tsx +++ b/ui/desktop/src/components/context_management/CreditsExhaustedNotification.tsx @@ -49,8 +49,12 @@ export const CreditsExhaustedNotification: React.FC
-
Insufficient Credits
-
{notification.msg}
+
+ Insufficient Credits +
+
+ {notification.msg} +
{topUpUrl && (
)} - + )} diff --git a/ui/desktop/src/components/settings/dictation/MicrophoneSelector.tsx b/ui/desktop/src/components/settings/dictation/MicrophoneSelector.tsx index 6776c923..5d464cad 100644 --- a/ui/desktop/src/components/settings/dictation/MicrophoneSelector.tsx +++ b/ui/desktop/src/components/settings/dictation/MicrophoneSelector.tsx @@ -16,7 +16,10 @@ interface MicrophoneSelectorProps { const TEST_DURATION_MS = 5000; -export const MicrophoneSelector = ({ selectedDeviceId, onDeviceChange }: MicrophoneSelectorProps) => { +export const MicrophoneSelector = ({ + selectedDeviceId, + onDeviceChange, +}: MicrophoneSelectorProps) => { const [devices, setDevices] = useState([]); const [hasPermission, setHasPermission] = useState(false); const [isTesting, setIsTesting] = useState(false); @@ -163,9 +166,7 @@ export const MicrophoneSelector = ({ selectedDeviceId, onDeviceChange }: Microph value={selectedDeviceId ?? 'system_default'} onValueChange={(v) => onDeviceChange(v === 'system_default' ? null : v)} > - - System Default - + System Default {devices.map((device, i) => ( {getDeviceLabel(device, i)} diff --git a/ui/desktop/src/components/settings/models/subcomponents/SwitchModelModal.tsx b/ui/desktop/src/components/settings/models/subcomponents/SwitchModelModal.tsx index 05785e5e..279abdbb 100644 --- a/ui/desktop/src/components/settings/models/subcomponents/SwitchModelModal.tsx +++ b/ui/desktop/src/components/settings/models/subcomponents/SwitchModelModal.tsx @@ -101,7 +101,11 @@ export const SwitchModelModal = ({ sessionProvider, }: SwitchModelModalProps) => { const { getProviders, read, upsert } = useConfig(); - const { changeModel, currentModel: configModel, currentProvider: configProvider } = useModelAndProvider(); + const { + changeModel, + currentModel: configModel, + currentProvider: configProvider, + } = useModelAndProvider(); // Use session-specific model/provider if available, otherwise fall back to config defaults const currentModel = sessionModel ?? configModel; const currentProvider = sessionProvider ?? configProvider;