Fix provider model inventories and Bedrock verification

This commit is contained in:
2026-10-02 16:41:16 -05:00
parent 2796fdd114
commit 188489c890
13 changed files with 1016 additions and 344 deletions
+30 -13
View File
@@ -819,6 +819,12 @@ impl BedrockAuthMethod {
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, schemars::JsonSchema)]
#[schemars(description = "Configuration for a single AWS Bedrock model.")]
pub struct BedrockModelConfig {
#[serde(default = "default_enabled")]
pub enabled: bool,
/// Live AWS verification is never restored from disk.
#[serde(skip)]
#[schemars(skip)]
pub access_verified: bool,
#[schemars(
description = "The Bedrock model ID (e.g. anthropic.claude-sonnet-4-20250514-v1:0)."
)]
@@ -2347,27 +2353,33 @@ impl AISettings {
/// consulted only for the legacy single-endpoint configuration, which has no per-provider
/// enablement field.
pub fn is_openai_provider_enabled(&self) -> bool {
if !self.openai_providers.value().is_empty() {
return self
self.legacy_openai_provider_enabled()
|| self
.openai_providers
.value()
.iter()
.any(|provider| provider.enabled);
}
.any(|provider| provider.enabled)
}
pub(crate) fn legacy_openai_provider_enabled(&self) -> bool {
*self.openai_enabled.value()
&& !self.openai_providers.value().iter().any(|provider| {
matches!(
provider.kind,
OpenAIProviderKind::OpenAI | OpenAIProviderKind::LiteLLM
) && provider.base_url.trim_end_matches('/')
== self.openai_base_url.value().trim_end_matches('/')
})
}
/// Returns whether an OpenAI-compatible provider is enabled and has at least one enabled model.
pub fn has_enabled_openai_provider(&self) -> bool {
if !self.openai_providers.value().is_empty() {
return self.openai_providers.value().iter().any(|provider| {
provider.enabled && provider.models.iter().any(|model| model.enabled)
});
}
self.is_openai_provider_enabled()
&& self.openai_models.value().iter().any(|model| model.enabled)
self.openai_providers
.value()
.iter()
.any(|provider| provider.enabled && provider.models.iter().any(|model| model.enabled))
|| (self.legacy_openai_provider_enabled()
&& self.openai_models.value().iter().any(|model| model.enabled))
}
pub(crate) fn configured_acp_providers(&self) -> Vec<AcpProviderConfig> {
@@ -2434,7 +2446,12 @@ impl AISettings {
/// Returns whether Galaxy has a local model provider or agent runtime enabled.
pub fn has_enabled_ai_runtime(&self) -> bool {
(*self.bedrock_enabled.value() && !self.bedrock_models.value().is_empty())
(*self.bedrock_enabled.value()
&& self
.bedrock_models
.value()
.iter()
.any(|model| model.enabled))
|| self.has_enabled_openai_provider()
|| (cfg!(unix)
&& FeatureFlag::AgentClientProtocol.is_enabled()
+2
View File
@@ -441,6 +441,8 @@ fn orchestration_is_enabled_when_ai_is_enabled() {
.bedrock_models
.set_value(
vec![BedrockModelConfig {
enabled: true,
access_verified: true,
model_id: "test-model".to_string(),
display_name: "Test model".to_string(),
vision_supported: false,